aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* crossfade: copy chunk.audio_format in !NDEBUGMax Kellermann2009-03-121-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.
* output_all: fix off-by-one error in audio_output_all_check()Max Kellermann2009-03-121-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.
* Makefile.am: link test/software_volume with GLibMax Kellermann2009-03-121-0/+2
| | | | That linker flag got lost when AM_LDFLAGS was removed.
* mixer_control: don't touch mixers of disabled outputsMax Kellermann2009-03-122-0/+15
| | | | When an audio output device is disabled, also disable its mixer.
* audio: converted device number check to assertionMax Kellermann2009-03-121-4/+4
| | | | | No caller must ever pass an invalid device number to mixer_control_setvol() or mixer_control_getvol().
* audio: moved mixer functions to mixer_control.cMax Kellermann2009-03-126-58/+115
|
* volume: removed unused variable "default_mixer"Max Kellermann2009-03-121-1/+0
|
* doc: added installation manual to the User's ManualMax Kellermann2009-03-121-0/+47
| | | | Very small start..
* doc: added skeleton for the user manualMax Kellermann2009-03-123-1/+43
|
* Move from the opaque GPtrArray to GHashTable for sticker lists.Eric Wollesen2009-03-115-45/+34
|
* Pass glib libs properly to libtool.Diego Elio 'Flameeyes' Pettenò2009-03-111-6/+10
| | | | | | Passing libraries through LDFLAGS is a mistake that causes link to fail when using --as-needed. Since the ld arguments are positional, so are libtool's. Use the proper variable, thus, to pass the libraries.
* player_thread: added commentsMax Kellermann2009-03-112-24/+89
|
* player_thread: removed player_stop_decoder()Max Kellermann2009-03-111-14/+6
| | | | | Replaced both player_stop_decoder() invocations with player_dc_stop(), which also cleans up the pipe.
* player_thread: don't call dc_stop() twiceMax Kellermann2009-03-111-3/+1
| | | | | In the "CANCEL" command handler, the decoder is stopped twice: first by player_dc_stop(), then by dc_stop(). Remove the latter.
* configure.ac: add -pg to MPD_LIBS with --enable-gprofMax Kellermann2009-03-111-0/+1
|
* output_control: removed audio_output_signal()Max Kellermann2009-03-102-14/+0
| | | | This function was part of a workaround which we don't need anymore.
* Cleaned up update_regular_file() method in update.cJochen Keil2009-03-101-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.
* alsa: use snd_pcm_sframes_t instead of intMax Kellermann2009-03-101-2/+1
| | | | | snd_pcm_writei() returns the type snd_pcm_sframes_t, not int. Use the correct variable type.
* alsa: don't close PCM handle in alsa_recover()Max Kellermann2009-03-101-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.
* player_thread: fill buffer after seekingMax Kellermann2009-03-102-3/+10
| | | | | | 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.
* output_all: clear input_audio_format on closeMax Kellermann2009-03-101-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.
* output_all: don't allow audio_format==NULL in audio_output_all_open()Max Kellermann2009-03-101-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.
* player_thread: pass format to audio_output_all_open() after resumeMax Kellermann2009-03-101-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.
* player_thread: moved code to player_send_silence()Max Kellermann2009-03-101-22/+39
|
* output_thread: check commands while playingMax Kellermann2009-03-101-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.
* player_thread: finish failed seek commandMax Kellermann2009-03-101-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.
* player_thread: clear player.queued after failureMax Kellermann2009-03-101-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.
* player_thread: moved code to player_seek_decoder()Max Kellermann2009-03-101-12/+15
| | | | | | Reset player.xfade and player.buffering from within player_seek_decoder(), not in the player_process_command() switch statement.
* music_chunk: increased chunk size to 4 kBMax Kellermann2009-03-101-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.
* test: added program "run_output"Max Kellermann2009-03-103-0/+191
| | | | | The "run_output" program can be used to test an audio output plugin in an isolated environment.
* Makefile.am: moved file names to $(OUTPUT_API_SRC)Max Kellermann2009-03-101-3/+5
|
* player_thread: don't free music buffer after decoder failureMax Kellermann2009-03-101-1/+0
| | | | | The music_buffer is a global variable, and must not be freed until the player thread exits.
* output: play from a music_pipe objectMax Kellermann2009-03-098-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.
* player_thread: don't open audio device when pausedMax Kellermann2009-03-091-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.
* music_pipe: added music_pipe_contains()Max Kellermann2009-03-092-0/+30
|
* player_thread: moved code to player_song_border()Max Kellermann2009-03-091-6/+19
| | | | Moved some more cruft out of do_play().
* player_thread: moved code to play_next_chunk()Max Kellermann2009-03-091-73/+103
| | | | Moved some cruft out of do_play().
* player_thread: make the music_buffer instance globalMax Kellermann2009-03-091-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.
* output_control: make audio_output_open() staticMax Kellermann2009-03-092-5/+1
| | | | | audio_output_open() is only called by audio_output_update(). Don't export it.
* music_buffer: poison unallocated chunksMax Kellermann2009-03-091-0/+5
| | | | | When a music chunk is freed (returned to the buffer), poison its memory.
* poison: added valgrind supportMax Kellermann2009-03-092-0/+15
| | | | | | 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.
* added memory poisoning libraryMax Kellermann2009-03-092-0/+62
| | | | | Memory poisoning is useful for marking memory regions as "undefined". This poisoning only enabled in the debug build (!NDEBUG).
* output_thread: wait 10 seconds before reopening after play failureMax Kellermann2009-03-092-0/+5
| | | | | | 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().
* Fix remove-flac-song-on-every-updateJochen Keil2009-03-091-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
* Initial support for embedded cue sheets found in flac filesJochen Keil2009-03-094-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.
* decoder_plugin: added method container_scan()Jochen Keil2009-03-095-20/+136
| | | | | [mk: fixed whitespace errors; use delete_song() instead of songvec_delete()]
* music_chunk: added assertions on the audio formatMax Kellermann2009-03-085-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.
* output_thread: print "closed" debug messageMax Kellermann2009-03-081-0/+2
|
* alsa: determine buffer_time if not already knownMax Kellermann2009-03-081-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().
* alsa: better period_time default value for high sample ratesMax Kellermann2009-03-082-3/+9
| | | | | | | | | | | | | | | | | | 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.