- 02 Nov, 2009 4 commits
-
-
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 13 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.
-
Max Kellermann authored
Allocate the directory object after the "directory:" line. Assign the mtime from the input file to this new object, instead of to the parent directory.
-
Max Kellermann authored
Fix a minor memory leak in the error handler.
-
Max Kellermann authored
The old code tried to recover, but what's the point of that? If a directory is duplicate, something is wrong with the database file.
-
Max Kellermann authored
-
Max Kellermann authored
It's legal to pass decoder=NULL to decoder_read(). Add a check.
-
- 31 Oct, 2009 7 commits
-
-
Max Kellermann authored
Allocate a decoder_control object where needed, and pass it around. This will allow more than one decoder thread one day.
-
Max Kellermann authored
Conflicts: NEWS configure.ac src/decoder/ffmpeg_plugin.c src/update.c
-
Max Kellermann authored
-
Max Kellermann authored
Simply use "return" instead of g_thread_exit().
-
Max Kellermann authored
When the songs of two albums are in the same directory, all songs of an album should be right next to each others.
-
Max Kellermann authored
Moved some code to tag_get_value_checked(), to eliminate several NULL checks.
-
Max Kellermann authored
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.
-
- 30 Oct, 2009 1 commit
-
-
Max Kellermann authored
Right after seeking and song change, the elapsed_time shows old information, because the output thread didn't finish a full chunk yet. This patch re-adds a second elapsed_time variable, and keeps track of a fallback value, in case the output thread can't provide a reliable value.
-
- 29 Oct, 2009 9 commits
-
-
Max Kellermann authored
Return false when there was no chunk in the pipe. If the function returns true, then audio_output_task() will not wait for a notify from the player thread. This fixes a race condition.
-
Max Kellermann authored
Don't set the error in play_chunk(); do all the error handling in the caller. The errored_song attribute isn't set anymore; it doesn't make sense for PLAYER_ERROR_AUDIO.
-
Max Kellermann authored
Call a version of audio_output_close() which doesn't lock recursively.
-
Viliam Mateicka authored
-
Max Kellermann authored
Always keep the audio_output object locked within the output thread, unless a plugin method is called. This fixes several race conditions.
-
Max Kellermann authored
drain() is the opposite of cancel(): it waits until all data in the buffer has finished playing. Instead of implicitly draining in the close() method like the ALSA plugin has been doing it forever, let the output thread decide whether to drain or to cancel.
-
Max Kellermann authored
The recovery is for nothing if we get CLOSE afterwards. Let's not recover in the cancel() method, and let the next play() call sort it out.
-
Max Kellermann authored
Don't call filter_close() right after ao_close().
-
Max Kellermann authored
This variable was uninitialized and led to crashes.
-
- 28 Oct, 2009 2 commits
-
-
Max Kellermann authored
libavformat gives us the song artist in the "author" field. Since we use av_metadata_conv(), we don't need to check for "artist".
-
Max Kellermann authored
Convert the metadata with the libavformat function av_metadata_conv(). This ensures that canonical tag names are provided by libavformat, and we can remove the "artist" vs "author" workaround.
-
- 27 Oct, 2009 2 commits
-
-
Max Kellermann authored
When you disable the "follow_outside_symlinks" or the "follow_inside_symlinks" setting, the next update should remove the now-ignored files from the database.
-
Alam Arias authored
-
- 26 Oct, 2009 2 commits
-
-
Viliam Mateicka authored
-
Viliam Mateicka authored
-