aboutsummaryrefslogtreecommitdiffstats
path: root/src/PlayerThread.cxx (follow)
Commit message (Collapse)AuthorAgeFilesLines
* PlayerControl: use std::chrono::duration for Seek()Max Kellermann2014-08-271-9/+10
|
* PlayerThread: check if total_time is valid before using itMax Kellermann2014-08-271-1/+1
|
* DecoderControl: use std::chrono::duration for Seek()Max Kellermann2014-08-271-1/+1
|
* PlayerThread: rename player_create() to StartPlayerThread()Max Kellermann2014-08-161-1/+1
|
* MusicChunk: rename struct to MusicChunkMax Kellermann2014-08-121-6/+6
|
* PlayerListener: new interface to replace GlobalEvents accessMax Kellermann2014-02-211-4/+4
|
* OutputAll: convert to class, move instance to class PartitionMax Kellermann2014-01-281-23/+23
| | | | Another big chunk of code for multi-player support.
* decoder/*: move to decoder/plugins/Max Kellermann2014-01-241-2/+2
|
* output/*: move to output/plugins/Max Kellermann2014-01-231-1/+1
|
* thread/Name: set thread namesMax Kellermann2014-01-231-0/+3
| | | | For debugging.
* copyright year 2014Max Kellermann2014-01-131-1/+1
|
* DetachedSong: fork of struct SongMax Kellermann2014-01-091-40/+30
| | | | | | 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.
* PlayerThread: use Song referencesMax Kellermann2014-01-081-15/+13
|
* Merge tag 'release-0.18.6'Max Kellermann2013-12-241-1/+4
|\
| * PlayerThread: log the last song that was playedMax Kellermann2013-12-241-1/+4
| |
* | include cleanup using iwyuMax Kellermann2013-11-281-1/+0
|/
* PlayerThread: fix stuck MPD after song change (0.18.2 regression)Max Kellermann2013-11-081-4/+8
| | | | | | | | | | | | | Commit 77c63511 caused MPD to become stuck right after a song change. The problem was that at some point, the MusicBuffer became full, and the DecoderThread working on the next song waits for the PlayerThread. However, the PlayerThread was stuck in a loop of g_usleep() calls, and never bothered to tell the DecoderThread that the MusicBuffer is not full anymore. This bug is very old, but its chance to occur went from nearly 0% to nearly 100%. The fix is to wake up the DecoderThread before waiting for it. As a side effect, I replaced the g_usleep() call with a Cond::Wait() call.
* PlayerThread: reduce the number of DecoderThread wakeupsMax Kellermann2013-11-061-2/+14
| | | | | | | After the number of decoded chunks has fallen below the threshold, the PlayerThread woke up the DecoderThread over and over. This commit adds a boolean flag that avoids these duplicate wakeups, and thus reduces the number of system calls.
* PlayerThread: enable buffering when starting playbackMax Kellermann2013-11-061-1/+1
| | | | | | For some reason, this got lost in commit 975deca8. Re-enabling this fixes stuttering at the beginning of radio streams.
* Log: add level "DEFAULT"Max Kellermann2013-11-041-1/+1
| | | | | | Map LogLevel::INFO to G_LOG_LEVEL_INFO, and LogLevel::DEFAULT to G_LOG_LEVEL_MESSAGE. Now client connect/disconnect message are only logged on log_level "secure".
* PcmMix: use negative value instead of NaN for additionMax Kellermann2013-10-301-3/+1
| | | | Avoid NaN to allow -ffast-math.
* CrossFade: use negative value for invalid mixramp_delayMax Kellermann2013-10-301-1/+1
| | | | Avoid NaN to allow -ffast-math.
* PlayerControl: move attributes to struct CrossFadeSettingsMax Kellermann2013-10-291-12/+10
|
* DecoderControl: convert mutex and client_cond to a referenceMax Kellermann2013-10-281-19/+12
| | | | | | | | Share the Mutex between the DecoderThread and the PlayerThread. This simplifies synchronization between the two threads and fixes a freeze problem: while the PlayerThread waits for the DeocderThread, it cannot answer requests from the main thread, and the main thread will block until the DecoderThread finishes.
* player_control: rename to PlayerControlMax Kellermann2013-10-281-9/+9
|
* decoder_control: rename to DecoderControlMax Kellermann2013-10-281-4/+4
|
* DecoderControl: add MixRamp gettersMax Kellermann2013-10-261-2/+2
|
* Playlist: copy stream tags from the PlayerThreadMax Kellermann2013-10-221-2/+8
| | | | | | 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).
* Song: pass reference to song_equals()Max Kellermann2013-10-211-1/+1
|
* *: use references instead of pointersMax Kellermann2013-10-191-3/+3
|
* PlayerThread: Only drop 0 length packets without tagsBen Boeckel2013-10-191-1/+1
| | | | | | | | | | Fixes a regression from 752dfb3d95482c562e5d24c6ea839c4815de9a6d which caused the current chunk to be flushed as soon as new replaygain information was found. If this occurs on a tag chunk, it has no data (length 0) and is then skipped before pushing it to all of the outputs. This change allows 0-length chunks through if they contain a tag and they are now appearing in mplayer and mpv properly.
* Thread/Thread: replacement library for GThreadMax Kellermann2013-10-171-13/+8
|
* Song: GetURI() returns std::stringMax Kellermann2013-10-171-7/+6
|
* Log: new logging library APIMax Kellermann2013-10-021-9/+11
| | | | | Prepare to migrate away from GLib. Currently, we're still using GLib as a backend.
* PlayerThread: convert struct player to a classMax Kellermann2013-09-271-14/+17
|
* PlayerThread: use strictly typed enumMax Kellermann2013-09-271-14/+14
|
* PlayerControl: use strictly typed enumsMax Kellermann2013-09-271-44/+44
|
* PlayerThread: move code to player_control::CommandFinished()Max Kellermann2013-09-271-21/+12
|
* PlayerThread: use nullptr instead of NULLMax Kellermann2013-09-271-37/+37
|
* PlayerThread: unlock/lock in player_task()Max Kellermann2013-09-261-8/+3
|
* PlayerThread: move code into the player classMax Kellermann2013-09-261-269/+277
|
* PlayerThread: use player referencesMax Kellermann2013-09-261-116/+115
|
* PlayerThread: use {decoder,player}_control referencesMax Kellermann2013-09-261-214/+214
|
* PlayerThread: allocate decoder_control on the stackMax Kellermann2013-09-261-5/+5
|
* PlayerThread: move global MusicBuffer variable into the player objectMax Kellermann2013-09-261-24/+27
|
* PlayerThread: simplify "buffer empty" assertionMax Kellermann2013-09-261-7/+1
|
* MusicBuffer: expose the C++ APIMax Kellermann2013-09-261-19/+18
|
* MusicPipe: expose the C++ APIMax Kellermann2013-09-261-25/+24
|
* Tag, ...: move to libtag.aMax Kellermann2013-09-051-1/+1
|
* util/Error: new error passing libraryMax Kellermann2013-09-041-21/+19
| | | | Replaces GLib's GError.