Commit message (Collapse) | Author | Files | Lines | ||
---|---|---|---|---|---|
2014-02-06 | mixer/Plugin: pass AudioOutput reference to init() | Max Kellermann | 1 | -19/+12 | |
Passing a void pointer is unsafe. | |||||
2014-02-06 | MixerPlugin: convert function pointers to Mixer virtual methods | Max Kellermann | 1 | -63/+67 | |
2014-02-05 | Mixer: rename struct mixer_plugin to MixerPlugin | Max Kellermann | 1 | -1/+1 | |
2014-02-05 | MixerPlugin: add EventLoop& init() parameter | Max Kellermann | 1 | -1/+2 | |
2014-01-24 | Mixer*: move to mixer/ | Max Kellermann | 1 | -1/+1 | |
2014-01-23 | output/*: move to output/plugins/ | Max Kellermann | 1 | -1/+1 | |
2014-01-13 | copyright year 2014 | Max Kellermann | 1 | -1/+1 | |
2013-11-28 | include cleanup using iwyu | Max Kellermann | 1 | -2/+0 | |
2013-10-28 | *: use nullptr instead of NULL | Max Kellermann | 1 | -8/+8 | |
2013-10-15 | Client, ...: remove unnecessary glib.h include | Max Kellermann | 1 | -2/+0 | |
2013-10-02 | Log: new logging library API | Max Kellermann | 1 | -7/+7 | |
Prepare to migrate away from GLib. Currently, we're still using GLib as a backend. | |||||
2013-09-05 | conf.h: remove obsolete header | Max Kellermann | 1 | -1/+0 | |
Use only ConfigData.hxx in plugin sources to reduce header dependencies. | |||||
2013-09-04 | util/Error: new error passing library | Max Kellermann | 1 | -15/+10 | |
Replaces GLib's GError. | |||||
2013-08-04 | *: use gcc.h macros instead of GLib | Max Kellermann | 1 | -3/+3 | |
2013-08-04 | MixerPlugin: pass config_param reference | Max Kellermann | 1 | -1/+1 | |
2013-04-16 | MixerInternal: convert to class | Max Kellermann | 1 | -7/+7 | |
2013-04-16 | mixer/Pulse: convert to a class | Max Kellermann | 1 | -21/+18 | |
2013-04-16 | output/Pulse: convert to C++ | Max Kellermann | 1 | -4/+4 | |
2013-02-22 | mixer_plugin: convert to C++ | Max Kellermann | 1 | -1/+1 | |
2013-01-09 | EventPipe: rename to GlobalEvents | Max Kellermann | 1 | -3/+3 | |
2013-01-09 | event_pipe.h: convert to C++ | Max Kellermann | 1 | -1/+1 | |
2013-01-09 | mixer/{alsa,pulse}: convert to C++ | Max Kellermann | 1 | -11/+13 | |
2011-09-17 | output/pulse: don't expose internal struct in public header | Max Kellermann | 1 | -5/+7 | |
Provide _lock() and _unlock() to wrap all accesses from the mixer plugin. | |||||
2011-01-29 | copyright year 2011 | Max Kellermann | 1 | -1/+1 | |
2009-12-31 | Update copyright notices. | Avuton Olrich | 1 | -1/+1 | |
2009-11-12 | include config.h in all sources | Max Kellermann | 1 | -0/+1 | |
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-10-23 | output/pulse: call mixer on state changes | Max Kellermann | 1 | -127/+40 | |
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-22 | mixer/pulse: don't get volume if stream is not yet ready | Max Kellermann | 1 | -3/+3 | |
Moved the check from pulse_mixer_open() to pulse_mixer_update(). | |||||
2009-10-21 | pulse: code rewrite using the asynchronous libpulse API | Max Kellermann | 1 | -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-21 | mixer_plugin: pass audio_output pointer to mixer_plugin.init() | Max Kellermann | 1 | -1/+1 | |
This allows the mixer object to access its associated audio output object. | |||||
2009-10-20 | mixer_plugin: use GError for error handling | Max Kellermann | 1 | -13/+34 | |
2009-10-20 | pulse: renamed source files | Max Kellermann | 1 | -2/+2 | |
2009-04-25 | pulse_mixer: use PULSE's mainloop lock instead of GMutex | Max Kellermann | 1 | -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-03-27 | pulse_mixer: protect the struct with a mutex | Max Kellermann | 1 | -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-27 | pulse_mixer: return if mixer is offline | Max Kellermann | 1 | -29/+27 | |
Eliminate one indent level. Also remove several debug useless debug messages. | |||||
2009-03-27 | pulse_mixer: removed superfluous G_GNUC_UNUSED attributes | Max Kellermann | 1 | -4/+4 | |
Those parameters are used after all. | |||||
2009-03-27 | pulse_mixer: use local pa_cvolume variable for set_volume() | Max Kellermann | 1 | -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-27 | pulse_mixer: wait for get_volume() operation to complete | Max Kellermann | 1 | -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-27 | pulse_mixer: adapted code style | Max Kellermann | 1 | -27/+52 | |
Use the same code style as the rest of MPD. | |||||
2009-03-26 | pulse_mixer: removed superfluous initializations | Max Kellermann | 1 | -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-26 | pulse_mixer: allocate "volume" statically | Max Kellermann | 1 | -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-26 | pulse_mixer: removed superfluous NULL checks in close() | Max Kellermann | 1 | -12/+4 | |
When the MPD core knows that the pulse mixer is open, pm->mainloop and pm->context must be non-NULL. | |||||
2009-03-26 | pulse_mixer: initialize "online" and "index" in open() | Max Kellermann | 1 | -2/+5 | |
The attributes "online" and "index" were not properly reinitialized after a close/open cycle. | |||||
2009-03-26 | pulse: make configuration strings const | Max Kellermann | 1 | -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-26 | pulse: don't check config_param!=NULL | Max Kellermann | 1 | -6/+3 | |
The conf.h functions deal well with config_param==NULL and will return the specified default value then. | |||||
2009-03-26 | pulse_mixer: free libpulse objects on failure | Max Kellermann | 1 | -0/+6 | |
When the mixer initialization fails, we have to free the libpulse objects we have already created, to prevent resource leaks. | |||||
2009-03-26 | pulse_mixer: unlock the mainloop on failure | Max Kellermann | 1 | -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-26 | pulse_mixer: moved code to pulse_mixer_setup() | Max Kellermann | 1 | -15/+26 | |
Prepare for adding proper error handling. | |||||
2009-03-17 | pulse_mixer: keep mixer attached when another pulse sink is closed. | David Guibert | 1 | -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-17 | pulse_mixer: close | David Guibert | 1 | -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> |