aboutsummaryrefslogtreecommitdiffstats
path: root/src/output_thread.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* output: delay reopen after device failureMax Kellermann2008-10-291-0/+8
| | | | | | | When one of several output devices failed, MPD tried to reopen it quite often, wasting a lot of resources. This patch adds a delay: wait 10 seconds before retrying. This might be changed to exponential delays later, but for now, it makes the problem go away.
* output: always call cancel() before stop()Max Kellermann2008-10-291-0/+4
| | | | | | Stopping an audio output device without cancelling its buffer doesn't make sense. Combine the two operations, which saves several cancel calls.
* output: close device on play errorMax Kellermann2008-10-291-0/+5
| | | | | When an output plugin fails to play a chunk, close it. This replaces various manual close() calls in nearly all plugins.
* output: use bool for return values and flagsMax Kellermann2008-10-291-4/+4
| | | | | Don't return 0/-1 on success/error, but true/false. Instead of int, use bool for storing flags.
* pcm_utils: no CamelCaseMax Kellermann2008-10-211-8/+8
| | | | Renamed all functions which were still in CamelCase.
* don't include os_compat.hMax Kellermann2008-10-081-0/+2
| | | | | When there are standardized headers, use these instead of the bloated os_compat.h.
* audio_output: added method pause()Max Kellermann2008-09-291-0/+18
| | | | | | | | | | | | pause() puts the audio output into pause mode: if supported, it may perform a special action, which keeps the device open, but does not play anything. Output plugins like "shout" might want to play silence during pause, so their clients won't be disconnected. Plugins which do not support pausing will simply be closed, and have to be reopened when unpaused. This pach includes an implementation for the shout plugin, which sends silence chunks.
* notify: protect notify->pending with the mutexMax Kellermann2008-09-261-2/+0
| | | | | | | | | | There was a known deadlocking bug in the notify library: when the other thread set notify->pending after the according check in notify_wait(), the latter thread was deadlocked. Resolve this by synchronizing all accesses to notify->pending with the notify object's mutex. Since notify_signal_sync() was never used, we can remove it. As a consequence, we don't need notify_enter() and notify_leave() anymore; eliminate them, too.
* output: make "struct audio_output" opaque for output pluginsMax Kellermann2008-09-241-5/+7
| | | | | | | | | | | We have eliminated direct accesses to the audio_output struct from the all output plugins. Make it opaque for them, and move its real declaration to output_internal.h, similar to decoder_internal.h. Pass the opaque structure to plugin.init() only, which will return the plugin's data pointer on success, and NULL on failure. This data pointer will be passed to all other methods instead of the audio_output struct.
* output: set audio_output->open=1 in audio_output_task()Max Kellermann2008-09-241-1/+7
| | | | | Since the output plugin returns a value indicating success or error, we can have the output core code assign the "open" flag.
* output: pass audio_format to plugin.init() and plugin.open()Max Kellermann2008-09-241-1/+1
| | | | | | | Pass the globally configured audio_format as a const pointer to plugin.init(). plugin.open() gets a writable pointer which contains the audio_format requested by the plugin. Its initial value is either the configured audio_format or the input file's audio_format.
* output: one thread per audio outputMax Kellermann2008-09-241-0/+121
To keep I/O nastiness and latencies away from the core, move the audio output code to a separate thread, one per output. The thread is created on demand, and currently runs until mpd exits.