aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;
}