- 30 Oct, 2008 1 commit
-
-
Max Kellermann authored
Don't return 0/-1 on success/error, but true/false. Instead of int, use bool for storing flags.
-
- 29 Oct, 2008 5 commits
-
-
Max Kellermann authored
Stopping an audio output device without cancelling its buffer doesn't make sense. Combine the two operations, which saves several cancel calls.
-
Max Kellermann authored
Don't return 0/-1 on success/error, but true/false. Instead of int, use bool for storing flags.
-
Max Kellermann authored
When the decoder exited before the buffer has grown big enough ("buffer_before_play"), the player thread waited forever. Add an additional check which disables buffering as soon as the decoder exits.
-
Max Kellermann authored
The local variable "play_audio_format" is updated every time the player starts playing a new song. This way, we always know exactly which audio format is current. The old code broke when a new song had a different format: ob.audio_format is the format of the next song, not of the current one - using this caused breakage for the software volume control.
-
Max Kellermann authored
Request the next song from the playlist (by clearing pc.next_song) only if the player command is empty. If it is not, the player may be clearing the song that has already been queued, leading to an assertion failure.
-
- 27 Oct, 2008 1 commit
-
-
Max Kellermann authored
When the decoder failed to start, the function do_play() returned, still having pc.command==PLAY. This is because pc.command was reset only when the decoder started up successfully. Add another player_command_finished() call in the error handler.
-
- 24 Oct, 2008 1 commit
-
-
Max Kellermann authored
This bug caused the audio output devices to stay open, although MPD wasn't playing: quitDecode() resetted player_control.command, assuming that the command was STOP. This way, player_task() didn't see the CLOSE_AUDIO command, and the device was kept open. Don't clear player_control.command in quitDecode().
-
- 23 Oct, 2008 1 commit
-
-
Max Kellermann authored
Another partial frame fix: the silence buffer was 1020 bytes, which had room for 127.5 24 bit stereo frames. Don't send the partial last frame in this case.
-
- 21 Oct, 2008 1 commit
-
-
Max Kellermann authored
Renamed all functions which were still in CamelCase.
-
- 11 Oct, 2008 4 commits
-
-
Max Kellermann authored
buffered_before_play was copied to struct player because it was used to disable buffering when seeking. Instead of mainaining a copy of this number, move just the flag to the player struct.
-
Max Kellermann authored
QUEUE adds a new song to the player's queue. CANCEL clears the queue. These two commands replace the old and complex queueState and queueLockState code.
-
Max Kellermann authored
The player struct holds the local variables which used to be passed to all those helper functions in player_thread.c.
-
Max Kellermann authored
This variable is superfluous, it is only used to copy its value to player_control.totalTime. Since the original source of this value (song->tag->time) will still be available at this point, we can safely remove fileTime.
-
- 10 Oct, 2008 3 commits
-
-
Max Kellermann authored
The decoder was woken up after each chunk which had been played. That caused a lot of superfluous context switches. Wake up the decoder only when a certain amount of the buffer has been consumed. This formula is somewhat arbitrary, and has to be proven experimentally.
-
Max Kellermann authored
This replaces the attributes bits, channels, sampleRate.
-
Max Kellermann authored
The last bit of CamelCase in audio_format.h. Additionally, rename a bunch of local variables.
-
- 08 Oct, 2008 3 commits
-
-
Max Kellermann authored
CamelCase is ugly... rename all functions.
-
Max Kellermann authored
"bool" should be used in C99 programs for boolean values.
-
Max Kellermann authored
Again, a data type which can be forward-declared.
-
- 29 Sep, 2008 1 commit
-
-
Max Kellermann authored
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.
-
- 26 Sep, 2008 1 commit
-
-
Max Kellermann authored
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.
-
- 07 Sep, 2008 1 commit
-
-
Max Kellermann authored
Get rid of CamelCase, and don't use a typedef, so we can forward-declare it, and unclutter the include dependencies.
-
- 26 Aug, 2008 17 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
Give player.c a better name, meaning that the code is used to control the player thread.
-
Max Kellermann authored
-
Max Kellermann authored
This is the last of the three variables. Now we don't need playerData.h anymore in most sources.
-
Max Kellermann authored
Now that "dc" is available here, we don't have to pass it to decoder_is_idle() and decoder_is_starting() anymore.
-
Max Kellermann authored
decode() is a trivial wrapper for decodeParent(). Merge both and rename them to do_play().
-
Max Kellermann authored
Unfortunately, we have to pass the DecoderControl pointer to these inline functions, because the global variable "dc" may not be available here. This will be fixed later.
-
Max Kellermann authored
When dc->error!=NOERROR, we do not need to check state!=START. Simplify the checks by moving the error check to the top.
-
Max Kellermann authored
The decoder thread is responsible for resetting dc->command after a command was executed. As a consequence, we can assume that dc->command is already NONE after decoder_stop().
-
Max Kellermann authored
The source "decoder_control.c" provides an API for controlling the decoder. This replaces various direct accesses to the DecoderControl struct.
-
Max Kellermann authored
-
Max Kellermann authored
playerKill() was marked as deprecated, but it seems like a good idea to do proper cleanup in all threads (e.g. for usable valgrind results). Introduce the command "EXIT" which makes the player thread exit cleanly.
-
Max Kellermann authored
playerWait() stops the player thread (twice!) and closes the output device. It should be well enough to just send CLOSE_AUDIO, without STOP. This requires a tiny change to the player thread code: make it break when CLOSE_AUDIO is sent.
-
Max Kellermann authored
-
Max Kellermann authored
To make the code more consistent, call quitDecode() only at the end of decodeParent().
-
Max Kellermann authored
Move code which runs in the player thread to player_thread.c. Having a lot of player thread code in decode.c isn't easy to understand.
-