summaryrefslogtreecommitdiff
path: root/libs/plugins/a-comp.lv2
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2016-07-05 15:07:06 +1000
committerDamien Zammit <damien@zamaudio.com>2016-07-05 15:07:06 +1000
commitbf7c4c7d60e5211ce388ce14a17e45feddd78735 (patch)
tree31c10f37b4e47d57d5ed4bec08a69b74b02f89aa /libs/plugins/a-comp.lv2
parentfef79d46bb54c0e9179e54a0977eeb602e4b2db3 (diff)
a-comp: Fix peak level on both stereo and mono plugins
Diffstat (limited to 'libs/plugins/a-comp.lv2')
-rw-r--r--libs/plugins/a-comp.lv2/a-comp.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/libs/plugins/a-comp.lv2/a-comp.c b/libs/plugins/a-comp.lv2/a-comp.c
index 9449c2741e..77895410f2 100644
--- a/libs/plugins/a-comp.lv2/a-comp.c
+++ b/libs/plugins/a-comp.lv2/a-comp.c
@@ -308,9 +308,9 @@ run_mono(LV2_Handle instance, uint32_t n_samples)
for (i = 0; i < n_samples; i++) {
in0 = input[i];
sc0 = sc[i];
- ingain = usesidechain ? sc0 : in0;
+ ingain = usesidechain ? fabs(sc0) : fabs(in0);
Lyg = 0.f;
- Lxg = (ingain==0.f) ? -160.f : to_dB(fabs(ingain));
+ Lxg = (ingain==0.f) ? -160.f : to_dB(ingain);
Lxg = sanitize_denormal(Lxg);
Lyg = Lxg + (1.f/ratio-1.f)*(Lxg-thresdb+width/2.f)*(Lxg-thresdb+width/2.f)/(2.f*width);
@@ -336,8 +336,8 @@ run_mono(LV2_Handle instance, uint32_t n_samples)
*(acomp->gainr) = Lyl;
- if (in0 > in_peak) {
- in_peak = in0;
+ if (ingain > in_peak) {
+ in_peak = ingain;
}
lgaininp = in0 * Lgain;
output[i] = lgaininp * from_dB(*(acomp->makeup));
@@ -398,6 +398,7 @@ run_stereo(LV2_Handle instance, uint32_t n_samples)
float in0;
float in1;
float sc0;
+ float maxabslr;
float ratio = *(acomp->ratio);
float thresdb = *(acomp->thresdb);
@@ -424,7 +425,8 @@ run_stereo(LV2_Handle instance, uint32_t n_samples)
in0 = input0[i];
in1 = input1[i];
sc0 = sc[i];
- ingain = usesidechain ? fabs(sc0) : fmaxf(fabs(in0), fabs(in1));
+ maxabslr = fmaxf(fabs(in0), fabs(in1));
+ ingain = usesidechain ? fabs(sc0) : maxabslr;
Lyg = 0.f;
Lxg = (ingain==0.f) ? -160.f : to_dB(ingain);
Lxg = sanitize_denormal(Lxg);
@@ -460,7 +462,7 @@ run_stereo(LV2_Handle instance, uint32_t n_samples)
output0[i] = lgaininp * from_dB(*(acomp->makeup));
output1[i] = rgaininp * from_dB(*(acomp->makeup));
- max = (fmaxf(fabsf(output0[i]), fabsf(output1[i])) > max) ? fmaxf(fabsf(output0[i]), fabsf(output1[i])) : sanitize_denormal(max);
+ max = (fmaxf(fabs(output0[i]), fabs(output1[i])) > max) ? fmaxf(fabs(output0[i]), fabs(output1[i])) : sanitize_denormal(max);
// TODO re-use local variables on stack
// store values back to acomp at the end of the inner-loop