Mercurial > mplayer.hg
diff mixer.c @ 1038:b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
author | arpi_esp |
---|---|
date | Tue, 05 Jun 2001 18:40:44 +0000 |
parents | 72cacd3b8f30 |
children | 0f7be115a4db |
line wrap: on
line diff
--- a/mixer.c Tue Jun 05 16:52:51 2001 +0000 +++ b/mixer.c Tue Jun 05 18:40:44 2001 +0000 @@ -1,36 +1,34 @@ #include <string.h> #include <sys/ioctl.h> -#ifdef __sun -#include <sys/audioio.h> -#else -#include <sys/soundcard.h> -#endif #include <fcntl.h> #include <stdio.h> #include <unistd.h> +#include "config.h" + +#ifdef USE_OSS_AUDIO +#include <sys/soundcard.h> +#endif + +#ifdef USE_SUN_AUDIO +#include <sys/audioio.h> +#endif + #include "mixer.h" -#ifdef __sun -char * mixer_device="/dev/audioctl"; -#else -char * mixer_device="/dev/mixer"; -#endif +#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 @@ 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 @@ 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 ); } } -int mixer_l=0; int mixer_r=0; +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 + 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; }