aboutsummaryrefslogtreecommitdiffstats
path: root/src/PlayerThread.cxx (unfollow)
Commit message (Collapse)AuthorFilesLines
2013-01-25PlayerControl: add second Cond objectMax Kellermann1-1/+1
This fixes a deadlock bug introduced by 18076ac9. After all, the second Cond was necessary. The problem: two threads can wait for a signal at the same time. The player thread waits for the output thread to finish playback. The main thread waits for the player thread to complete a command. The output thread finishes playback, and sends a signal, which unfortunately does not wake up the player thread, but the main thread. The main thread sees that the command is still not finished, and waits again. The signal is lost forever, and MPD is deadlocked.
2013-01-21DecoderControl: move functions into the classMax Kellermann1-31/+31
2013-01-20PlayerControl: move functions into the classMax Kellermann1-61/+61
2013-01-10PlayerControl: switch to the Mutex/Cond classesMax Kellermann1-1/+1
2013-01-10PlayerThread: use pc.cond instead of main_condMax Kellermann1-1/+1
The main_cond variable was completely unnecessary. The pc.cond object can be used for both main->pc and pc->main.
2013-01-10DecoderControl: take ownership of client_condMax Kellermann1-1/+1
Don't let the "client" pass its own GCond. This was not used consistently.
2013-01-09EventPipe: rename to GlobalEventsMax Kellermann1-5/+5
2013-01-09event_pipe.h: convert to C++Max Kellermann1-4/+1
2013-01-09idle: convert to C++Max Kellermann1-1/+1
2013-01-07replay_gain_info, ...: use cmath instead of math.h in C++ modeMax Kellermann1-1/+3
Fixes build problems with mingw32.
2013-01-07decoder_api.h, ...: add "extern C"Max Kellermann1-1/+1
2013-01-07mixer_all: convert to C++Max Kellermann1-1/+1
2013-01-04player_control.h: convert header to C++Max Kellermann1-1/+1
2013-01-04MusicChunk: move functions to methodsMax Kellermann1-2/+2
2013-01-04crossfade: convert to C++Max Kellermann1-1/+1
2013-01-04buffer, pipe: convert to C++Max Kellermann1-3/+3
2013-01-04decoder_*: convert to C++Max Kellermann1-1/+1
2013-01-02{decoder,player}_thread: convert to C++Max Kellermann1-24/+25
2012-09-28main: use C++ compilerMax Kellermann1-1/+1
2012-08-25player_thread: disable cross-fading in "single" modeMax Kellermann1-1/+14
This commit reimplements the core of the "single" mode. Instead of doing the detection in the playlist code from the outside, it is moved to the player thread, which gets a new option called "border_pause". It will now pause playback exactly at the beginning of the new song, making the feature more reliable. Now that the player thread knows what will happen, it can suppress cross-fading. Fixes mantis tickets 0003055 and 0003166.
2012-08-15player_control: duplicate the song objectMax Kellermann1-2/+24
Make sure the player "owns" the next_song object, so nobody else can free it.
2012-08-15decoder_control: duplicate the song objectMax Kellermann1-1/+1
Make sure the decoder "owns" the song object, so nobody else can free it.
2012-08-15player_thread: add local variable "start_ms"Max Kellermann1-1/+3
Just in case "song" becomes invalid at some point.
2012-08-15decoder_control: add function _is_current_song()Max Kellermann1-1/+1
Replaces _current_song().
2012-08-08player_control: add GError attributeMax Kellermann1-10/+8
Rewrite of the pc_get_error_message() function, now using a GError object instead of the complicated "errored_song" attribute.
2012-08-08output_all: add basic GError supportMax Kellermann1-5/+19
2012-08-08player_control: rename attribute "error" to "error_type"Max Kellermann1-4/+4
2012-08-08player_control: rename player_error enum valuesMax Kellermann1-4/+4
2011-10-06player_thread: add flag "output_open", fixes assertion failureMax Kellermann1-5/+17
Previously, the condition "defined(play_audio_format)" was used to see if an output device has been opened, but if the device had failed on startup, an assertion failure could occur. This patch adds a separate flag.
2011-10-06player_thread: move code to player_open_output()Max Kellermann1-22/+37
Common function that manages "player" attributes after audio_output_all_open() has returned.
2011-10-06player_thread: handle SEEK while not playingMax Kellermann1-2/+10
2011-10-05decoder_control: add attributes start_ms, end_msMax Kellermann1-1/+3
Don't read song.start_ms and song.end_ms, let the player thread manage this logic instead.
2011-09-22decoder_api: emulate SEEK command for initial seek to CUE trackMax Kellermann1-10/+0
When playing a CUE track, the player thread waited for the decoder to become ready, and then sent a SEEK command to the beginning of the CUE track. If that is near the start of the song file, and the track is short enough, the decoder could have finished decoding already at that point, and seeking fails. This commit makes this initial seek more robust: instead of letting the player thread deal with the difficult timings, let the decoder API emulate a SEEK command, and return it to the decoder plugin, as soon as the plugin finishes its initialization.
2011-07-20player_thread: lock the player while setting the bite_rateMax Kellermann1-0/+2
2011-03-31fix common misspellingsJonathan Neuschäfer1-1/+1
These fixes were mostly generated with `codespell' [0] and manually reviewed. [0] http://git.profusion.mobi/cgit.cgi/lucas/codespell/
2011-01-29copyright year 2011Max Kellermann1-1/+1
2011-01-10decoder_control: store GCond object, not a player_controlMax Kellermann1-1/+1
Remove the decoder dependency on player_control. All player_control was needed for is to signal the player thread, and we can do that with a simple GCond as well.
2011-01-10decoder_control: replace dc_init() with dc_new()Max Kellermann1-6/+5
dc_new() allocates the object and returns it. dc_free() frees it (replaces dc_deinit()).
2011-01-10player_control: removed the global variable "pc"Max Kellermann1-148/+164
Allocate a player_control object where needed, and pass it around. Each "client" object is associated with a "player_control" instance. This prepares multi-player support.
2011-01-07player_thread: discard empty chunks while cross-fadingMax Kellermann1-0/+13
When a music_chunk to be crossfaded consists only of a tag, cross-fading is not possible, and led to an assertion failure. This patch just discards those, as if cross-fading was not enabled.
2011-01-07player_thread: fix assertion failure due to early seekMax Kellermann1-0/+4
Until the decoder plugin has called decoder_initialized(), the player may not submit seek commands. This however could occur with a slow decoder and a CUE file with a virtual song offset. This patch adds another check.
2011-01-07player_thread: make variables more localMax Kellermann1-36/+19
2010-11-05player_thread: fix assertion failure due to wrong music pipe on seekMax Kellermann1-0/+8
When one song is played twice, and the decoder is working on the second "instance", but the first should be seeked, the check in player_seek_decoder() may assume that it can reuse the decoder without exchanging pipes. The last thing was the mistake: the pipe pointer was different, which led to an assertion failure. This patch adds another check which exchanges the player pipe.
2010-11-05decoder_control: pass music_pipe to dc_start()Max Kellermann1-6/+5
More abstraction for decoder_control.pipe.
2010-11-05player_thread: add helper function player_dc_at_next_song()Max Kellermann1-6/+33
Some abstraction for decoder_control.pipe access.
2010-11-05pipe: add helper function music_pipe_empty()Max Kellermann1-2/+2
2010-09-25eliminate g_error() usageThomas Jansen1-1/+2
Replaced all occurrences of g_error() with MPD_ERROR() located in a new header file 'mpd_error.h'. This macro uses g_critical() to print the error message and then exits gracefully in contrast to g_error() which would internally call abort() to produce a core dump. The macro name is distinctive and allows to find all places with dubious error handling. The long-term goal is to get rid of MPD_ERROR() altogether. To facilitate the eventual removal of this macro it was added in a new header file rather than to an existing header file. This fixes #2995 and #3007.
2010-05-08mixramp: Adjust MixRamp threshold to account for ReplayGain.Tim Phipps1-0/+2
2010-05-02player_thread: move cross-fading to output threadMax Kellermann1-8/+4
Remove cross_fade_apply(), and call pcm_mix() in the output thread, mixing the chunk and chunk->other together.
2010-03-21Add support for MixRamp tagsTim Phipps1-2/+14
Adds mixrampdb and mixrampdelay commands. Reads MIXRAP_START and MIXRAMP_END tags from FLAC files and overlaps instead of crossfading.