mixer_control: don't touch mixers of disabled outputs

When an audio output device is disabled, also disable its mixer.
This commit is contained in:
Max Kellermann 2009-03-12 18:40:03 +01:00
parent c37567a14f
commit 0bc7f584f4
2 changed files with 15 additions and 0 deletions

View File

@ -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;

View File

@ -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;
}