aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2009-03-14sticker: sticker_load_value() returns NULL on error, not falseMax Kellermann1-4/+4
Turn the "return false" error handlers into "return NULL".
2009-03-14sticker: initialize hash table in sticker_new()Max Kellermann1-18/+26
Moved the hash table initialization from sticker_list_values() to the new function sticker_new(). This fixes a memory leak in sticker_list_values().
2009-03-14sticker: don't export sticker_list_values()Max Kellermann4-32/+1
sticker_list_values() is only used internally in sticker.c. Remove sticker_song_list_values() completely, it is superseded by sticker_song_get().
2009-03-14command: use sticker_song_get() instead of sticker_song_list_values()Max Kellermann1-11/+10
2009-03-14sticker: added "struct sticker"Max Kellermann4-0/+131
The sticker struct can be used for enumerating values. This will replace the sticker_list_values() function.
2009-03-14mixer_all: removed debug messageMax Kellermann1-1/+0
Don't dump the volume of all mixers.
2009-03-14mixer: protect the mixer struct with a mutexMax Kellermann3-5/+37
In some rare cases, there was a race condition between the output thread and the main thread: when you disable/enable an output device in the main thread, this caused a crash in the output thread. Protect the whole mixer struct with a GMutex to prevent that.
2009-03-14mixer_api: moved mixer_init() to mixer_api.cMax Kellermann2-9/+9
2009-03-14mixer_api: moved mixer_plugin imports to mixer_list.hMax Kellermann5-11/+36
This patch allows the output plugins to import only mixer_list.h, instead of the full mixer_api.h (which would expose internal structures).
2009-03-14mixer_api: moved functions to mixer_control.cMax Kellermann11-82/+112
mixer_control.h should provide the functions needed to manipulate a mixer, without exposing the internal mixer API (which is provided by mixer_api.h).
2009-03-14mixer_control: moved functions to mixer_all.cMax Kellermann3-71/+61
2009-03-14volume: moved code to mixer_all.cMax Kellermann3-30/+111
2009-03-14mixer_api: moved struct mixer_plugin to mixer_plugin.hMax Kellermann2-41/+74
2009-03-14volume: use bool instead of intMax Kellermann3-15/+22
Return true/false on success/failure, instead of 0/-1. Pass true/false instead of 1/0 for the "rel" boolean parameter.
2009-03-14Removed superfluous if statement in update.c:453Jochen Keil1-28/+22
Check for NULL not necessary here
2009-03-13all: Update copyright header.Avuton Olrich265-1358/+1677
This updates the copyright header to all be the same, which is pretty much an update of where to mail request for a copy of the GPL and the years of the MPD project. This also puts all committers under 'The Music Player Project' umbrella. These entries should go individually in the AUTHORS file, for consistancy.
2009-03-12crossfade: added missing '&'Jeffrey Middleton1-1/+1
2009-03-12crossfade: copy chunk.audio_format in !NDEBUGMax Kellermann1-0/+10
When the destination chunk was empty in cross_fade_apply(), it had no audio_format attached (an attribute which is only used for assertion in the debug build). cross_fade_apply() should assign it the audio_format of the second chunk (if available), otherwise MPD will crash.
2009-03-12output_all: fix off-by-one error in audio_output_all_check()Max Kellermann1-1/+1
When there are chunks which are not yet finished, audio_output_all_check() returned the size of its music pipe minus one. I can't remember exactly why I subtracted 1 from the return value, it must have had something to do with a former meaning of this function. Now it induces assertion failures.
2009-03-12mixer_control: don't touch mixers of disabled outputsMax Kellermann2-0/+15
When an audio output device is disabled, also disable its mixer.
2009-03-12audio: converted device number check to assertionMax Kellermann1-4/+4
No caller must ever pass an invalid device number to mixer_control_setvol() or mixer_control_getvol().
2009-03-12audio: moved mixer functions to mixer_control.cMax Kellermann5-56/+108
2009-03-12volume: removed unused variable "default_mixer"Max Kellermann1-1/+0
2009-03-11Move from the opaque GPtrArray to GHashTable for sticker lists.Eric Wollesen5-45/+34
2009-03-11player_thread: added commentsMax Kellermann2-24/+89
2009-03-11player_thread: removed player_stop_decoder()Max Kellermann1-14/+6
Replaced both player_stop_decoder() invocations with player_dc_stop(), which also cleans up the pipe.
2009-03-11player_thread: don't call dc_stop() twiceMax Kellermann1-3/+1
In the "CANCEL" command handler, the decoder is stopped twice: first by player_dc_stop(), then by dc_stop(). Remove the latter.
2009-03-10output_control: removed audio_output_signal()Max Kellermann2-14/+0
This function was part of a workaround which we don't need anymore.
2009-03-10Cleaned up update_regular_file() method in update.cJochen Keil1-83/+88
After adding the container_scan() method the update_regular_file() method was quite hard to read. Now there's update_container_file() which deals with container files. That way normal container files (i.e. without embedded tracks) are handled by the old code like a regular file. This will fix some of the odd behaviour observed.
2009-03-10alsa: use snd_pcm_sframes_t instead of intMax Kellermann1-2/+1
snd_pcm_writei() returns the type snd_pcm_sframes_t, not int. Use the correct variable type.
2009-03-10alsa: don't close PCM handle in alsa_recover()Max Kellermann1-13/+3
If the PCM handle gets disconnected, don't close and clear it in alsa_recover(). The MPD core will call alsa_close() anyway. This way, we can always assume that alsa_data.pcm is always valid.
2009-03-10player_thread: fill buffer after seekingMax Kellermann1-3/+9
After a seek, wait until enough new chunks are decoded before starting playback. If this takes too long, send silence chunks to the audio outputs meanwhile.
2009-03-10output_all: clear input_audio_format on closeMax Kellermann1-0/+2
When the audio outputs are closed, also clear the audio format. If we don't do this, every call to audio_output_all_update() will open the device, even if it's meant to be paused.
2009-03-10output_all: don't allow audio_format==NULL in audio_output_all_open()Max Kellermann1-5/+3
Don't allow reopening an audio device after pause with audio_format==NULL, force the caller to provide the audio_format each time.
2009-03-10player_thread: pass format to audio_output_all_open() after resumeMax Kellermann1-8/+12
When playback is unpaused, pass the audio_format to audio_output_all_open(). Don't assume that output_all.c remembers the previous audio format. Also check if there has been an audio format yet.
2009-03-10player_thread: moved code to player_send_silence()Max Kellermann1-22/+39
2009-03-10output_thread: check commands while playingMax Kellermann1-1/+1
Check audio_output.command after each sub-chunk has been played. It discards the rest of the chunk, but since all commands make the device stop anyway, this is not a problem, but part of the improvement. This improves the latency of audio output commands.
2009-03-10player_thread: finish failed seek commandMax Kellermann1-1/+5
When seeking into a new song, and the decoder for the new song fails to start up, MPD forgot to send the "command_finished" signal to the main thread.
2009-03-10player_thread: clear player.queued after failureMax Kellermann1-0/+1
When pc.next_song is reset due to a decoder failure, also reset the player.queued flag. player.queued must not be true when there is no pc.next_song.
2009-03-10player_thread: moved code to player_seek_decoder()Max Kellermann1-12/+15
Reset player.xfade and player.buffering from within player_seek_decoder(), not in the player_process_command() switch statement.
2009-03-10music_chunk: increased chunk size to 4 kBMax Kellermann1-2/+1
A larger chunk size means less overhead for managing them. 4 kB seems to be a reasonable choice: it contains 23 ms of 44.1 kHz 16 bit stereo data, or 3 ms of 192 kHz 24 bit stereo data. The original value of 1020 seemed to be too small, there were quite a lot of system calls and context switches.
2009-03-10player_thread: don't free music buffer after decoder failureMax Kellermann1-1/+0
The music_buffer is a global variable, and must not be freed until the player thread exits.
2009-03-09output: play from a music_pipe objectMax Kellermann8-113/+378
Instead of passing individual buffers to audio_output_all_play(), pass music_chunk objects. Append all those chunks asynchronously to a music_pipe instance. All output threads may then read chunks from this pipe. This reduces MPD's internal latency by an order of magnitude.
2009-03-09player_thread: don't open audio device when pausedMax Kellermann1-4/+2
When a PAUSE command is received while the decoder starts, don't open the audio device when the decoder becomes ready. It's pointless, because MPD will close if after that.
2009-03-09music_pipe: added music_pipe_contains()Max Kellermann2-0/+30
2009-03-09player_thread: moved code to player_song_border()Max Kellermann1-6/+19
Moved some more cruft out of do_play().
2009-03-09player_thread: moved code to play_next_chunk()Max Kellermann1-73/+103
Moved some cruft out of do_play().
2009-03-09player_thread: make the music_buffer instance globalMax Kellermann1-14/+15
Preparation for the next patch: since the output devices stay open even when the player thread stops playing, we will need a persistent music buffer.
2009-03-09output_control: make audio_output_open() staticMax Kellermann2-5/+1
audio_output_open() is only called by audio_output_update(). Don't export it.
2009-03-09music_buffer: poison unallocated chunksMax Kellermann1-0/+5
When a music chunk is freed (returned to the buffer), poison its memory.