aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2009-11-01song_save: free song object on errorMax Kellermann1-0/+4
Fix a minor memory leak.
2009-11-01song_save: load one song at a timeMax Kellermann5-76/+34
Changed songvec_load() to song_load(). Added start and end markers for each song. Removed the "key" line, it's redundant.
2009-11-01database: save database format versionMax Kellermann1-1/+17
2009-11-01directory_save: partially revert the g_str_has_prefix() patchMax Kellermann1-2/+2
2009-11-01database: use strcmp() instead of g_str_has_prefix()Max Kellermann3-6/+5
2009-11-01database: removed redundant music_root allocationMax Kellermann1-2/+0
The "music_root" global variable is allocated by db_init().
2009-11-01replay_gain: trigger OPTIONS idle event on mode changeMax Kellermann1-0/+3
2009-11-01text_file: allocate line buffers dynamicallyMax Kellermann7-59/+161
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.
2009-11-01directory_save: allocate directory object earlier, assign mtimeMax Kellermann1-12/+13
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.
2009-11-01directory_save: free directory on errorMax Kellermann1-1/+3
Fix a minor memory leak in the error handler.
2009-11-01directory_save: abort on duplicate subdirectoryMax Kellermann1-7/+9
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.
2009-11-01directory_save: moved code to directory_load_subdir()Max Kellermann1-49/+63
2009-11-01decoder_api: check decoder==NULL in decoder_read()Max Kellermann1-1/+2
It's legal to pass decoder=NULL to decoder_read(). Add a check.
2009-10-31decoder_control: removed the global variable "dc"Max Kellermann11-317/+377
Allocate a decoder_control object where needed, and pass it around. This will allow more than one decoder thread one day.
2009-10-31decoder_control: removed unused DECODE_TYPE macrosMax Kellermann1-3/+0
2009-10-31player_thread: simplified thread destructionMax Kellermann1-4/+2
Simply use "return" instead of g_thread_exit().
2009-10-31songvec: sort songs by album name first, then disc/track numberMax Kellermann1-1/+30
When the songs of two albums are in the same directory, all songs of an album should be right next to each others.
2009-10-31songvec: simplified compare_tag_item()Max Kellermann1-8/+10
Moved some code to tag_get_value_checked(), to eliminate several NULL checks.
2009-10-31player_control: protect command, state, error with a mutexMax Kellermann12-89/+263
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.
2009-10-30{player,output}_thread: fixed elapsed_time quirksMax Kellermann3-3/+23
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.
2009-10-29output_thread: return bool from ao_play()Max Kellermann1-4/+22
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.
2009-10-29player_thread: set error status in play_next_chunk()Max Kellermann1-4/+3
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.
2009-10-29output_control: fixed deadlock in audio_output_update()Max Kellermann1-1/+21
Call a version of audio_output_close() which doesn't lock recursively.
2009-10-29httpd: add config option to limit number of clientsViliam Mateicka2-3/+20
2009-10-29output: consistently lock audio output objectsMax Kellermann5-46/+102
Always keep the audio_output object locked within the output thread, unless a plugin method is called. This fixes several race conditions.
2009-10-29output_plugin: added method "drain"Max Kellermann3-14/+34
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.
2009-10-29output/alsa: don't recover on CANCELMax Kellermann1-1/+1
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.
2009-10-29output_thread: removed redundant filter_close() callMax Kellermann1-4/+0
Don't call filter_close() right after ao_close().
2009-10-29output/pulse: initialize pulse_output.mixerMax Kellermann1-0/+1
This variable was uninitialized and led to crashes.
2009-10-28decoder/ffmpeg: removed the "author" vs "artist" workaroundMax Kellermann1-2/+1
libavformat gives us the song artist in the "author" field. Since we use av_metadata_conv(), we don't need to check for "artist".
2009-10-28decoder/ffmpeg: convert metadataMax Kellermann1-4/+4
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.
2009-10-27update: delete ignored symlinks from databaseMax Kellermann1-1/+5
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.
2009-10-27include pulse/version.h for PA_CHECK_VERSIONAlam Arias1-0/+2
2009-10-26encoder: renaming none_encoder to null_encoderViliam Mateicka2-27/+27
2009-10-26mpd.conf: new bool config value for enabling/disabling inotify updateViliam Mateicka3-2/+8
2009-10-24encoder: new encoder plugin which just pass data throughViliam Mateicka2-0/+126
2009-10-24add --disable-inotify for configure to disable inotify when autodetectedViliam Mateicka1-0/+7
2009-10-23output/jack: implement methods enable()/disable()Max Kellermann1-16/+24
Don't connect to JACK before MPD has daemonized.
2009-10-23output/pulse: implement methods enable()/disable()Max Kellermann1-9/+35
Don't connect to PulseAudio before MPD has daemonized.
2009-10-23output_plugin: added methods enable() and disable()Max Kellermann15-1/+213
With these methods, an output plugin can allocate some global resources only if it is actually enabled. The method enable() is called after daemonization, which allows for more sophisticated resource allocation during that method.
2009-10-23output/pulse: call mixer on state changesMax Kellermann4-129/+196
Don't let the mixer plugin "override" the libpulse callbacks. Instead, add a "mixer" attribute to the pulse_output struct, and call the mixer on all interesting events.
2009-10-23mixer_control: don't close the mixer if set_volume() failsMax Kellermann1-2/+0
A mixer is useful enough if it can be read. Setting it may be found unavailable at runtime.
2009-10-23mixer_plugin: get_volume() may return -1 if unavailableMax Kellermann2-4/+8
If the method get_volume() returns -1 and no error object is set, then the volume is currently unavailable, but the mixer should not be closed immediately.
2009-10-23mixer_control: allow methods "open" and "close" to be NULLMax Kellermann2-20/+5
It's possible to have a mixer implementation which does not explicitly need the methods open() and close().
2009-10-22mixer/pulse: don't get volume if stream is not yet readyMax Kellermann1-3/+3
Moved the check from pulse_mixer_open() to pulse_mixer_update().
2009-10-22output/fifo: renamed source to fifo_output_plugin.cMax Kellermann1-3/+3
2009-10-22audio: removed function finishAudioConfig()Max Kellermann3-8/+0
There's no point in clearing the audio format before exiting.
2009-10-22main: put #ifdef inside winsock_init()Max Kellermann1-5/+2
This way, the function call in the main() function does not need another pair of #ifdef/#endif.
2009-10-22permission: improve const-correctnessSF Markus Elfring2-2/+2
2009-10-21playlist: new ASX playlist pluginMax Kellermann3-0/+340
Based on the XSPF playlist plugin.