From a4ac1dc9a422ccc5ed92b519758f68acc3b75e9a Mon Sep 17 00:00:00 2001 From: attila Date: Sat, 24 Jan 2004 11:53:52 +0000 Subject: add option to select mixer channel patch by Catalin Muresan git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11838 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libao2/ao_oss.c | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'libao2') diff --git a/libao2/ao_oss.c b/libao2/ao_oss.c index 4cd98d9d5e..3591a41adb 100644 --- a/libao2/ao_oss.c +++ b/libao2/ao_oss.c @@ -37,6 +37,7 @@ static audio_buf_info zz; static int audio_fd=-1; char *oss_mixer_device = PATH_DEV_MIXER; +int oss_mixer_channel = SOUND_MIXER_PCM; // to set/get/query special features/parameters static int control(int cmd,void *arg){ @@ -61,18 +62,18 @@ static int control(int cmd,void *arg){ if ((fd = open(oss_mixer_device, O_RDONLY)) > 0) { ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs); - if (devs & SOUND_MASK_PCM) + if (devs & (1 << oss_mixer_channel)) { if (cmd == AOCONTROL_GET_VOLUME) { - ioctl(fd, SOUND_MIXER_READ_PCM, &v); + ioctl(fd, MIXER_READ(oss_mixer_channel), &v); vol->right = (v & 0xFF00) >> 8; vol->left = v & 0x00FF; } else { v = ((int)vol->right << 8) | (int)vol->left; - ioctl(fd, SOUND_MIXER_WRITE_PCM, &v); + ioctl(fd, MIXER_WRITE(oss_mixer_channel), &v); } } else @@ -92,6 +93,7 @@ static int control(int cmd,void *arg){ // open & setup audio device // return: 1=success 0=fail static int init(int rate,int channels,int format,int flags){ + char *mixer_channels [SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES; mp_msg(MSGT_AO,MSGL_V,"ao2: %d Hz %d chans %s\n",rate,channels, audio_out_format_name(format)); @@ -102,7 +104,38 @@ static int init(int rate,int channels,int format,int flags){ if(mixer_device) oss_mixer_device=mixer_device; + if(mixer_channel){ + int fd, devs, i; + + if ((fd = open(oss_mixer_device, O_RDONLY)) == -1){ + mp_msg(MSGT_AO,MSGL_ERR,"audio_setup: Can't open mixer device %s: %s\n", + oss_mixer_device, strerror(errno)); + }else{ + ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs); + close(fd); + + for (i=0; i