Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | PcmResample: un-inline Resample24() | Max Kellermann | 2013-11-22 | 2 | -7/+13 |
| | |||||
* | PcmUtils: add function PcmClampN() | Max Kellermann | 2013-11-22 | 1 | -0/+12 |
| | |||||
* | db/proxy: implement method GetUpdateStamp() | Max Kellermann | 2013-11-22 | 1 | -2/+7 |
| | |||||
* | DatabasePlugin: add method GetUpdateStamp() | Max Kellermann | 2013-11-22 | 6 | -26/+26 |
| | | | | | | Refactor SimpleDatabase::GetLastModified() to be generic for all plugins. Remove the SimpleDatabase assumption from db_stats_print(), allowing it to be implemented by all database plugins. | ||||
* | Stats: print db statistics only if db is available | Max Kellermann | 2013-11-22 | 1 | -6/+19 |
| | | | | Fixes crash on "stats" in certain configurations. | ||||
* | Stats: print more unsigned integers | Max Kellermann | 2013-11-22 | 1 | -6/+6 |
| | |||||
* | Stats: auto-reload statistics with proxy plugin | Max Kellermann | 2013-11-22 | 1 | -0/+7 |
| | |||||
* | Stats: use struct DatabaseStats | Max Kellermann | 2013-11-22 | 2 | -25/+4 |
| | | | | Eliminate redundant declaration. | ||||
* | Stats: move the GTimer variable out of struct stats | Max Kellermann | 2013-11-22 | 2 | -6/+4 |
| | |||||
* | Stats: don't export the global variable "stats" | Max Kellermann | 2013-11-22 | 2 | -3/+1 |
| | | | | Unused outside of Stats.cxx. | ||||
* | Stats: print db_update as unsigned integer | Max Kellermann | 2013-11-22 | 1 | -2/+2 |
| | |||||
* | Mapper: _get_music_directory_utf8() may return nullptr | Max Kellermann | 2013-11-22 | 2 | -2/+5 |
| | | | | | | If no music_directory is configured, return nullptr instead of an empty string. This fixes a crash when db_file is configured without music_directory. | ||||
* | system/ByteOrder: testing for endianness in a more general way | Florian Schlichting | 2013-11-21 | 1 | -1/+11 |
| | | | | | Fixes build tests on ia64 and mipsel by testing for endianness in a more general / portable way. | ||||
* | util/ByteOrder: add comments | Max Kellermann | 2013-11-21 | 1 | -0/+2 |
| | |||||
* | util/ByteOrder: indent the preprocessor directives | Max Kellermann | 2013-11-21 | 1 | -4/+4 |
| | | | | Improve readability. | ||||
* | system/fd_util.h: avoid symbol conflict with statically linked libmpdclient | Denis Krjuchkov | 2013-11-18 | 1 | -0/+5 |
| | |||||
* | decoder/OggFind.cxx: include stdio.h for SEEK_END definition | Denis Krjuchkov | 2013-11-18 | 1 | -0/+2 |
| | |||||
* | util/RefCount: no "constexpr" with libc++ | Max Kellermann | 2013-11-11 | 1 | -1/+6 |
| | | | | Not supported by libc++. | ||||
* | util/LazyRandomEngine: make min()/max() static+constexpr | Max Kellermann | 2013-11-11 | 1 | -4/+4 |
| | | | | Required for building with libc++. | ||||
* | output/httpd: don't use incomplete template argument with libc++ | Max Kellermann | 2013-11-11 | 1 | -0/+5 |
| | |||||
* | filter/route, ...: add missing stdlib.h includes | Max Kellermann | 2013-11-11 | 3 | -0/+3 |
| | |||||
* | DespotifyUtils: add missing stdio.h include | Max Kellermann | 2013-11-11 | 1 | -0/+2 |
| | |||||
* | DecoderAPI: add missing math.h include | Max Kellermann | 2013-11-11 | 1 | -0/+1 |
| | |||||
* | decoder/dsdiff: fix byte order bug | Jurgen Kramer | 2013-11-10 | 2 | -2/+13 |
| | |||||
* | DecoderThread: add missing <functional> include | Max Kellermann | 2013-11-09 | 1 | -0/+2 |
| | |||||
* | DecoderAPI: log without holding mutex | Max Kellermann | 2013-11-08 | 1 | -2/+2 |
| | |||||
* | PlayerThread: fix stuck MPD after song change (0.18.2 regression) | Max Kellermann | 2013-11-08 | 1 | -4/+8 |
| | | | | | | | | | | | | | Commit 77c63511 caused MPD to become stuck right after a song change. The problem was that at some point, the MusicBuffer became full, and the DecoderThread working on the next song waits for the PlayerThread. However, the PlayerThread was stuck in a loop of g_usleep() calls, and never bothered to tell the DecoderThread that the MusicBuffer is not full anymore. This bug is very old, but its chance to occur went from nearly 0% to nearly 100%. The fix is to wake up the DecoderThread before waiting for it. As a side effect, I replaced the g_usleep() call with a Cond::Wait() call. | ||||
* | DecoderInternal: simplify need_chunks() | Max Kellermann | 2013-11-08 | 1 | -11/+4 |
| | | | | | Remove the "do_wait" parameter which is always true. Check only command==NONE and merge the "return" statements. | ||||
* | DecoderInternal: don't wake up player in need_chunks | Max Kellermann | 2013-11-08 | 1 | -1/+0 |
| | | | | Nothing of interest happens here. No need to wake up the player. | ||||
* | input/cdio_paranoia: add setting "default_byte_order" | Max Kellermann | 2013-11-07 | 1 | -2/+26 |
| | | | | | | Allows big-endian users to configure the fallback byte order to little-endian. Without this setting, MPD assumes native byte order if the CD drive can't decide. | ||||
* | AvahiPoll: don't close the dbus socket | Max Kellermann | 2013-11-07 | 1 | -0/+4 |
| | | | | Avoid closing it twice. | ||||
* | input/curl: unregister removed sockets from epoll | Max Kellermann | 2013-11-07 | 1 | -1/+9 |
| | | | | Fixes a crash bug. See code comment. | ||||
* | OutputControl: reduce the number of OutputThread wakeups | Max Kellermann | 2013-11-06 | 4 | -2/+30 |
| | | | | | Wake up the OutputThread only if it hasn't already been woken up and if it isn't already in the playback loop. | ||||
* | PlayerThread: reduce the number of DecoderThread wakeups | Max Kellermann | 2013-11-06 | 1 | -2/+14 |
| | | | | | | | After the number of decoded chunks has fallen below the threshold, the PlayerThread woke up the DecoderThread over and over. This commit adds a boolean flag that avoids these duplicate wakeups, and thus reduces the number of system calls. | ||||
* | DecoderControl: reduce the number of PlayerThread wakeups | Max Kellermann | 2013-11-06 | 3 | -4/+26 |
| | | | | | Wake up the PlayerThread only if it is really waiting for the decoder. This greatly reduces the number of system calls in the DecoderThread. | ||||
* | DecoderInternal: lock DecoderControl in _flush_chunk() | Max Kellermann | 2013-11-06 | 2 | -0/+4 |
| | | | | Must hold the Mutex to signal the Cond object safely. | ||||
* | DecoderInternal: wake up the player thread in _flush_chunk() | Max Kellermann | 2013-11-06 | 2 | -4/+2 |
| | | | | Merge duplicate code. | ||||
* | event/FullyBufferedSocket: remove obsolete TODO comment | Max Kellermann | 2013-11-06 | 1 | -16/+0 |
| | | | | We have a better solution now. | ||||
* | ClientRead: "close" flushes the output buffer | Max Kellermann | 2013-11-06 | 3 | -1/+12 |
| | | | | | | Add a new CommandResult code called "FINISH" which, unlike "CLOSE", will attempt to flush the output buffer. This is a one-shot attempt; it will do one write, and not try again. | ||||
* | event/FullyBufferedSocket: try to write without extra roundtrip | Max Kellermann | 2013-11-06 | 2 | -17/+33 |
| | | | | | | Postpone the write using IdleMonitor instead of scheduling a write event. This reduces the number of system calls, because we don't need to register and unregister the write event in epoll. | ||||
* | event/FullyBufferedSocket: make WriteFromBuffer() protected | Max Kellermann | 2013-11-06 | 2 | -4/+4 |
| | | | | .. and rename it to Flush(). | ||||
* | PlayerThread: enable buffering when starting playback | Max Kellermann | 2013-11-06 | 1 | -1/+1 |
| | | | | | | For some reason, this got lost in commit 975deca8. Re-enabling this fixes stuttering at the beginning of radio streams. | ||||
* | input/curl: fix bug with redirected streams | Max Kellermann | 2013-11-06 | 1 | -110/+138 |
| | | | | | | | | | | | Migrate from the old curl_multi_perform() API to the newer curl_multi_socket_action() API (since CURL 7.16). This allows working around a bug with HTTP redirections with epoll: when CURL closes a socket and the new one happens to have the same file number, MPD did not have a chance to remove the old one from epoll and subsequently attempted to use EPOLL_CTL_MOD, which was not allowed by epoll, because it's a new socket now. | ||||
* | input/curl: move code into class CurlMulti | Max Kellermann | 2013-11-06 | 1 | -43/+66 |
| | | | | | Move all global variables there, and keep just one global variable: the pointer to the CurlMulti instance. Prepares for the next commit. | ||||
* | input/curl: remove the global list of requests | Max Kellermann | 2013-11-06 | 1 | -13/+0 |
| | | | | Unused. | ||||
* | input/curl: don't abort all requests on curl_multi_perform() error | Max Kellermann | 2013-11-06 | 1 | -40/+7 |
| | | | | Eliminate some complicated code that's not worth the trouble. | ||||
* | input/curl: use CURLOPT_PRIVATE | Max Kellermann | 2013-11-06 | 1 | -5/+7 |
| | | | | Replaces the loop in input_curl_find_request(). | ||||
* | event/SocketMonitor: add method Abandon() | Max Kellermann | 2013-11-06 | 4 | -2/+32 |
| | |||||
* | system/ByteOrder: fix big-endian support | Max Kellermann | 2013-11-05 | 1 | -2/+2 |
| | | | | D'oh! | ||||
* | playlist/pls: fix reversed song order | Max Kellermann | 2013-11-05 | 1 | -1/+0 |
| | | | | | Remove the forward_list::reverse() call. It was not necessary, because pls_parser() already reads the playlist in reverse order. |