Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | {player,output}_thread: fixed elapsed_time quirks | Max Kellermann | 2009-10-30 | 3 | -3/+23 |
| | | | | | | | | Right after seeking and song change, the elapsed_time shows old information, because the output thread didn't finish a full chunk yet. This patch re-adds a second elapsed_time variable, and keeps track of a fallback value, in case the output thread can't provide a reliable value. | ||||
* | output_thread: return bool from ao_play() | Max Kellermann | 2009-10-29 | 1 | -4/+22 |
| | | | | | | Return false when there was no chunk in the pipe. If the function returns true, then audio_output_task() will not wait for a notify from the player thread. This fixes a race condition. | ||||
* | player_thread: set error status in play_next_chunk() | Max Kellermann | 2009-10-29 | 1 | -4/+3 |
| | | | | | | Don't set the error in play_chunk(); do all the error handling in the caller. The errored_song attribute isn't set anymore; it doesn't make sense for PLAYER_ERROR_AUDIO. | ||||
* | output_control: fixed deadlock in audio_output_update() | Max Kellermann | 2009-10-29 | 1 | -1/+21 |
| | | | | Call a version of audio_output_close() which doesn't lock recursively. | ||||
* | httpd: add config option to limit number of clients | Viliam Mateicka | 2009-10-29 | 4 | -3/+31 |
| | |||||
* | output: consistently lock audio output objects | Max Kellermann | 2009-10-29 | 7 | -50/+103 |
| | | | | | Always keep the audio_output object locked within the output thread, unless a plugin method is called. This fixes several race conditions. | ||||
* | output_plugin: added method "drain" | Max Kellermann | 2009-10-29 | 3 | -14/+34 |
| | | | | | | | drain() is the opposite of cancel(): it waits until all data in the buffer has finished playing. Instead of implicitly draining in the close() method like the ALSA plugin has been doing it forever, let the output thread decide whether to drain or to cancel. | ||||
* | output/alsa: don't recover on CANCEL | Max Kellermann | 2009-10-29 | 2 | -1/+2 |
| | | | | | | The recovery is for nothing if we get CLOSE afterwards. Let's not recover in the cancel() method, and let the next play() call sort it out. | ||||
* | output_thread: removed redundant filter_close() call | Max Kellermann | 2009-10-29 | 1 | -4/+0 |
| | | | | Don't call filter_close() right after ao_close(). | ||||
* | output/pulse: initialize pulse_output.mixer | Max Kellermann | 2009-10-29 | 1 | -0/+1 |
| | | | | This variable was uninitialized and led to crashes. | ||||
* | decoder/ffmpeg: removed the "author" vs "artist" workaround | Max Kellermann | 2009-10-28 | 1 | -2/+1 |
| | | | | | libavformat gives us the song artist in the "author" field. Since we use av_metadata_conv(), we don't need to check for "artist". | ||||
* | include pulse/version.h for PA_CHECK_VERSION | Alam Arias | 2009-10-27 | 1 | -0/+2 |
| | |||||
* | encoder: renaming none_encoder to null_encoder | Viliam Mateicka | 2009-10-26 | 3 | -28/+28 |
| | |||||
* | mpd.conf: new bool config value for enabling/disabling inotify update | Viliam Mateicka | 2009-10-26 | 5 | -2/+17 |
| | |||||
* | encoder: new encoder plugin which just pass data through | Viliam Mateicka | 2009-10-24 | 3 | -0/+127 |
| | |||||
* | add --disable-inotify for configure to disable inotify when autodetected | Viliam Mateicka | 2009-10-24 | 3 | -2/+27 |
| | |||||
* | output/jack: implement methods enable()/disable() | Max Kellermann | 2009-10-23 | 1 | -16/+24 |
| | | | | Don't connect to JACK before MPD has daemonized. | ||||
* | output/pulse: implement methods enable()/disable() | Max Kellermann | 2009-10-23 | 1 | -9/+35 |
| | | | | Don't connect to PulseAudio before MPD has daemonized. | ||||
* | output_plugin: added methods enable() and disable() | Max Kellermann | 2009-10-23 | 15 | -1/+213 |
| | | | | | | | With these methods, an output plugin can allocate some global resources only if it is actually enabled. The method enable() is called after daemonization, which allows for more sophisticated resource allocation during that method. | ||||
* | output/pulse: call mixer on state changes | Max Kellermann | 2009-10-23 | 6 | -131/+213 |
| | | | | | | Don't let the mixer plugin "override" the libpulse callbacks. Instead, add a "mixer" attribute to the pulse_output struct, and call the mixer on all interesting events. | ||||
* | mixer_control: don't close the mixer if set_volume() fails | Max Kellermann | 2009-10-23 | 1 | -2/+0 |
| | | | | | A mixer is useful enough if it can be read. Setting it may be found unavailable at runtime. | ||||
* | mixer_plugin: get_volume() may return -1 if unavailable | Max Kellermann | 2009-10-23 | 2 | -4/+8 |
| | | | | | | If the method get_volume() returns -1 and no error object is set, then the volume is currently unavailable, but the mixer should not be closed immediately. | ||||
* | mixer_control: allow methods "open" and "close" to be NULL | Max Kellermann | 2009-10-23 | 2 | -20/+5 |
| | | | | | It's possible to have a mixer implementation which does not explicitly need the methods open() and close(). | ||||
* | mixer/pulse: don't get volume if stream is not yet ready | Max Kellermann | 2009-10-22 | 1 | -3/+3 |
| | | | | Moved the check from pulse_mixer_open() to pulse_mixer_update(). | ||||
* | output/fifo: renamed source to fifo_output_plugin.c | Max Kellermann | 2009-10-22 | 2 | -4/+4 |
| | |||||
* | Makefile.am: enable the "subdir-objects" option | Max Kellermann | 2009-10-22 | 2 | -2/+2 |
| | | | | Don't clutter the top directory with *.o files. | ||||
* | audio: removed function finishAudioConfig() | Max Kellermann | 2009-10-22 | 3 | -8/+0 |
| | | | | There's no point in clearing the audio format before exiting. | ||||
* | main: put #ifdef inside winsock_init() | Max Kellermann | 2009-10-22 | 1 | -5/+2 |
| | | | | | This way, the function call in the main() function does not need another pair of #ifdef/#endif. | ||||
* | permission: improve const-correctness | SF Markus Elfring | 2009-10-22 | 2 | -2/+2 |
| | |||||
* | playlist: new ASX playlist plugin | Max Kellermann | 2009-10-21 | 5 | -1/+343 |
| | | | | Based on the XSPF playlist plugin. | ||||
* | playlist/xspf: ignore text in root, playlist, tracklist | Max Kellermann | 2009-10-21 | 1 | -0/+2 |
| | | | | Added a missing "break". | ||||
* | audio_format: wildcards allowed in audio_format configuration | Max Kellermann | 2009-10-21 | 14 | -30/+118 |
| | | | | | | An asterisk means that this attribute should not be enforced, and stays whatever it used to be. This way, some configuration values work like masks. | ||||
* | audio_parser: moved code to separate functions | Max Kellermann | 2009-10-21 | 1 | -29/+78 |
| | |||||
* | output: convert config_audio_format to an audio_format struct | Max Kellermann | 2009-10-21 | 3 | -14/+16 |
| | | | | This allows more sophisticated audio format selection. | ||||
* | audio_parser: renamed parameter "error" to "error_r" | Max Kellermann | 2009-10-21 | 2 | -10/+12 |
| | | | | It's a double pointer. | ||||
* | audio: removed config_param.value NULL check | Max Kellermann | 2009-10-21 | 1 | -1/+1 |
| | | | | The value is always non-NULL. | ||||
* | output/jack: make ringbuffer_size a size_t | Max Kellermann | 2009-10-21 | 1 | -1/+1 |
| | |||||
* | output/jack: connect to server on MPD startup | Max Kellermann | 2009-10-21 | 2 | -69/+120 |
| | | | | | .. and keep up the JACK connection while MPD runs. Allocate the ring buffers on the first open, and free them at MPD exit. | ||||
* | output/jack: removed the empty "cancel" method | Max Kellermann | 2009-10-21 | 1 | -6/+0 |
| | | | | | JACK doesn't need cancel() because it won't do much anyway. Buffers are small. | ||||
* | output/jack: renamed parameter "error" to "error_r" | Max Kellermann | 2009-10-21 | 1 | -12/+12 |
| | | | | It's a double pointer. | ||||
* | output/jack: implement the "pause" method | Max Kellermann | 2009-10-21 | 2 | -0/+42 |
| | | | | Don't disconnect from JACK during pause. | ||||
* | output/jack: renamed source to jack_output_plugin.c | Max Kellermann | 2009-10-21 | 3 | -5/+5 |
| | |||||
* | pulse: code rewrite using the asynchronous libpulse API | Max Kellermann | 2009-10-21 | 8 | -283/+787 |
| | | | | | | | | This is a complete rewrite of the PulseAudio output plugin. It uses the asynchronous API, which gives us more control over everything. Additionally, it connects to the PulseAudio server on startup, and keeps this connection up while MPD runs. During pause, instead of closing the stream, it enables "cork". | ||||
* | mixer_plugin: pass audio_output pointer to mixer_plugin.init() | Max Kellermann | 2009-10-21 | 9 | -13/+21 |
| | | | | | This allows the mixer object to access its associated audio output object. | ||||
* | volume: added PIPE_EVENT_MIXER | Max Kellermann | 2009-10-21 | 2 | -0/+19 |
| | | | | | Flush the hardware volume cache, and send the MIXER idle event. This allows mixer plugins to detect volume changes. | ||||
* | mixer_plugin: use GError for error handling | Max Kellermann | 2009-10-20 | 11 | -85/+203 |
| | |||||
* | output_init: renamed parameter "error" to "error_r" | Max Kellermann | 2009-10-20 | 2 | -8/+8 |
| | | | | It's a double pointer. | ||||
* | mixer/{oss,alsa}: renamed the mixer source files | Max Kellermann | 2009-10-20 | 7 | -15/+17 |
| | |||||
* | output/pulse: renamed context to "Music Player Daemon" | Max Kellermann | 2009-10-20 | 2 | -1/+2 |
| | | | | This looks nicer in the PulseAudio manager than just "mpd". | ||||
* | pulse: renamed source files | Max Kellermann | 2009-10-20 | 5 | -10/+12 |
| |