summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohammad Alsaleh <CE.Mohammad.AlSaleh@gmail.com>2014-06-28 02:58:57 +0300
committerwm4 <wm4@nowhere>2014-06-28 15:56:16 +0200
commit8b06fc86f38e62d2dfed58eeb03d5dad597047e1 (patch)
treef84e6be495b5447f9afbf41e668a27d4a4f1cc00
parent88225d0afbe26e0489d2ccef0385823a665b2d24 (diff)
downloadmpv-8b06fc86f38e62d2dfed58eeb03d5dad597047e1.tar.bz2
mpv-8b06fc86f38e62d2dfed58eeb03d5dad597047e1.tar.xz
af_volume: fix calculations including replay-gain
rgain is not an additive value. It's a multiplier/gain. Previous behaviour produced negative level values in some cases (when rgain < 1.0) which caused volume to be louder when its value was lowered. CC: @mpv-player/stable Signed-off-by: Mohammad Alsaleh <CE.Mohammad.AlSaleh@gmail.com> Signed-off-by: wm4 <wm4@nowhere>
-rw-r--r--audio/filter/af_volume.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/audio/filter/af_volume.c b/audio/filter/af_volume.c
index f07914313b..f9f4a4ac40 100644
--- a/audio/filter/af_volume.c
+++ b/audio/filter/af_volume.c
@@ -79,7 +79,7 @@ static int control(struct af_instance *af, int cmd, void *arg)
if (!s->rgain_clip) // clipping prevention
s->rgain = MPMIN(s->rgain, 1.0 / peak);
}
- if (s->detach && fabs(s->level + s->rgain - 2.0) < 0.00001)
+ if (s->detach && fabs(s->level * s->rgain - 1.0) < 0.00001)
return AF_DETACH;
return af_test_output(af, in);
}
@@ -97,7 +97,7 @@ static void filter_plane(struct af_instance *af, void *ptr, int num_samples)
{
struct priv *s = af->priv;
- float level = s->level + s->rgain - 1.0;
+ float level = s->level * s->rgain;
if (af_fmt_from_planar(af->data->format) == AF_FORMAT_S16) {
int16_t *a = ptr;