- 05 Nov, 2009 2 commits
-
-
Max Kellermann authored
Instead of using MPD's audio output name (setting "name"), use a separate configuration option. Change the default to "Music Player Daemon".
-
Max Kellermann authored
When a song's tags could not be loaded during database update, log this as a debug message. Same for a song being removed because its updated tag could not be read.
-
- 04 Nov, 2009 5 commits
-
-
Max Kellermann authored
Store a list of supported tag items in the database. When loading a database which does not have a matching list, we must rescan in order to get the missing information.
-
Max Kellermann authored
Convert a string into a tag_type enum.
-
Max Kellermann authored
Clear the colon. This simplifies all attribute parsers, because they can now use strcmp() instead of strncmp().
-
Max Kellermann authored
If left uninitialized, then the decoder thread quits spuriously.
-
-
- 03 Nov, 2009 17 commits
-
-
Romain Bignon authored
Signed-off-by: Romain Bignon <romain@peerfuse.org>
-
Max Kellermann authored
If no song was queued, then player_control.next_song might contain the value for the next QUEUE command. We must not reset that.
-
Max Kellermann authored
When the decoder finishes the "queued" song very quickly (before the "current" song finishes playing), an assertion in do_play() fails because it thinks that it should start decoding the queued song, although that has in fact just finished.
-
Max Kellermann authored
The assertion shouldn't access player_control.next_song without locking it.
-
Max Kellermann authored
Simplify several expressions.
-
Max Kellermann authored
Don't access attributes without the lock.
-
Max Kellermann authored
Don't access decoder_control attributes directly.
-
Max Kellermann authored
Lock the player_control object when modifying its attributes.
-
Max Kellermann authored
-
Max Kellermann authored
Asynchronous decoder startup is gone, and we don't need to check command==DECODE_COMMAND_START anymore.
-
Max Kellermann authored
These two variables are redundant, we need only one of them.
-
Max Kellermann authored
It's not used if pc.error==PLAYER_ERROR_AUDIO.
-
Max Kellermann authored
This is only a slight change to the previous locking behaviour: keep the decoder unlocked during the loop, and lock it only while checking decoder_control.command.
-
Max Kellermann authored
The START command returns without blocking; we don't need the asynchronous decoder start anymore.
-
Max Kellermann authored
Return the result to the caller more quickly. This unifies error handling: no error can be reported before the command is finished.
-
Max Kellermann authored
They are just informational.
-
Jeffrey Middleton authored
Reintroduce a fix from commit 52a06531 (Warren Dukes): "don't call snd_pcm_drain unless we're already in the RUNNING state". This prevents ALSA with dmix from sometimes hanging when snd_pcm_drain is called, e.g. when moving from one song to the next (as in mantis issue 2634).
-
- 02 Nov, 2009 8 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
When the "next" chunk to be played is NULL, return from ao_play() immediately, without going over the "while" loop (no-op).
-
Max Kellermann authored
While paused, the player thread re-locks its mutex and waits for a signal. This is racy: when the command is set while the thread is waiting for the lock, it may wait forever. This patch adds another command check before player_wait().
-
Max Kellermann authored
After CANCEL, the output thread waits for another signal before it continues playback, to synchronize with the caller. There were some situations where this signal wasn't sent properly. This patch adds an explicit g_cond_signal() at two code positions.
-
Max Kellermann authored
That variable has been superseded by "remove_notify" (defined in update_remove.c).
-
Max Kellermann authored
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.
-
Max Kellermann authored
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().
-
Max Kellermann authored
After CANCEL, call g_cond_wait() only if the new command is still NONE. Problem is that ao_command_finished() has to unlock the audio_output object, and in the meantime, the player thread might have submitted a new command.
-
- 01 Nov, 2009 8 commits
-
-
Max Kellermann authored
Fix a minor memory leak.
-
Max Kellermann authored
Changed songvec_load() to song_load(). Added start and end markers for each song. Removed the "key" line, it's redundant.
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
The "music_root" global variable is allocated by db_init().
-
Max Kellermann authored
-
Max Kellermann authored
Use a single GString buffer object in all functions loading the database. Enlarge it automatically for long lines. This eliminates the maximum line length for tag values. There is still an upper limit of 512 kB to prevent denial of service, but that's reasonable I guess.
-