aboutsummaryrefslogtreecommitdiffstats
path: root/src/mixer (unfollow)
Commit message (Collapse)AuthorFilesLines
2009-11-12include config.h in all sourcesMax Kellermann4-0/+4
After we've been hit by Large File Support problems several times in the past week (which only occur on 32 bit platforms, which I don't have), this is yet another attempt to fix the issue.
2009-11-10fd_util: removed creat_cloexec()Max Kellermann1-1/+1
Add a "mode" argument to open_cloexec() instead.
2009-11-07set the close-on-exec flag on all file descriptorsMax Kellermann1-1/+2
Added the "fd_util" library, which attempts to use the new thread-safe Linux system calls pipe2(), accept4() and the options O_CLOEXEC, SOCK_CLOEXEC. Without these, it falls back to FD_CLOEXEC, which is not thread safe. This is particularly important for the "pipe" output plugin (and others, such as JACK/PulseAudio), because we were heavily leaking file descriptors to child processes.
2009-10-23output/pulse: call mixer on state changesMax Kellermann2-127/+79
Don't let the mixer plugin "override" the libpulse callbacks. Instead, add a "mixer" attribute to the pulse_output struct, and call the mixer on all interesting events.
2009-10-23mixer_control: allow methods "open" and "close" to be NULLMax Kellermann1-19/+0
It's possible to have a mixer implementation which does not explicitly need the methods open() and close().
2009-10-22mixer/pulse: don't get volume if stream is not yet readyMax Kellermann1-3/+3
Moved the check from pulse_mixer_open() to pulse_mixer_update().
2009-10-21pulse: code rewrite using the asynchronous libpulse APIMax Kellermann1-209/+126
This is a complete rewrite of the PulseAudio output plugin. It uses the asynchronous API, which gives us more control over everything. Additionally, it connects to the PulseAudio server on startup, and keeps this connection up while MPD runs. During pause, instead of closing the stream, it enables "cork".
2009-10-21mixer_plugin: pass audio_output pointer to mixer_plugin.init()Max Kellermann4-4/+6
This allows the mixer object to access its associated audio output object.
2009-10-20mixer_plugin: use GError for error handlingMax Kellermann4-48/+106
2009-10-20mixer/{oss,alsa}: renamed the mixer source filesMax Kellermann2-8/+8
2009-10-20pulse: renamed source filesMax Kellermann1-2/+2
2009-07-06mixer/software: new mixer which controls filter/volumeMax Kellermann2-0/+157
This mixer plugin may be used instead of the traditional global software mixer. It integrates with the "volume" filter plugin, and can control the software volume of an audio output which has no hardware mixer.
2009-04-28alsa_mixer: use g_ascii_strcasecmp() instead of strcasecmp()Max Kellermann1-2/+2
strcasecmp() is locale dependent, making it a bad choice for internal string comparisons.
2009-04-28alsa_mixer: add mixer_index optionDaniel Kahn Gillmor1-2/+7
This allows you to select controls with duplicate names.
2009-04-25pulse_mixer: use PULSE's mainloop lock instead of GMutexMax Kellermann1-27/+13
Using two different kinds of locks may result in a race condition with a deadlock. The libpulse callbacks need no locks at all, because the mainloop object can be assumed to be already locked.
2009-04-21alsa_mixer: call snd_config_update_free_global() in finish()Max Kellermann1-1/+3
snd_config_update_free_global() frees cached ALSA configuration. This keeps valgrind a little bit more quiet. This patch moves the call from the open() method into the finish() method, which seems more natural: it allows the use of the config cache, and improves the cleanup phase.
2009-03-27mixer: assert that the new volume value is validMax Kellermann2-7/+1
Added an assertion in mixer_set_volume(). Removed the range checks from the ALSA and OSS plugins.
2009-03-27pulse_mixer: protect the struct with a mutexMax Kellermann1-1/+29
There are numerous race conditions between the libpulse thread (pulse_mixer.c callbacks) and the rest of MPD. Protect the volatile attributes of the pulse_mixer struct with a mutex to fix that.
2009-03-27pulse_mixer: return if mixer is offlineMax Kellermann1-29/+27
Eliminate one indent level. Also remove several debug useless debug messages.
2009-03-27pulse_mixer: removed superfluous G_GNUC_UNUSED attributesMax Kellermann1-4/+4
Those parameters are used after all.
2009-03-27pulse_mixer: use local pa_cvolume variable for set_volume()Max Kellermann1-2/+3
Don't mess with pulse_mixer.volume for setting the volume. This variable should only be used to transfer the current volume from sink_input_vol() to pulse_mixer_get_volume().
2009-03-27pulse_mixer: wait for get_volume() operation to completeMax Kellermann1-1/+34
The pa_context_get_sink_input_info() function is asynchronous, and after it returns, libpulse does not guarantee that the operation has completed yet; in fact, it is not likely. Explicitly wait for the operation to complete. The code for the new pulse_wait_for_operation() function was inspired by mplayer and xine code.
2009-03-27pulse_mixer: adapted code styleMax Kellermann1-27/+52
Use the same code style as the rest of MPD.
2009-03-26pulse_mixer: removed superfluous initializationsMax Kellermann1-7/+2
Don't initialize attributes which are only used in an open mixer. As long as nobody accesses them, their values are uninitialized and undefined.
2009-03-26pulse_mixer: allocate "volume" staticallyMax Kellermann1-10/+6
The pm->volume attribute was allocated in pulse_mixer_init(), but is never freed. This leaks memory. Instead of adding the g_free() call to pulse_mixer_finish(), let's just make "volume" a static attribute of the pulse_mixer struct. That is easier to deal with.
2009-03-26pulse_mixer: removed superfluous NULL checks in close()Max Kellermann1-12/+4
When the MPD core knows that the pulse mixer is open, pm->mainloop and pm->context must be non-NULL.
2009-03-26pulse_mixer: initialize "online" and "index" in open()Max Kellermann1-2/+5
The attributes "online" and "index" were not properly reinitialized after a close/open cycle.
2009-03-26pulse: make configuration strings constMax Kellermann1-6/+6
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 Kellermann1-6/+3
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_control: close mixer on failureMax Kellermann2-5/+0
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 Kellermann2-0/+2
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-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-13all: Update copyright header.Avuton Olrich3-9/+12
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.
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.