summaryrefslogtreecommitdiffstats
path: root/libao2/ao_alsa.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-09-22 14:12:53 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-09-22 14:12:53 +0000
commitd6100972a531839cce9e7480f67f5665d4d24007 (patch)
tree374ccdba81c394046a660b2714a2a909b7124af9 /libao2/ao_alsa.c
parent4ba180313299c4c5adeba13de2ad97ff7b72aea2 (diff)
downloadmpv-d6100972a531839cce9e7480f67f5665d4d24007.tar.bz2
mpv-d6100972a531839cce9e7480f67f5665d4d24007.tar.xz
allow to select an alsa mixer channel index.
Patch by Eric Yagerlener [eyager (at) chartermi (dot) net]. Applied with slight modifications, see also bugzilla bug #69. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13435 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2/ao_alsa.c')
-rw-r--r--libao2/ao_alsa.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/libao2/ao_alsa.c b/libao2/ao_alsa.c
index 8729dac257..7089e8810f 100644
--- a/libao2/ao_alsa.c
+++ b/libao2/ao_alsa.c
@@ -101,12 +101,28 @@ static int control(int cmd, void *arg)
static char *mix_name = "PCM";
static char *card = "default";
+ static int mix_index = 0;
long pmin, pmax;
long get_vol, set_vol;
float f_multi;
- if(mixer_channel) mix_name = mixer_channel;
+ if(mixer_channel) {
+ char *test_mix_index;
+
+ mix_name = strdup(mixer_channel);
+ if (test_mix_index = strchr(mix_name, ',')){
+ *test_mix_index = 0;
+ test_mix_index++;
+ mix_index = strtol(test_mix_index, &test_mix_index, 0);
+
+ if (*test_mix_index){
+ mp_msg(MSGT_AO,MSGL_ERR,
+ "alsa-control: invalid mixer index. Defaulting to 0\n");
+ mix_index = 0 ;
+ }
+ }
+ }
if(mixer_device) card = mixer_device;
if(ao_data.format == AFMT_AC3)
@@ -116,9 +132,14 @@ static int control(int cmd, void *arg)
snd_mixer_selem_id_alloca(&sid);
//sets simple-mixer index and name
- snd_mixer_selem_id_set_index(sid, 0);
+ snd_mixer_selem_id_set_index(sid, mix_index);
snd_mixer_selem_id_set_name(sid, mix_name);
+ if (mixer_channel) {
+ free(mix_name);
+ mix_name = NULL;
+ }
+
if ((err = snd_mixer_open(&handle, 0)) < 0) {
mp_msg(MSGT_AO,MSGL_ERR,"alsa-control: mixer open error: %s\n", snd_strerror(err));
return CONTROL_ERROR;