aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
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.
2009-03-09poison: added valgrind supportMax Kellermann1-0/+14
If the header valgrind/memcheck.h is available, add VALGRIND_MAKE_MEM_NOACCESS() and VALGRIND_MAKE_MEM_UNDEFINED() support, which enables nice warnings in the valgrind memory checker.
2009-03-09added memory poisoning libraryMax Kellermann1-0/+61
Memory poisoning is useful for marking memory regions as "undefined". This poisoning only enabled in the debug build (!NDEBUG).
2009-03-09output_thread: wait 10 seconds before reopening after play failureMax Kellermann1-0/+4
This is similar to the MPD 0.14 patch "wait 10 seconds before reopening a failed device", which only covered open() failures. This patch adds the same feature for play().
2009-03-09Fix remove-flac-song-on-every-updateJochen Keil1-7/+7
Until now every flac file got removed unconditionally (and then re-added) whenever the update command was issued. Now there is a check if we need to that, so the file will only be removed if there is a embedded cuesheet in that file
2009-03-09Initial support for embedded cue sheets found in flac filesJochen Keil4-7/+464
So far only seekpoints are supported, so no proper tagging yet except for track number and track length. Tagging should be done by parsing the cue sheet which is often embedded as vorbis comment in flac files. Furthermore the pathname should be configurable like "%A - %t - %T", where %A means Artist, %t track number and %T Title or so.
2009-03-09decoder_plugin: added method container_scan()Jochen Keil5-20/+136
[mk: fixed whitespace errors; use delete_song() instead of songvec_delete()]
2009-03-08music_chunk: added assertions on the audio formatMax Kellermann5-0/+89
In !NDEBUG, remember which audio_format is stored in every chunk and every pipe. Check the audio_format of every new data block appended to the music_chunk, and the format of every new chunk appended to the music_pipe.
2009-03-08output_thread: print "closed" debug messageMax Kellermann1-0/+2
2009-03-08alsa: determine buffer_time if not already knownMax Kellermann1-0/+5
This patch fixes a theoretical (but practically impossible) flaw: the variable "buffer_time" may be uninitialized when it is used. Initialize the variable with snd_pcm_hw_params_get_buffer_time().
2009-03-08alsa: better period_time default value for high sample ratesMax Kellermann1-3/+8
The default values for buffer_time and period_time were both capped by the hardware limits on practically all chips. The result was a period_time which was half as big as the buffer_time. On some chips, this led to lots of underruns when using a high sample rate (192 kHz), because MPD had very little time to send new samples to ALSA. A period time which is one fourth of the buffer time turned out to be much better. If no period_time is configured, see how much buffer_time the hardware accepts, and try to configure one fourth of it as period_time, instead of hard-coding the default period_time value. This is yet another attempt to provide a solution which is valid for all sound chips. Using the SND_PCM_NONBLOCK flag also seemed to solve the underruns, but put a lot more CPU load to MPD.
2009-03-07output_all: fix boolean short circuit in update()Max Kellermann1-2/+2
Sometimes, audio_output_update() isn't called for the second device when the first one has succeeded. The patch "audio_output_all_update() returns bool" broke it, because the boolean evaluation ended after the first "true".
2009-03-07player_thread: moved code to player_check_decoder_startup()Max Kellermann1-40/+69
2009-03-07music_pipe: refuse to push empty chunksMax Kellermann1-0/+4
Added two assertions.
2009-03-07decoder_internal: don't push empty chunk into pipeMax Kellermann1-1/+6
When the decoder chunk is empty in decoder_flush_chunk(), don't push it into the music pipe - return it to the music buffer instead. An empty chunk in the pipe wastes resources for no advantage.
2009-03-07chunk: added music_chunk_is_empty()Max Kellermann1-0/+6
2009-03-07music_pipe: poison music_chunk.nextMax Kellermann1-0/+5
The value of music_chunk.next is undefined for a chunk returned by music_pipe_shift(). For more pedantic debugging, poison the reference before returning the chunk.
2009-03-07music_pipe: added music_pipe_peek()Max Kellermann2-0/+13
music_pipe_peek() is similar to music_pipe_shift(), but doesn't remove the chunk. This allows it to be used with a "const" music_pipe.
2009-03-07output_all: audio_output_all_update() returns boolMax Kellermann3-6/+19
audio_output_all_update() returns true when there is at least open output device which is open.
2009-03-07pulse_mixer: allow mpd to reconnect to the pulse mixerDavid Guibert1-29/+24
This patch follows the commit 21bb10f4b. >From Max Kellermann: > I removed the daemonization changes in main.c. Please explain why you > changed that. If you need it for some reason, make that a separate > patch with a good description of your rationale. > That's the biggest flaw of your code: it opens the mixer device in the > init() method, while the open() method is empty. When the pulse > daemon is not available (either during MPD startup or when it dies > while MPD runs), the plugin will not even attempt to reconnect to > pulse. Please move the code to the open() method, to make that work. I changed the daemonize call as the fork losts the connection to the pulse server. According to your remark, the init() method should be moved to the open() ones. With the modification, mpd is able to reconnect the pulse mixer after restarting the pulseaudio daemon. Signed-off-by: David Guibert <david.guibert@gmail.com> Signed-off-by: Max Kellermann <max@duempel.org>
2009-03-07pulse_mixer: added missing copyright headerMax Kellermann1-0/+18
2009-03-07pulse_mixer: added GLib log domainMax Kellermann1-14/+16
Shorten some log messages, let GLib add the "pulse_mixer" prefix.
2009-03-07pulse: clean up includesMax Kellermann1-2/+4
Don't include output_api.h - this is not an output plugin. Added missing explicit conf.h and string.h includes.
2009-03-07pulse mixerDavid Guibert3-0/+294
This patch introduces the mixer for the pulse output. Technically speaking, the pulse index is needed to get or set the volume. You must define callback fonctions to get this index since the pulse output in mpd is done using the simpe api. The pulse simple api does not provide the index of the newly defined output. So callback fonctions are associated to the pulse context. The list of all the sink input is then retreived. Then we select the name of the mpd pulse output and control its volume by its associated index number. Signed-off-by: Patrice Linel <patnathanael@gmail.com> Signed-off-by: David Guibert <david.guibert@gmail.com> [mk: fixed whitespace errors and broke long lines; removed daemonization changes from main.c]
2009-03-07mixer: check for init() failuresMax Kellermann1-1/+1
When the init() method of a mixer plugin fails, mixer_new() dereferences the NULL pointer.
2009-03-06curl: reverse GLIB_CHECK_VERSION()Max Kellermann1-1/+1
The GLIB_CHECK_VERSION() macro was used improperly, which broke build on GLib < 2.14. Add a "!" for negation.
2009-03-06socket_util: check if IN6_IS_ADDR_V4MAPPED is definedMax Kellermann1-2/+2
On some systems, the macro IN6_IS_ADDR_V4MAPPED() is not available. Don't try to convert IPv6 to their IPV4 equivalents in this case.
2009-03-06pipe: added music_buffer, rewrite music_pipeMax Kellermann14-401/+415
Turn the music_pipe into a simple music_chunk queue. The music_chunk allocation code is moved to music_buffer, and is now managed with a linked list instead of a ring buffer. Two separate music_pipe objects are used by the decoder for the "current" and the "next" song, which greatly simplifies the cross-fading code.
2009-03-06music_pipe: added music_pipe_push()Max Kellermann6-128/+196
Added music_pipe_allocate(), music_pipe_push() and music_pipe_cancel(). Those functions allow the caller (decoder thread in this case) to do its own chunk management. The functions music_pipe_flush() and music_pipe_tag() can now be removed.
2009-03-06playlist_control: fix requeue after seekMax Kellermann1-3/+3
The queue update after a seek was wrong: the queued song is cleared by a successful seek. This caused queue/cross-fading problems after a seek.
2009-03-05flac: explicitly check for STOP commandMax Kellermann1-1/+2
After the decoder command was obtained, don't wait until libflac detects EOF (as a side effect), quit the decoder immediately. This check was missing completely.
2009-03-05flac: check command after flac_process_single() failureMax Kellermann1-3/+6
When the MPD core sends the decoder a command while flac_process_single() is executed, this function fails. Abort the decoder only if not seeking. This fixes a seeking bug.
2009-03-05music_chunk: added music_chunk_write(), music_chunk_expand()Max Kellermann3-16/+83
Moved some code from music_pipe_write() and music_pipe_expand(). Only music_chunk.c should access the music_chunk internals.
2009-03-03music_pipe: moved struct music_chunk to chunk.hMax Kellermann7-44/+101
2009-03-03alsa: log period and buffer sizeMax Kellermann1-0/+3
Log the real period and buffer size. This might be useful when debugging xruns. Note that the same information is available in /proc/asound/card*/pcm*p/sub*/hw_params
2009-03-03ls: Print output of supported uri to fp rather than stdout.Avuton Olrich1-1/+1
Since there are no other callers than stdout, this wouldn't be a problem, but since there maybe in the future go ahead and fix it.
2009-03-03ffmpeg: fix version comparision for av_get_bits_per_sample_format() ↵Viliam Mateicka1-1/+1
implemetation function was implemented in the version we are comparing to so there must be higher or equal
2009-03-03ffmpeg: support for new metadata apiViliam Mateicka1-0/+39