aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2009-03-26pulse: make configuration strings constMax Kellermann2-12/+10
Nobody needs to modify these strings. We can make them const, and convert config_dup_block_string() to config_get_block_string(). This also fixes memory leaks in the pulse mixer.
2009-03-26pulse: don't check config_param!=NULLMax Kellermann2-10/+5
The conf.h functions deal well with config_param==NULL and will return the specified default value then.
2009-03-26pulse_mixer: free libpulse objects on failureMax Kellermann1-0/+6
When the mixer initialization fails, we have to free the libpulse objects we have already created, to prevent resource leaks.
2009-03-26pulse_mixer: unlock the mainloop on failureMax Kellermann1-0/+2
It's illegal to return from pulse_mixer_setup() without unlocking the main loop. In the error handling, that unlock() call was missing.
2009-03-26pulse_mixer: moved code to pulse_mixer_setup()Max Kellermann1-15/+26
Prepare for adding proper error handling.
2009-03-26alsa_mixer: initialize "volume_set" in the open() methodMax Kellermann1-2/+2
"volume_set" is an attribute which becomes undefined when the mixer is closed. That means, it must be initialized each time the mixer is opened.
2009-03-26alsa_mixer: removed superfluous checksMax Kellermann1-10/+6
The MPD core guarantees that methods are always invoked in a consistent state. This means we can remove lots of checks from the volume methods.
2009-03-26alsa_mixer: pass default device to config_get_block_string()Max Kellermann1-14/+7
Instead of replacing NULL with the default device in the open() method, pass the default device to config_get_block_string().
2009-03-26alsa_mixer: make "device" and "control" constMax Kellermann1-6/+5
Use config_get_block_string() instead of config_dup_block_string().
2009-03-26oss_mixer: call oss_find_mixer() in init() methodMax Kellermann1-25/+26
Detect misconfiguration during MPD startup.
2009-03-26oss_mixer: removed superfluous checksMax Kellermann1-8/+8
The MPD core guarantees that methods are always invoked in a consistent state. This means we can remove lots of checks from the volume methods.
2009-03-26oss_mixer: use g_ascii_strncasecmp() instead of strncasecmp()Max Kellermann1-1/+1
strncasecmp() is locale dependent, but we only need ASCII here.
2009-03-26oss_mixer: pass default path to config_get_block_string()Max Kellermann1-8/+5
Instead of replacing NULL with the default path in the open() method, pass the default path to config_get_block_string().
2009-03-26oss_mixer: make "device" and "control" constMax Kellermann1-6/+5
Use config_get_block_string() instead of config_dup_block_string().
2009-03-26mixer: don't reopen failed mixer automaticallyMax Kellermann3-2/+13
If a (global) mixer has been closed due to failure, don't reopen it with every volume get/set. Leave it closed until it is explicitly opened.
2009-03-26mixer_control: close mixer on failureMax Kellermann3-5/+16
When getting or setting the volume fails, the MPD core close the mixer. Moved the duplicated code from the mixer plugins.
2009-03-26mixer: added flag "open"Max Kellermann8-5/+61
Remember if a mixer object is open or closed. Don't call open() again if it is already open. This guarantees that the mixer plugin is always called in a consistent state, and we will be able to remove lots of checks from the implementations. To support mixers which are automatically opened even if the audio output is still closed (to set the volume before playback starts), this patch also adds the "global" flag to the mixer_plugin struct. Both ALSA and OSS set this flag, while PULSE does not.
2009-03-26mixer_control: don't allow mixer==NULLMax Kellermann1-9/+7
As a side effect, the previous patch added the mixer==NULL checks. It is now illegal to call mixer functions with a NULL argument. Convert the runtime checks to assertions.
2009-03-26output_plugin: replaced output_plugin.get_mixer() with mixer_pluginMax Kellermann9-77/+44
The mixer core library is now responsible for creating and managing the mixer object. This removes duplicated code from the output plugins.
2009-03-25player_thread: wait for decoder before seekingMax Kellermann2-0/+12
When the decoder initialization has not been completed yet, all calls to dc_seek() will fail, because dc.seekable is not initialized yet. Wait for the decoder to complete its initialization, i.e. until it has called decoder_initialized().
2009-03-25playlist_state: start playing after restore is completeMax Kellermann1-18/+17
Don't start playback as soon as the "current" song is being loaded from the state file. That is unclean, and leads to an obscure bug: in repeat mode, when the song is started (which is yet the last song in the list), the playlist code marked the very first song in the playlist as "next" song, because the end of the playlist was wrapped. It's easier to set up the playback after all songs have been loaded, and after the random/repeat mode has been set.
2009-03-25output_all: synchronize playback with a notify objectMax Kellermann2-2/+3
Use audio_output_client_notify instead of g_usleep(1ms) in audio_output_all_wait() to synchronize with the output_thread. Signal the audio_output_client_notify object in ao_play().
2009-03-25output_all: moved code to audio_output_all_wait()Max Kellermann3-10/+25
Synchronization with the output thread will be implemented in output_all.c, not in player_thread.c. Currently, that's just a simple g_usleep(1ms).
2009-03-25output: protect audio_output.open with the mutexMax Kellermann3-15/+33
There was a deadlock between the output thread and the player thread: when the output thread failed (and closed itself) while the player thread worked with the audio_output object, MPD could crash.
2009-03-21move printAllOutputPluginTypes to output_list.cViliam Mateicka5-63/+18
2009-03-20output_control: close earlier on format mismatchMax Kellermann1-3/+3
To prevent a race condition, close the output thread before assigning the new audio format.
2009-03-20output: convert audio_output.config_audio_format to booleanMax Kellermann3-20/+17
The config_audio_format used to contain the configured audio format, which is copied to out_audio_format. Let's convert the former to a boolean, which indicates whether out_audio_format was already set. This simplifies some code and saves a few bytes.
2009-03-17page: added page_new_concat()Max Kellermann2-0/+20
2009-03-17player_thread: ignore time stamp on empty chunksMax Kellermann1-3/+6
If a music_chunk does not contain any PCM data, then the "times" and "bit_rate" attributes are undefined.
2009-03-17flac/cue: added support for TITLE[n] commentsMario Lenz1-2/+9
On 2009/03/17 Max Kellermann<max@duempel.org> wrote: > There doesn't seem to be an "official" standard. I'd say: search for > TITLE[1] first (the most explicit form), then TITLE1, and finally fall > back to TITLE. This makes sure MPD supports every possible standard, > without breaking. I've also added some additional checks to make sure entry is long enough.
2009-03-17pulse_mixer: keep mixer attached when another pulse sink is closed.David Guibert1-1/+2
The mixer state is defined as offline only if the associated stream is removed. Signed-off-by: David Guibert <david.guibert@gmail.com>
2009-03-17pulse_mixer: closeDavid Guibert1-1/+14
when the mixer is closed, - the mainloop is stopped. - the context is disconnected. - then the mainloop is freed. Signed-off-by: David Guibert <david.guibert@gmail.com>
2009-03-17httpd: fixed encoder plugin checkJeffrey Middleton1-1/+1
Check if encoder_plugin!=NULL, not encoder_plugin_get (which is a function).
2009-03-16flac: get CUE track titles from additional FLAC commentsMario Lenz4-23/+32
The cue sheet embedded in a flac file doen't contain any information about track titles and similar. There are three possibilities: Use an external cue sheet that includes these information, use a tag CUESHEET with a cue sheet including these information or use tags. I think the latter is the best option and is already used by other projects.
2009-03-16socket_util: use g_strerror() instead of strerror()Max Kellermann1-1/+1
g_strerror() is more portable, and guarantees that the returned string is UTF-8 encoded.
2009-03-16solaris: new audio output plugin for Solaris /dev/audioMax Kellermann2-0/+179
2009-03-16output_all: check param!=NULL before accessing itMax Kellermann1-2/+7
When printing the error message, MPD dereferences the NULL pointer to print an error message if no audio_output section is present.
2009-03-15httpd_output: check client->write_source_id in handlerMax Kellermann1-0/+7
Due to a race condition, httpd_client_out_event() could be called even when its GLib event source was already removed. Check that case.
2009-03-15httpd_output: clear the client's page queue on cancelMax Kellermann2-2/+13
When the httpd output is cancelled, it freed all pages, but didn't remove them from the queue. Call g_queue_clear() and remove the write source id.
2009-03-15vorbis_encoder: added support for all MPD tag typesMax Kellermann1-29/+4
Copy all tags know to MPD to the vorbis_comment.
2009-03-15vorbis_encoder: removed vorbis_encoder.vcMax Kellermann1-4/+6
Allocate the vorbis_comment object when it's used. It is not used anymore in vorbis_encoder_tag().
2009-03-15vorbis_encoder: use vorbis_commentheader_out() in the tag() methodMax Kellermann1-6/+15
Don't reinitialize the encoder with every tag.
2009-03-15vorbis_encoder: pass vorbis_comment to tag helper functionsMax Kellermann1-9/+9
Prepare the removal of vorbis_encoder.vc.
2009-03-15log: removed DEBUG() and FATAL()Max Kellermann9-49/+22
Use GLib the logging functions g_debug(), g_error() instead.
2009-03-15dbUtils: removed printSavedMemoryFromFilenames()Max Kellermann2-37/+0
The function is unused.
2009-03-15sig_handlers: include signal.h instead of sys/signal.hMax Kellermann1-1/+1
2009-03-15httpd: new output plugin to replace "shout"Max Kellermann5-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.
2009-03-15page: new library for reference counted buffersMax Kellermann2-0/+162
2009-03-15vorbis_encoder: make ogg_page a local variableMax Kellermann1-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.
2009-03-15vorbis_encoder: fill the ogg_page in the read() methodMax Kellermann1-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.