Commit 05dfdfdb authored by Daniel Kahn Gillmor's avatar Daniel Kahn Gillmor Committed by Max Kellermann

alsa_mixer: add mixer_index option

This allows you to select controls with duplicate names.
parent 70d322b2
...@@ -50,6 +50,8 @@ ver 0.15 (200?/??/??) ...@@ -50,6 +50,8 @@ ver 0.15 (200?/??/??)
* mixers: * mixers:
- rewritten mixer code to support multiple mixers - rewritten mixer code to support multiple mixers
- new pulseaudio mixer - new pulseaudio mixer
- alsa: new mixer_index option supports choosing between multiple
identically-named controls on a device.
* Add audio archive extraction support: * Add audio archive extraction support:
- bzip2 - bzip2
- iso9660 - iso9660
......
...@@ -293,6 +293,12 @@ This specifies which mixer control to use (sometimes referred to as the ...@@ -293,6 +293,12 @@ This specifies which mixer control to use (sometimes referred to as the
"device"). Examples of mixer controls are PCM, Line1, Master, etc. An example "device"). Examples of mixer controls are PCM, Line1, Master, etc. An example
for OSS is "Pcm", and an example for alsa is "PCM". for OSS is "Pcm", and an example for alsa is "PCM".
.TP .TP
.B mixer_index <mixer index>
A number identifying the index of the named mixer control. This is
probably only useful if your alsa device has more than one
identically\-named mixer control. The default is "0". (Use "amixer
scontrols" to see the list of controls with their indexes)
.TP
.B use_mmap <yes or no> .B use_mmap <yes or no>
Setting this allows you to use memory-mapped I/O. Certain hardware setups may Setting this allows you to use memory-mapped I/O. Certain hardware setups may
benefit from this, but most do not. Most users do not need to set this. The benefit from this, but most do not. Most users do not need to set this. The
......
...@@ -181,6 +181,7 @@ input { ...@@ -181,6 +181,7 @@ input {
# format "44100:16:2" # optional # format "44100:16:2" # optional
# mixer_device "default" # optional # mixer_device "default" # optional
# mixer_control "PCM" # optional # mixer_control "PCM" # optional
# mixer_index "0" # optional
#} #}
# #
# An example of an OSS output: # An example of an OSS output:
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#define VOLUME_MIXER_ALSA_DEFAULT "default" #define VOLUME_MIXER_ALSA_DEFAULT "default"
#define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM" #define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM"
#define VOLUME_MIXER_ALSA_INDEX_DEFAULT 0
struct alsa_mixer { struct alsa_mixer {
/** the base mixer class */ /** the base mixer class */
...@@ -32,6 +33,7 @@ struct alsa_mixer { ...@@ -32,6 +33,7 @@ struct alsa_mixer {
const char *device; const char *device;
const char *control; const char *control;
unsigned int index;
snd_mixer_t *handle; snd_mixer_t *handle;
snd_mixer_elem_t *elem; snd_mixer_elem_t *elem;
...@@ -51,6 +53,8 @@ alsa_mixer_init(const struct config_param *param) ...@@ -51,6 +53,8 @@ alsa_mixer_init(const struct config_param *param)
VOLUME_MIXER_ALSA_DEFAULT); VOLUME_MIXER_ALSA_DEFAULT);
am->control = config_get_block_string(param, "mixer_control", am->control = config_get_block_string(param, "mixer_control",
VOLUME_MIXER_ALSA_CONTROL_DEFAULT); VOLUME_MIXER_ALSA_CONTROL_DEFAULT);
am->index = config_get_block_unsigned(param, "mixer_index",
VOLUME_MIXER_ALSA_INDEX_DEFAULT);
return &am->base; return &am->base;
} }
...@@ -117,8 +121,9 @@ alsa_mixer_open(struct mixer *data) ...@@ -117,8 +121,9 @@ alsa_mixer_open(struct mixer *data)
while (elem) { while (elem) {
if (snd_mixer_elem_get_type(elem) == SND_MIXER_ELEM_SIMPLE) { if (snd_mixer_elem_get_type(elem) == SND_MIXER_ELEM_SIMPLE) {
if (strcasecmp(am->control, if ((strcasecmp(am->control,
snd_mixer_selem_get_name(elem)) == 0) { snd_mixer_selem_get_name(elem)) == 0) &&
(am->index == snd_mixer_selem_get_index(elem))) {
break; break;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment