From 05dfdfdb398146f3427be154bfe599fac61ed025 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Tue, 28 Apr 2009 09:15:48 +0200 Subject: alsa_mixer: add mixer_index option This allows you to select controls with duplicate names. --- src/mixer/alsa_mixer.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/mixer') diff --git a/src/mixer/alsa_mixer.c b/src/mixer/alsa_mixer.c index fb0834338..52f30b6f4 100644 --- a/src/mixer/alsa_mixer.c +++ b/src/mixer/alsa_mixer.c @@ -25,6 +25,7 @@ #define VOLUME_MIXER_ALSA_DEFAULT "default" #define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM" +#define VOLUME_MIXER_ALSA_INDEX_DEFAULT 0 struct alsa_mixer { /** the base mixer class */ @@ -32,6 +33,7 @@ struct alsa_mixer { const char *device; const char *control; + unsigned int index; snd_mixer_t *handle; snd_mixer_elem_t *elem; @@ -51,6 +53,8 @@ alsa_mixer_init(const struct config_param *param) VOLUME_MIXER_ALSA_DEFAULT); am->control = config_get_block_string(param, "mixer_control", VOLUME_MIXER_ALSA_CONTROL_DEFAULT); + am->index = config_get_block_unsigned(param, "mixer_index", + VOLUME_MIXER_ALSA_INDEX_DEFAULT); return &am->base; } @@ -117,8 +121,9 @@ alsa_mixer_open(struct mixer *data) while (elem) { if (snd_mixer_elem_get_type(elem) == SND_MIXER_ELEM_SIMPLE) { - if (strcasecmp(am->control, - snd_mixer_selem_get_name(elem)) == 0) { + if ((strcasecmp(am->control, + snd_mixer_selem_get_name(elem)) == 0) && + (am->index == snd_mixer_selem_get_index(elem))) { break; } } -- cgit v1.2.3