aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-03-12 18:40:03 +0100
committerMax Kellermann <max@duempel.org>2009-03-12 18:40:03 +0100
commit0bc7f584f44803cda2c0a3d36dbef127161663d6 (patch)
treed7fbb1122d991d528ffda2c8958d26949bf75ee0
parentc37567a14f13dc7edda326d8b9b2253daeee87ba (diff)
downloadmpd-0bc7f584f44803cda2c0a3d36dbef127161663d6.tar.gz
mpd-0bc7f584f44803cda2c0a3d36dbef127161663d6.tar.xz
mpd-0bc7f584f44803cda2c0a3d36dbef127161663d6.zip
mixer_control: don't touch mixers of disabled outputs
When an audio output device is disabled, also disable its mixer.
-rw-r--r--src/mixer_control.c6
-rw-r--r--src/output_command.c9
2 files changed, 15 insertions, 0 deletions
diff --git a/src/mixer_control.c b/src/mixer_control.c
index a43230d5a..f583696e8 100644
--- a/src/mixer_control.c
+++ b/src/mixer_control.c
@@ -33,6 +33,9 @@ mixer_control_setvol(unsigned int device, int volume, int rel)
assert(device < audio_output_count());
output = audio_output_get(device);
+ if (!output->enabled)
+ return false;
+
mixer = ao_plugin_get_mixer(output->plugin, output->data);
if (mixer != NULL) {
if (rel) {
@@ -61,6 +64,9 @@ mixer_control_getvol(unsigned int device, int *volume)
assert(device < audio_output_count());
output = audio_output_get(device);
+ if (!output->enabled)
+ return false;
+
mixer = ao_plugin_get_mixer(output->plugin, output->data);
if (mixer != NULL) {
int volume2;
diff --git a/src/output_command.c b/src/output_command.c
index 2e33ca8b8..13cd62b88 100644
--- a/src/output_command.c
+++ b/src/output_command.c
@@ -26,6 +26,8 @@
#include "output_command.h"
#include "output_all.h"
#include "output_internal.h"
+#include "output_plugin.h"
+#include "mixer_api.h"
#include "idle.h"
bool
@@ -48,6 +50,7 @@ bool
audio_output_disable_index(unsigned idx)
{
struct audio_output *ao;
+ struct mixer *mixer;
if (idx >= audio_output_count())
return false;
@@ -57,5 +60,11 @@ audio_output_disable_index(unsigned idx)
ao->enabled = false;
idle_add(IDLE_OUTPUT);
+ mixer = ao_plugin_get_mixer(ao->plugin, ao->data);
+ if (mixer != NULL) {
+ mixer_close(mixer);
+ idle_add(IDLE_MIXER);
+ }
+
return true;
}