From 005b7e2844ddf1e855f5e423760319b7612a2605 Mon Sep 17 00:00:00 2001 From: gabucino Date: Sun, 15 Apr 2001 18:37:07 +0000 Subject: ups, I missed'em.. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@442 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mixer.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 mixer.c (limited to 'mixer.c') diff --git a/mixer.c b/mixer.c new file mode 100644 index 0000000000..7b3206e0e5 --- /dev/null +++ b/mixer.c @@ -0,0 +1,91 @@ + +#include +#include +#include +#include +#include + +#include "mixer.h" + +#define DEV_MIXER "/dev/mixer" + +char * mixer_device=NULL; +char * devname=NULL; +int mixer_usemaster=0; + +void mixer_getvolume( int *l,int *r ) +{ + int fd,v,cmd,devs; + + if ( !mixer_device ) devname=strdup( DEV_MIXER ); + else devname=strdup( mixer_device ); + fd=open( devname,O_RDONLY ); + free( devname ); + if ( fd != -1 ) + { + ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs ); + if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_READ_PCM; + else + if ( ( devs & SOUND_MASK_VOLUME ) && ( mixer_usemaster==1 ) ) cmd=SOUND_MIXER_READ_VOLUME; + else + { + close( fd ); + return; + } + ioctl( fd,cmd,&v ); + *r=( v & 0xFF00 ) >> 8; + *l=( v & 0x00FF ); + close( fd ); + } +} + +void mixer_setvolume( int l,int r ) +{ + int fd,v,cmd,devs; + + if ( !mixer_device ) devname=strdup( DEV_MIXER ); + else devname=strdup( mixer_device ); + fd=open( devname,O_RDONLY ); + free( devname ); + if ( fd != -1 ) + { + ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs ); + if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_WRITE_PCM; + else + if ( ( devs & SOUND_MASK_VOLUME ) && ( mixer_usemaster==1 ) ) cmd=SOUND_MIXER_WRITE_VOLUME; + else + { + close( fd ); + return; + } + v=( r << 8 ) | l; + ioctl( fd,cmd,&v ); + close( fd ); + } +} + +int mixer_l=0; int mixer_r=0; + +void mixer_incvolume( void ) +{ + fprintf( stderr,"[mixer] inc.\n" ); + mixer_getvolume( &mixer_l,&mixer_r ); + if ( mixer_l < 100 ) mixer_l++; + if ( mixer_r < 100 ) mixer_r++; + mixer_setvolume( mixer_l,mixer_r ); +} + +void mixer_decvolume( void ) +{ + fprintf( stderr,"[mixer] dec.\n" ); + mixer_getvolume( &mixer_l,&mixer_r ); + if ( mixer_l > 0 ) mixer_l--; + if ( mixer_r > 0 ) mixer_r--; + mixer_setvolume( mixer_l,mixer_r ); +} + +int mixer_getbothvolume( void ) +{ + mixer_getvolume( &mixer_l,&mixer_r ); + return ( mixer_l + mixer_r ) / 2; +} -- cgit v1.2.3