aboutsummaryrefslogtreecommitdiffstats
path: root/src/PlayerControl.cxx (unfollow)
Commit message (Collapse)AuthorFilesLines
2014-01-13copyright year 2014Max Kellermann1-1/+1
2014-01-09DetachedSong: fork of struct SongMax Kellermann1-20/+12
From now on, struct Song will be used by the database only, and DetachedSong will be used by everybody else. DetachedSong is easier to use, but Song has lower overhead.
2013-11-28include cleanup using iwyuMax Kellermann1-2/+1
2013-10-29PlayerControl: move attributes to struct CrossFadeSettingsMax Kellermann1-12/+3
2013-10-28player_control: rename to PlayerControlMax Kellermann1-22/+22
2013-10-26PlayerControl: initialize tagged_song in constructorMax Kellermann1-0/+1
2013-10-22Playlist: copy stream tags from the PlayerThreadMax Kellermann1-0/+22
Finally restores an important feature that has been broken for several months when the PlayerThread started working with Song copies instead of pointers to the Queue's Song instances (commit e96779d).
2013-10-19*: use nullptr instead of NULLMax Kellermann1-4/+4
2013-10-17PlayerControl: GetError() returns an Error, not a char*Max Kellermann1-13/+0
2013-10-17Thread/Thread: replacement library for GThreadMax Kellermann1-4/+4
2013-09-27PlayerControl: use strictly typed enumsMax Kellermann1-22/+22
2013-09-27PlayerControl: convert functions to methodsMax Kellermann1-63/+18
2013-09-04util/Error: new error passing libraryMax Kellermann1-9/+5
Replaces GLib's GError.
2013-07-28song: convert header to C++Max Kellermann1-8/+8
2013-01-27PlayerControl: work around std::nanf() not being available on MacPortsMax Kellermann1-0/+6
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-20PlayerControl: move functions into the classMax Kellermann1-108/+92
2013-01-15PlayerControl: initialise attribute "border_pause"Max Kellermann1-1/+2
2013-01-10PlayerControl: switch to the Mutex/Cond classesMax Kellermann1-6/+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-3/+3
Don't let the "client" pass its own GCond. This was not used consistently.
2013-01-09idle: convert to C++Max Kellermann1-5/+1
2013-01-07replay_gain_info, ...: use cmath instead of math.h in C++ modeMax Kellermann1-2/+3
Fixes build problems with mingw32.
2013-01-04PlayerControl: initialize all attributesMax Kellermann1-1/+5
2013-01-04PlayerControl: add constructor and destructorMax Kellermann1-25/+17
2013-01-04player_control.h: convert header to C++Max Kellermann1-1/+1
2013-01-04decoder_*: convert to C++Max Kellermann1-7/+7
2012-09-28main: use C++ compilerMax Kellermann1-1/+1
2012-08-25player_thread: disable cross-fading in "single" modeMax Kellermann1-0/+8
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-0/+7
Make sure the player "owns" the next_song object, so nobody else can free it.
2012-08-08player_control: add GError attributeMax Kellermann1-36/+27
Rewrite of the pc_get_error_message() function, now using a GError object instead of the complicated "errored_song" attribute.
2012-08-08player_control: rename attribute "error" to "error_type"Max Kellermann1-4/+4
2012-08-08player_control: rename player_error enum valuesMax Kellermann1-6/+6
2012-08-08player_control: remove unused enum player_error valuesMax Kellermann1-15/+0
2012-08-08player_control: inline trivial functionsMax Kellermann1-30/+0
2011-10-06player_control: auto-start playback when seeking is requestedMax Kellermann1-3/+0
Now that the player thread can handle SEEK commands while not (yet) playing, we can remove the "pc.state" check from pc_seek().
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-10player_control: removed the global variable "pc"Max Kellermann1-128/+138
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.
2010-06-19player_control: hold mutex in pc_play(), pc_pause()Max Kellermann1-9/+42
Race condition fix.
2010-03-21Add support for MixRamp tagsTim Phipps1-0/+31
Adds mixrampdb and mixrampdelay commands. Reads MIXRAP_START and MIXRAMP_END tags from FLAC files and overlaps instead of crossfading.
2009-12-31Update copyright notices.Avuton Olrich1-1/+1
2009-11-12player_control: hold lock while reading statusMax Kellermann1-1/+4
2009-11-12include config.h in all sourcesMax Kellermann1-0/+1
After we've been hit by Large File Support problems several times in the past week (which only occur on 32 bit platforms, which I don't have), this is yet another attempt to fix the issue.
2009-11-03player_control: moved pc.next_song assertion into lockMax Kellermann1-1/+2
The assertion shouldn't access player_control.next_song without locking it.
2009-11-02{decoder,player}_control: removed duplicate wakeupsMax Kellermann1-3/+2
Don't wake up the target thread in every iteration of the wait() loop. Waking it up once, right after the command has been set, must be enough.
2009-11-02player_control: lock player before setting seek parametersMax Kellermann1-2/+6
These parameters must be protected with a mutex, too. Wrap everything inside player_lock()/player_unlock(), and use player_command_locked() instead of player_command().
2009-10-31decoder_control: removed the global variable "dc"Max Kellermann1-2/+2
Allocate a decoder_control object where needed, and pass it around. This will allow more than one decoder thread one day.
2009-10-31player_control: protect command, state, error with a mutexMax Kellermann1-7/+35
Use GMutex/GCond instead of the notify library. Manually lock the player_control object before accessing the protected attributes. Use the GCond object to notify the player thread and the main thread.