From 5c50d3e7dd839be03468e5058ce7d5eb60dfe1d8 Mon Sep 17 00:00:00 2001 From: arpi_esp Date: Tue, 5 Jun 2001 18:40:44 +0000 Subject: =?UTF-8?q?applied=20solaris8/netbsd/other=20fixes=20patch=20by=20?= =?UTF-8?q?J=C3=BCrgen=20Keil=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1039 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mixer.c | 96 +++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 32 deletions(-) (limited to 'mixer.c') diff --git a/mixer.c b/mixer.c index 2340179ec0..150c3cc2d4 100644 --- a/mixer.c +++ b/mixer.c @@ -1,36 +1,34 @@ #include #include -#ifdef __sun -#include -#else -#include -#endif #include #include #include -#include "mixer.h" +#include "config.h" -#ifdef __sun -char * mixer_device="/dev/audioctl"; -#else -char * mixer_device="/dev/mixer"; +#ifdef USE_OSS_AUDIO +#include #endif + +#ifdef USE_SUN_AUDIO +#include +#endif + +#include "mixer.h" + +#if defined(USE_OSS_AUDIO) + +char * mixer_device=DEV_MIXER; int mixer_usemaster=0; -void mixer_getvolume( int *l,int *r ) +void mixer_getvolume( float *l,float *r ) { int fd,v,cmd,devs; fd=open( mixer_device,O_RDONLY ); if ( fd != -1 ) { -#ifdef __sun - audio_info_t info; - ioctl( fd,AUDIO_GETINFO,&info ); - *r=*l=(info.play.gain * 100 + (AUDIO_MAX_GAIN-1))/AUDIO_MAX_GAIN; -#else ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs ); if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_READ_PCM; else @@ -43,24 +41,17 @@ void mixer_getvolume( int *l,int *r ) ioctl( fd,cmd,&v ); *r=( v & 0xFF00 ) >> 8; *l=( v & 0x00FF ); -#endif close( fd ); } } -void mixer_setvolume( int l,int r ) +void mixer_setvolume( float l,float r ) { int fd,v,cmd,devs; fd=open( mixer_device,O_RDONLY ); if ( fd != -1 ) { -#ifdef __sun - audio_info_t info; - ioctl( fd,AUDIO_GETINFO,&info ); - info.play.gain = ((l+r)*AUDIO_MAX_GAIN+199)/200; - ioctl( fd,AUDIO_SETINFO,&info ); -#else ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs ); if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_WRITE_PCM; else @@ -70,33 +61,74 @@ void mixer_setvolume( int l,int r ) close( fd ); return; } - v=( r << 8 ) | l; + v=( (int)r << 8 ) | (int)l; ioctl( fd,cmd,&v ); -#endif close( fd ); } } +#elif defined(USE_SUN_AUDIO) + +char * mixer_device="/dev/audioctl"; +int mixer_usemaster=0; + +void mixer_getvolume( float *l,float *r ) +{ + int fd,v,cmd,devs; + + fd=open( mixer_device,O_RDONLY ); + if ( fd != -1 ) + { + struct audio_info info; + + ioctl( fd,AUDIO_GETINFO,&info); + *r=info.play.gain * 100. / AUDIO_MAX_GAIN; + *l=info.play.gain * 100. / AUDIO_MAX_GAIN; + close( fd ); + } +} + +void mixer_setvolume( float l,float r ) +{ + int fd,v,cmd,devs; + + fd=open( mixer_device,O_RDONLY ); + if ( fd != -1 ) + { + struct audio_info info; + AUDIO_INITINFO(&info); + info.play.gain = (r+l) * AUDIO_MAX_GAIN / 100 / 2; + ioctl( fd,AUDIO_SETINFO,&info ); + close( fd ); + } +} +#endif -int mixer_l=0; int mixer_r=0; void mixer_incvolume( void ) { + float mixer_l, mixer_r; mixer_getvolume( &mixer_l,&mixer_r ); - if ( mixer_l < 100 ) mixer_l++; - if ( mixer_r < 100 ) mixer_r++; + mixer_l++; + if ( mixer_l > 100 ) mixer_l = 100; + mixer_r++; + if ( mixer_r > 100 ) mixer_r = 100; mixer_setvolume( mixer_l,mixer_r ); } void mixer_decvolume( void ) { + float mixer_l, mixer_r; mixer_getvolume( &mixer_l,&mixer_r ); - if ( mixer_l > 0 ) mixer_l--; - if ( mixer_r > 0 ) mixer_r--; + mixer_l--; + if ( mixer_l < 0 ) mixer_l = 0; + mixer_r--; + if ( mixer_r < 0 ) mixer_r = 0; mixer_setvolume( mixer_l,mixer_r ); } -int mixer_getbothvolume( void ) +float mixer_getbothvolume( void ) { + float mixer_l, mixer_r; mixer_getvolume( &mixer_l,&mixer_r ); return ( mixer_l + mixer_r ) / 2; } -- cgit v1.2.3