aboutsummaryrefslogtreecommitdiffstats
path: root/src (follow)
Commit message (Collapse)AuthorAgeFilesLines
* alsa: better period_time default value for high sample ratesMax Kellermann2009-03-081-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.
* output_all: fix boolean short circuit in update()Max Kellermann2009-03-071-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".
* player_thread: moved code to player_check_decoder_startup()Max Kellermann2009-03-071-40/+69
|
* music_pipe: refuse to push empty chunksMax Kellermann2009-03-071-0/+4
| | | | Added two assertions.
* decoder_internal: don't push empty chunk into pipeMax Kellermann2009-03-071-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.
* chunk: added music_chunk_is_empty()Max Kellermann2009-03-071-0/+6
|
* music_pipe: poison music_chunk.nextMax Kellermann2009-03-071-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.
* music_pipe: added music_pipe_peek()Max Kellermann2009-03-072-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.
* output_all: audio_output_all_update() returns boolMax Kellermann2009-03-073-6/+19
| | | | | audio_output_all_update() returns true when there is at least open output device which is open.
* pulse_mixer: allow mpd to reconnect to the pulse mixerDavid Guibert2009-03-071-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>
* pulse_mixer: added missing copyright headerMax Kellermann2009-03-071-0/+18
|
* pulse_mixer: added GLib log domainMax Kellermann2009-03-071-14/+16
| | | | Shorten some log messages, let GLib add the "pulse_mixer" prefix.
* pulse: clean up includesMax Kellermann2009-03-071-2/+4
| | | | | Don't include output_api.h - this is not an output plugin. Added missing explicit conf.h and string.h includes.
* pulse mixerDavid Guibert2009-03-073-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]
* mixer: check for init() failuresMax Kellermann2009-03-071-1/+1
| | | | | When the init() method of a mixer plugin fails, mixer_new() dereferences the NULL pointer.
* curl: reverse GLIB_CHECK_VERSION()Max Kellermann2009-03-061-1/+1
| | | | | The GLIB_CHECK_VERSION() macro was used improperly, which broke build on GLib < 2.14. Add a "!" for negation.
* socket_util: check if IN6_IS_ADDR_V4MAPPED is definedMax Kellermann2009-03-061-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.
* pipe: added music_buffer, rewrite music_pipeMax Kellermann2009-03-0614-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.
* music_pipe: added music_pipe_push()Max Kellermann2009-03-066-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.
* playlist_control: fix requeue after seekMax Kellermann2009-03-061-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.
* flac: explicitly check for STOP commandMax Kellermann2009-03-051-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.
* flac: check command after flac_process_single() failureMax Kellermann2009-03-051-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.
* music_chunk: added music_chunk_write(), music_chunk_expand()Max Kellermann2009-03-053-16/+83
| | | | | Moved some code from music_pipe_write() and music_pipe_expand(). Only music_chunk.c should access the music_chunk internals.
* music_pipe: moved struct music_chunk to chunk.hMax Kellermann2009-03-037-44/+101
|
* alsa: log period and buffer sizeMax Kellermann2009-03-031-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
* ls: Print output of supported uri to fp rather than stdout.Avuton Olrich2009-03-031-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.
* ffmpeg: fix version comparision for av_get_bits_per_sample_format() ↵Viliam Mateicka2009-03-031-1/+1
| | | | | | implemetation function was implemented in the version we are comparing to so there must be higher or equal
* ffmpeg: support for new metadata apiViliam Mateicka2009-03-031-0/+39
|
* cmdline: Print available protocols when --version is run.Avuton Olrich2009-03-033-0/+31
|
* alsa: fall back to 32 bit samples if 16 is not supportedMax Kellermann2009-03-031-1/+2
| | | | | | There are a few high-end devices (e.g. ICE1724) which cannot even play 16 bit audio. Try the 32 bit fallback, which we already implemented for 24 bit.
* Add sticker list command.Eric Wollesen2009-03-035-4/+138
| | | | | [mk: merged memory leak patch; fixed indentation (tabs); fixed documentation typo]
* input_lastfm: new input plugin for last.fm radioMax Kellermann2009-03-024-0/+260
| | | | | | | The lastfm input plugin enables MPD to play lastfm:// URLs. This plugin is not complete yet: it plays only the first song in the last.fm playlist, and the playlist parser isn't even implemented properly.
* input: pass config_param to input_plugin.init()Max Kellermann2009-03-028-7/+50
| | | | | Allow input plugins to configure with an "input" block in mpd.conf. Also allow the user to disable a plugin completely.
* input_plugin: added methods init(), finish()Max Kellermann2009-03-024-13/+35
| | | | | | Instead of hard-coding the plugin global initialization in input_stream_global_init(), make it walk the plugin list and initialize all plugins.
* input: moved plugins to ./src/input/Max Kellermann2009-03-029-8/+8
| | | | Create a sub directory for input plugins.
* input_stream: moved struct input_plugin to input_plugin.hMax Kellermann2009-03-0211-20/+49
| | | | Start to separate private from public input_stream API.
* ffmpeg: use ffmpeg's sampleformat for output formatViliam Mateicka2009-03-021-1/+6
|
* fixing unused parameter warningViliam Mateicka2009-03-021-1/+1
|
* fixing unsigned to signed comparisionViliam Mateicka2009-03-022-2/+2
| | | | [mk: cast off_t to uint32_t; same fix for aiff.c]
* mixer: adding code to optionally disable all hw mixersViliam Mateicka2009-03-023-3/+33
|
* tag_id3: parse ID3 tags in AIFF filesMax Kellermann2009-03-024-5/+149
| | | | | | Added a small AIFF parser library, code copied from the RIFF parser (big-endian integers). Look for an "ID3" chunk, and let libid3tag parse it.
* tag_id3: parse ID3 tags in RIFF/WAV filesMax Kellermann2009-03-023-0/+176
| | | | | Added a small RIFF parser library. Look for an "id3" chunk, and let libid3tag parse it.
* alsa: fall back to 32 bit samples if 24 is not supportedMax Kellermann2009-03-021-0/+8
| | | | | | Some sound chips/drivers (e.g. Intel HDA) don't support 24 bit samples, they want to get 32 bit instead. Now that MPD's PCM library supports 32 bit, add a 32 bit fallback when 24 bit is not supported.
* pcm_convert: added 32 bit supportMax Kellermann2009-03-021-0/+42
| | | | | All PCM sub libraries have 32 bit support now. Add support to the glue function pcm_convert().
* pcm_format: added conversion from 32 bitMax Kellermann2009-03-021-0/+37
| | | | | Support converting 32 bit samples to any other supported sample format.
* pcm_format: added pcm_convert_to_32()Max Kellermann2009-03-022-0/+90
| | | | Added code to convert all other sample formats to 32 bit.
* pcm_dither: added pcm_dither_32_to_16()Max Kellermann2009-03-022-0/+20
| | | | | For 32 bit dithering, reuse the 24 bit dithering code, but apply a 8 bit right shift first.
* pcm_dither: renamed struct pcm_dither_24 to struct pcm_ditherMax Kellermann2009-03-025-12/+11
| | | | | | There is nothing 24 bit specific in the pcm_dither_24 struct. Since we want to reuse the struct for 32 bit dithering, let's drop the "_24" suffix from the struct name.
* pcm_resample: use 24 bit resampling code for 32 bit samplesMax Kellermann2009-03-023-4/+31
| | | | | Resampling 32 bit samples is the same as resampling 24 bit samples - both are stored in the int32_t type.
* pcm_channels: added implementation for 32 bit samplesMax Kellermann2009-03-022-0/+86
| | | | | | Some 24 bit code can be reused. The 32 bit variant has to use 64 bit integers, because 32 bit integers could overflow. This may be a performance hit on 32 bit CPUs.