aboutsummaryrefslogtreecommitdiffstats
path: root/src (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* httpd: new output plugin to replace "shout"Max Kellermann2009-03-155-0/+1097
| | | | | | | | | | | | | | | | | | | Let's get rid of the "shout" plugin, and the awfully complicated icecast daemon setup! MPD can do better if it's doing the HTTP server stuff on its own. This new plugin has several advantages: - easier to set up - only one daemon, no password settings, no mount settings - MPD controls the encoder and thus already knows the packet boundaries - icecast has to parse them - MPD doesn't bother to encode data while nobody is listening This implementation is very experimental (no header parsing, ignores request URI, no icy-metadata, ...). It should be able to suport several encoders in parallel in the future (with different bit rates, different codec, ...), to make MPD the perfect streaming server. Once MPD gets multi-player support, we can even mount several different radio stations on one server.
* page: new library for reference counted buffersMax Kellermann2009-03-152-0/+162
|
* vorbis_encoder: make ogg_page a local variableMax Kellermann2009-03-151-24/+13
| | | | | | Converted the ogg_page attribute from the vorbis_encoder struct to a local function of vorbis_encoder_read(). This simplifies some code, because we don't need to check the page anymore before using it.
* vorbis_encoder: fill the ogg_page in the read() methodMax Kellermann2009-03-151-4/+23
| | | | | | | Add the "flush" flag, and defer the ogg_stream_flush() call. Call ogg_stream_pageout() or ogg_stream_flush() (depending on the "flush" flag) in vorbis_encoder_read(). This prevents the ogg_page from getting overwritten by consecutive ogg_stream_pageout() calls.
* socket_util: added socket_bind_listen()Max Kellermann2009-03-143-41/+85
| | | | Moved code from listen_add_address() (listen.c) to socket_util.c.
* client: use the new fifo_buffer libraryMax Kellermann2009-03-141-48/+41
|
* fifo_buffer: added buffering libraryMax Kellermann2009-03-142-0/+288
| | | | | | It is a library which I have written years ago for other projects. This library is licensed under BSD 2-clause, because it is very generic.
* pcm_resample: choose the fallback resampler at runtimeMax Kellermann2009-03-142-18/+34
| | | | | | | | | Even if libsamplerate support is enabled, compile the fallback resampler. When the user specifies the option "samplerate_converter=internal", it is chosen in favor of libsamplerate. This may help users with a weak FPU who don't want to compile a custom MPD from source, because the fallback resampler does not use floating point operations.
* pcm_resample: renamed implementation functionsMax Kellermann2009-03-144-29/+158
| | | | | | Added diversion functions to pcm_resample.c. These check which resampler is enabled at compile time (libsamplerate or fallback). This prepares the following patch.
* output_all: added missing "unused" attributeMax Kellermann2009-03-141-1/+1
| | | | In NDEBUG, clear_tail_chunk() does not use its "chunk" parameter.
* output_all: include chunk.hMax Kellermann2009-03-141-0/+1
| | | | | The source output_all.c accesses music_chunk struct members, but did not include chunk.h directly.
* pcm_volume: use #ifdef instead of #if __i386__Max Kellermann2009-03-141-2/+2
|
* tag_pool: make "slots" staticMax Kellermann2009-03-141-1/+1
| | | | The variable is private.
* pcm_resample: return NULL on failureMax Kellermann2009-03-141-4/+4
| | | | Changed "0" to "NULL".
* pcm_convert: return NULL on failureMax Kellermann2009-03-141-1/+1
| | | | Changed "0" to "NULL".
* command: return COMMAND_RETURN_OK in handle_addid()Max Kellermann2009-03-141-1/+1
| | | | | | At the last line of handle_addid(), the playlist_result value has already been evaluated. Don't return this variable, it's the wrong type.
* command: handle the addToPlaylist() result properlyMax Kellermann2009-03-141-1/+2
| | | | | addToPlaylist() has a "enum playlist_result" return value. Convert that to "enum command_return" properly.
* faad: faad_decoder_decode() returns NULL, not falseMax Kellermann2009-03-141-1/+1
| | | | On failure, the function should return NULL, not a boolean.
* sticker: sticker_load_value() returns NULL on error, not falseMax Kellermann2009-03-141-4/+4
| | | | Turn the "return false" error handlers into "return NULL".
* sticker: initialize hash table in sticker_new()Max Kellermann2009-03-141-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().
* sticker: don't export sticker_list_values()Max Kellermann2009-03-144-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().
* command: use sticker_song_get() instead of sticker_song_list_values()Max Kellermann2009-03-141-11/+10
|
* sticker: added "struct sticker"Max Kellermann2009-03-144-0/+131
| | | | | The sticker struct can be used for enumerating values. This will replace the sticker_list_values() function.
* mixer_all: removed debug messageMax Kellermann2009-03-141-1/+0
| | | | Don't dump the volume of all mixers.
* mixer: protect the mixer struct with a mutexMax Kellermann2009-03-143-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.
* mixer_api: moved mixer_init() to mixer_api.cMax Kellermann2009-03-142-9/+9
|
* mixer_api: moved mixer_plugin imports to mixer_list.hMax Kellermann2009-03-145-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).
* mixer_api: moved functions to mixer_control.cMax Kellermann2009-03-1411-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).
* mixer_control: moved functions to mixer_all.cMax Kellermann2009-03-143-71/+61
|
* volume: moved code to mixer_all.cMax Kellermann2009-03-143-30/+111
|
* mixer_api: moved struct mixer_plugin to mixer_plugin.hMax Kellermann2009-03-142-41/+74
|
* volume: use bool instead of intMax Kellermann2009-03-143-15/+22
| | | | | Return true/false on success/failure, instead of 0/-1. Pass true/false instead of 1/0 for the "rel" boolean parameter.
* Removed superfluous if statement in update.c:453Jochen Keil2009-03-141-28/+22
| | | | Check for NULL not necessary here
* all: Update copyright header.Avuton Olrich2009-03-13265-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.
* crossfade: added missing '&'Jeffrey Middleton2009-03-121-1/+1
|
* 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.
* 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-125-56/+108
|
* volume: removed unused variable "default_mixer"Max Kellermann2009-03-121-1/+0
|
* Move from the opaque GPtrArray to GHashTable for sticker lists.Eric Wollesen2009-03-115-45/+34
|
* 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.
* 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-101-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.