mirror of https://github.com/mpv-player/mpv
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>
This commit is contained in:
parent
0075f8e0cf
commit
950ef5b75b
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue