Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | output/pulse: don't expose internal struct in public header | Max Kellermann | 2011-09-17 | 3 | -36/+56 |
| | | | | | Provide _lock() and _unlock() to wrap all accesses from the mixer plugin. | ||||
* | output/raop: don't expose internal structs in public header | Max Kellermann | 2011-09-17 | 2 | -96/+95 |
| | |||||
* | output/roar: export volume methods | Max Kellermann | 2011-09-17 | 3 | -46/+60 |
| | | | | Use these instead of exposing the internal roar_t struct. | ||||
* | output: rename plugin source files | Max Kellermann | 2011-09-17 | 9 | -0/+0 |
| | |||||
* | output/pulse: move code to _setup_stream() | Max Kellermann | 2011-09-17 | 1 | -15/+36 |
| | |||||
* | input/soup: wait some more before resuming the stream | Max Kellermann | 2011-09-16 | 1 | -1/+6 |
| | |||||
* | input/soup: improve error messages | Max Kellermann | 2011-09-16 | 1 | -12/+43 |
| | | | | | Copy the reason_phrase from the SoupMessage, and check for transport errors in the session callback. | ||||
* | input_stream: non-blocking I/O | Max Kellermann | 2011-09-16 | 52 | -346/+607 |
| | | | | | | | | | Add GMutex, GCond attributes which will be used by callers to conditionally wait on the stream. Remove the (now-useless) plugin method buffer(), wait on GCond instead. Lock the input_stream before each method call. Do the same with the playlist plugins. | ||||
* | input_plugin: add method check() | Max Kellermann | 2011-09-16 | 6 | -0/+72 |
| | | | | | To check for errors without reading. The decoder thread wants to do that, before it passes the input stream to the plugin. | ||||
* | input/{soup,curl}: free unused postponed_error | Max Kellermann | 2011-09-16 | 2 | -0/+8 |
| | | | | Fix memory leak. | ||||
* | input/soup: move libsoup calls to the I/O thread | Max Kellermann | 2011-09-16 | 1 | -4/+25 |
| | | | | | libsoup's asynchronous API is not thread safe. By moving the calls into the I/O thread, several crash bugs will be fixed. | ||||
* | input/soup: wait for _cancel_message() to complete | Max Kellermann | 2011-09-16 | 1 | -5/+21 |
| | | | | | Add the "complete" attribute, and set it in _session_callback(). _close() waits for it to become true. | ||||
* | input/soup: return real GErrors to the caller | Max Kellermann | 2011-09-16 | 1 | -3/+31 |
| | | | | | Add attribute postponed_error, pass this GError to the caller. | ||||
* | input/soup: set the "ready" flag on failure | Max Kellermann | 2011-09-16 | 1 | -0/+2 |
| | | | | Fix deadlock. | ||||
* | input/soup: remove redundant flag "ready" | Max Kellermann | 2011-09-16 | 1 | -6/+2 |
| | | | | | We'll add proper locking now, and there's no need to carry this duplicate flag. | ||||
* | input/soup: report failure in _read() | Max Kellermann | 2011-09-16 | 1 | -0/+1 |
| | | | | To report failures to callers who don't use _buffer(). | ||||
* | input/soup: unlock before cancelling the soup message | Max Kellermann | 2011-09-16 | 1 | -3/+5 |
| | | | | Avoid recursive deadlock in _session_callback(). | ||||
* | decoder_api: remove the loop from decoder_read() | Max Kellermann | 2011-09-16 | 1 | -16/+10 |
| | | | | | This was useless, because input_stream_read() blocks until data is available. Calling it in a loop doesn't make sense. | ||||
* | decoder_api: move code to decoder_check_cancel_read() | Max Kellermann | 2011-09-16 | 1 | -12/+28 |
| | |||||
* | input/curl: wait some more before resuming the stream | Max Kellermann | 2011-09-16 | 1 | -1/+6 |
| | | | | | Pausing and resuming after every little chunk adds lots of overhead. Add a lower level for resuming the stream. | ||||
* | input/curl: clear the "paused" flag before resuming | Max Kellermann | 2011-09-16 | 1 | -1/+1 |
| | | | | | curl_easy_pause(CURLPAUSE_CONT) may have added enough data to go into pause again. | ||||
* | input/curl: remove _schedule_update() | Max Kellermann | 2011-09-16 | 1 | -48/+1 |
| | | | | | Call _update_fds() directly. This is possible because it's only called from within the I/O thread. | ||||
* | input/curl: unlock the mutex for io_thread_call() | Max Kellermann | 2011-09-16 | 1 | -1/+4 |
| | | | | Fix deadlock. | ||||
* | input/soup: fix "unused local variable" warnings | Max Kellermann | 2011-09-16 | 1 | -1/+1 |
| | |||||
* | Merge branch 'v0.16.x' | Max Kellermann | 2011-09-16 | 2 | -2/+3 |
|\ | |||||
| * | input/curl, output/pulse: fix "unused local variable" warnings | Max Kellermann | 2011-09-16 | 2 | -2/+3 |
| | | |||||
* | | input_stream: add "nonnull" attributes | Max Kellermann | 2011-09-15 | 1 | -0/+12 |
| | | |||||
* | | Merge branch 'v0.16.x' | Max Kellermann | 2011-09-15 | 3 | -11/+35 |
|\| | | | | | | | | | | | Conflicts: NEWS configure.ac | ||||
| * | decoder/ffmpeg: flush the codec after seeking | Max Kellermann | 2011-09-15 | 1 | -1/+3 |
| | | | | | | | | | | Let the codec start with fresh buffers. This should fix the remaining seeking issues. | ||||
| * | decoder/ffmpeg: explicitly specify the current stream for seeking | Max Kellermann | 2011-09-15 | 1 | -2/+11 |
| | | | | | | | | | | Use AVStream.time_base to convert the decoder_seek_where() value, and pass the current stream number to av_seek_frame(). | ||||
| * | decoder/ffmpeg: don't require key frame for seeking | Max Kellermann | 2011-09-15 | 1 | -1/+2 |
| | | | | | | | | Use flag AV_TIME_BASE. | ||||
| * | decoder/ffmpeg: higher precision timestamps | Max Kellermann | 2011-09-15 | 1 | -1/+2 |
| | | |||||
| * | decoder/ffmpeg: move formula to time_from_ffmpeg() | Max Kellermann | 2011-09-15 | 1 | -2/+10 |
| | | |||||
| * | decoder/ffmpeg: add local variable "av_stream" | Max Kellermann | 2011-09-15 | 1 | -3/+4 |
| | | | | | | | | Code simplification. | ||||
| * | input/rewind: copy the MIME type only once | Max Kellermann | 2011-09-15 | 1 | -1/+3 |
| | | | | | | | | Reduce heap usage by reducing the number of malloc() / free() calls. | ||||
| * | pcm_format: fix 32-to-24 bit conversion (the "silence" bug) | Max Kellermann | 2011-09-08 | 1 | -2/+2 |
| | | | | | | | | | | | | D'oh, we were reading 16 bit integers instead of 32 bit integers! That caused silence when trying to play a 32 bit input file on a 24 bit sound card (e.g. USB sound chips with 24 bit packed samples). | ||||
* | | input/curl: per-request mutex/cond | Max Kellermann | 2011-09-15 | 1 | -33/+35 |
| | | | | | | | | | | | | | | The global data structures are now lock-free, because they are accessed only from the I/O thread. By using per-request locks, we have finer grained locking, preparing for locks shared with the client. | ||||
* | | input/curl: move all libCURL calls to the I/O thread | Max Kellermann | 2011-09-15 | 1 | -29/+69 |
| | | | | | | | | | | | | This adds some overheads for indirect calls to the I/O thread, but reduces the amount of global locks. Next step will be switching to per-request locks. | ||||
* | | input/file: return NULL instead of "false" | Max Kellermann | 2011-09-15 | 2 | -5/+5 |
| | | |||||
* | | input/curl: don't set "ready" on _easy_free() | Max Kellermann | 2011-09-15 | 1 | -3/+2 |
| | | | | | | | | | | Move the assignment to _request_done(), right before the GCond is signalled. This might fix spurious wakeups. | ||||
* | | input/curl: add assertions on io_thread_inside() | Max Kellermann | 2011-09-15 | 1 | -0/+9 |
| | | |||||
* | | input/curl: merge _request_abort() into _request_done() | Max Kellermann | 2011-09-15 | 1 | -31/+19 |
| | | | | | | | | | | This is a trivial function. Merge some duplicate code, e.g. the g_cond_broadcast() call. | ||||
* | | udp_server: disable -Wmissing-field-initializers | Max Kellermann | 2011-09-15 | 1 | -0/+7 |
| | | |||||
* | | gcc.h: add macro GCC_CHECK_VERSION | Max Kellermann | 2011-09-15 | 1 | -1/+6 |
| | | |||||
* | | input/curl: API documentation fix | Max Kellermann | 2011-09-15 | 1 | -1/+1 |
| | | |||||
* | | input_plugin: add method update() | Max Kellermann | 2011-09-14 | 4 | -0/+33 |
| | | | | | | | | | | Update the struct attributes, important for facades like the "rewind" plugin. To replace buffer(). | ||||
* | | input_internal: add assertions | Max Kellermann | 2011-09-14 | 1 | -0/+9 |
| | | |||||
* | | input_stream: move input_stream_init(), _deinit() to _internal.c | Max Kellermann | 2011-09-14 | 14 | -20/+88 |
| | | |||||
* | | decoder_internal: don't call input_stream_buffer() | Max Kellermann | 2011-09-14 | 3 | -37/+12 |
| | | | | | | | | | | | | This is not necessary since all relevant input plugins have been moved to the I/O thread, and there is no remaining useful buffer() implementation. This also fixes a busy loop when playing radio. | ||||
* | | db_print: move code to function db_selection_print() | Max Kellermann | 2011-09-13 | 7 | -132/+27 |
| | | | | | | | | Use it in handle_lsinfo(), and eliminate some duplicate code. |