summaryrefslogtreecommitdiffstats
path: root/audio/filter/af_volume.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/filter/af_volume.c')
-rw-r--r--audio/filter/af_volume.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/audio/filter/af_volume.c b/audio/filter/af_volume.c
index 82c31eaa12..a766b97ec6 100644
--- a/audio/filter/af_volume.c
+++ b/audio/filter/af_volume.c
@@ -81,17 +81,22 @@ static int control(struct af_instance* af, int cmd, void* arg)
}
return af_test_output(af,(struct mp_audio*)arg);
case AF_CONTROL_COMMAND_LINE:{
- float v=0.0;
+ float v=1000.0;
float vol[AF_NCH];
int i;
sscanf((char*)arg,"%f:%i:%i", &v, &s->soft, &s->fast);
- for(i=0;i<AF_NCH;i++) vol[i]=v;
+ float dest = 0.0;
+ if (v < 1000)
+ af_from_dB(1,&v,&dest,20.0,-200.0,60.0);
+ for(i=0;i<AF_NCH;i++) vol[i]=dest;
return control(af,AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET, vol);
}
case AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET:
- return af_from_dB(AF_NCH,(float*)arg,s->level,20.0,-200.0,60.0);
+ memcpy(s->level, arg, sizeof(float) * AF_NCH);
+ return AF_OK;
case AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_GET:
- return af_to_dB(AF_NCH,s->level,(float*)arg,20.0);
+ memcpy(arg, s->level, sizeof(float) * AF_NCH);
+ return AF_OK;
case AF_CONTROL_PRE_DESTROY:{
float m = 0.0;
int i;