Mercurial > mplayer.hg
view mixer.c @ 8609:1d98280b9ad1
The following patch allows the MPlayer "cdparanoia" support to work on
NetBSD-1.6_STABLE, both "cdda://NN" and "cddb://NN" URI's.
The CDROM ioctl's are actually more like OpenBSD's than FreeBSD's. I
went with the "/dev/cdrom" symlink as the default device, though, as
it otherwise gets messy fast... The first CDROM is "/dev/rcd0d" on
NetBSD/i386, but "/dev/rcd0c" on all other NetBSD ports, and only the
cdda_identify_scsi() form seems to work on NetBSD. (I searched the web
in vain for the Paranoia API, so I'm left to hacking. ;-))
Frederick Bruckman <fredb@immanent.net>
author | arpi |
---|---|
date | Sat, 28 Dec 2002 14:04:54 +0000 |
parents | da2dda48b7ec |
children | 12b1790038b0 |
line wrap: on
line source
#include <string.h> #include <sys/ioctl.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include "config.h" #include "mixer.h" #include "libao2/audio_out.h" extern ao_functions_t *audio_out; char * mixer_device=NULL; int muted = 0; float mute_l = 0.0f; float mute_r = 0.0f; void mixer_getvolume( float *l,float *r ) { ao_control_vol_t vol; *l=0; *r=0; if(audio_out){ if(CONTROL_OK != audio_out->control(AOCONTROL_GET_VOLUME,(int)&vol)) return; *r=vol.right; *l=vol.left; } } void mixer_setvolume( float l,float r ) { ao_control_vol_t vol; vol.right=r; vol.left=l; if(audio_out){ if(CONTROL_OK != audio_out->control(AOCONTROL_SET_VOLUME,(int)&vol)) return; } muted=0; } #define MIXER_CHANGE 3 void mixer_incvolume( void ) { float mixer_l, mixer_r; mixer_getvolume( &mixer_l,&mixer_r ); mixer_l += MIXER_CHANGE; if ( mixer_l > 100 ) mixer_l = 100; mixer_r += MIXER_CHANGE; 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 ); mixer_l -= MIXER_CHANGE; if ( mixer_l < 0 ) mixer_l = 0; mixer_r -= MIXER_CHANGE; if ( mixer_r < 0 ) mixer_r = 0; mixer_setvolume( mixer_l,mixer_r ); } float mixer_getbothvolume( void ) { float mixer_l, mixer_r; mixer_getvolume( &mixer_l,&mixer_r ); return ( mixer_l + mixer_r ) / 2; } void mixer_mute( void ) { if ( muted ) mixer_setvolume( mute_l,mute_r ); else { mixer_getvolume( &mute_l,&mute_r ); mixer_setvolume( 0,0 ); muted=1; } }