summaryrefslogtreecommitdiffstats
path: root/mixer.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-11-14 11:27:58 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-11-14 11:27:58 +0000
commite2f2ca1cbb6fc68f67a2bcd3c76237be77f3e04e (patch)
treef314d5b39312ad5d84b700f7de41e3a5f03cca7b /mixer.c
parent8fb512dbf09eea504622afebd39ba7dba858ef4b (diff)
downloadmpv-e2f2ca1cbb6fc68f67a2bcd3c76237be77f3e04e.tar.bz2
mpv-e2f2ca1cbb6fc68f67a2bcd3c76237be77f3e04e.tar.xz
allow forcing of software volume control and setting maximum amplification.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13934 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mixer.c')
-rw-r--r--mixer.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/mixer.c b/mixer.c
index 388aadb2b3..f3de6cdeb7 100644
--- a/mixer.c
+++ b/mixer.c
@@ -15,13 +15,16 @@
char * mixer_device=NULL;
char * mixer_channel=NULL;
+int soft_vol = 0;
+float soft_vol_max = 110.0;
void mixer_getvolume(mixer_t *mixer, float *l, float *r)
{
ao_control_vol_t vol;
*l=0; *r=0;
if(mixer->audio_out){
- if(CONTROL_OK != mixer->audio_out->control(AOCONTROL_GET_VOLUME,&vol)) {
+ if(soft_vol ||
+ CONTROL_OK != mixer->audio_out->control(AOCONTROL_GET_VOLUME,&vol)) {
if (!mixer->afilter)
return;
else {
@@ -31,8 +34,8 @@ void mixer_getvolume(mixer_t *mixer, float *l, float *r)
db_vals[0] = db_vals[1] = 1.0;
else
af_from_dB (2, db_vals, db_vals, 20.0, -200.0, 60.0);
- vol.left = db_vals[0] * 90.0;
- vol.right = db_vals[1] * 90.0;
+ vol.left = (db_vals[0] / (soft_vol_max / 100.0)) * 100.0;
+ vol.right = (db_vals[1] / (soft_vol_max / 100.0)) * 100.0;
}
}
*r=vol.right;
@@ -45,19 +48,18 @@ void mixer_setvolume(mixer_t *mixer, float l, float r)
ao_control_vol_t vol;
vol.right=r; vol.left=l;
if(mixer->audio_out){
- if(CONTROL_OK != mixer->audio_out->control(AOCONTROL_SET_VOLUME,&vol)) {
+ if(soft_vol ||
+ CONTROL_OK != mixer->audio_out->control(AOCONTROL_SET_VOLUME,&vol)) {
if (!mixer->afilter)
return;
else {
// af_volume uses values in dB
float db_vals[AF_NCH];
int i;
- // a volume of 90% will give 0 dB (no change)
- // like this, amplification is possible as well
- db_vals[0] = l / 90.0;
- db_vals[1] = r / 90.0;
+ db_vals[0] = (l / 100.0) * (soft_vol_max / 100.0);
+ db_vals[1] = (r / 100.0) * (soft_vol_max / 100.0);
for (i = 2; i < AF_NCH; i++) {
- db_vals[i] = (l + r) / 180.0;
+ db_vals[i] = ((l + r) / 100.0) * (soft_vol_max / 100.0) / 2.0;
}
af_to_dB (AF_NCH, db_vals, db_vals, 20.0);
if (!af_control_any_rev(mixer->afilter,