diff options
author | Damien Zammit <damien@zamaudio.com> | 2014-04-11 22:55:02 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2014-04-11 22:55:02 +1000 |
commit | 58e3e2785523f8a43e1c5dfa1ce67fcee1da8017 (patch) | |
tree | 8fd6536cca34c0c75c22e99564f384c1422e60df | |
parent | 044a73d155f4d0958eb84eb1ab0f6a04678d7e21 (diff) |
Reduce CPU of stereo multiband compressor
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r-- | plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp | 34 | ||||
-rw-r--r-- | plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp | 2 |
2 files changed, 19 insertions, 17 deletions
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp index 164620a..3045912 100644 --- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp +++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp @@ -439,7 +439,7 @@ void ZaMultiCompX2Plugin::set_hp_coeffs(float fc, float q, float sr, int i, int b2[ch][i] = (float)((1.f - alpha)*inv); } -float ZaMultiCompX2Plugin::run_comp(int k, int ch, float inL, float inR) +void ZaMultiCompX2Plugin::run_comp(int k, float inL, float inR, float *outL, float *outR) { float srate = d_getSampleRate(); float makeupgain = from_dB(makeup[k]); @@ -455,7 +455,6 @@ float ZaMultiCompX2Plugin::run_comp(int k, int ch, float inL, float inR) float Rxg, Ryg; float Lxl, Lyl, Ly1; float Rxl, Ryl, Ry1; - float out; Lyg = Ryg = 0.f; Lxg = (inL==0.f) ? -160.f : to_dB(fabs(inL)); @@ -516,19 +515,15 @@ float ZaMultiCompX2Plugin::run_comp(int k, int ch, float inL, float inR) //gainr_r = Ryl; - if (ch == 0) { - out = inL; - out *= Lgain * makeupgain; - } else { - out = inR; - out *= Rgain * makeupgain; - } + *outL = inL; + *outL *= Lgain * makeupgain; + *outR = inR; + *outR *= Rgain * makeupgain; old_yl[0][k] = Lyl; old_yl[1][k] = Ryl; old_y1[0][k] = Ly1; old_y1[1][k] = Ry1; - return out; } void ZaMultiCompX2Plugin::d_run(float** inputs, float** outputs, uint32_t frames) @@ -560,6 +555,7 @@ void ZaMultiCompX2Plugin::d_run(float** inputs, float** outputs, uint32_t frames for (uint32_t i = 0; i < frames; ++i) { float tmp1[2], tmp2[2], tmp3[2], tmp4[2], tmp5[2], tmp6[2]; float fil1[2], fil2[2], fil3[2], fil4[2]; + float outL, outR; // Interleaved channel processing outputs[0][i] = inputs[0][i]; @@ -568,8 +564,10 @@ void ZaMultiCompX2Plugin::d_run(float** inputs, float** outputs, uint32_t frames fil1[1] = run_filter(0, 1, inputs[1][i]); tmp1[0] = run_filter(1, 0, fil1[0]); tmp1[1] = run_filter(1, 1, fil1[1]); - tmp2[0] = tog1 ? run_comp(0, 0, tmp1[0], tmp1[1]) : tmp1[0]; - tmp2[1] = tog1 ? run_comp(0, 1, tmp1[0], tmp1[1]) : tmp1[1]; + + run_comp(0, tmp1[0], tmp1[1], &outL, &outR); + tmp2[0] = tog1 ? outL : tmp1[0]; + tmp2[1] = tog1 ? outR : tmp1[1]; fil2[0] = run_filter(2, 0, inputs[0][i]); fil2[1] = run_filter(2, 1, inputs[1][i]); @@ -579,15 +577,19 @@ void ZaMultiCompX2Plugin::d_run(float** inputs, float** outputs, uint32_t frames fil3[1] = run_filter(4, 1, tmp3[1]); tmp4[0] = run_filter(5, 0, fil3[0]); tmp4[1] = run_filter(5, 1, fil3[1]); - tmp3[0] = tog2 ? run_comp(1, 0, tmp4[0], tmp4[1]) : tmp4[0]; - tmp3[1] = tog2 ? run_comp(1, 1, tmp4[0], tmp4[1]) : tmp4[1]; + + run_comp(1, tmp4[0], tmp4[1], &outL, &outR); + tmp3[0] = tog2 ? outL : tmp4[0]; + tmp3[1] = tog2 ? outR : tmp4[1]; fil4[0] = run_filter(6, 0, inputs[0][i]); fil4[1] = run_filter(6, 1, inputs[1][i]); tmp5[0] = run_filter(7, 0, fil4[0]); tmp5[1] = run_filter(7, 1, fil4[1]); - tmp6[0] = tog3 ? run_comp(2, 0, tmp5[0], tmp5[1]) : tmp5[0]; - tmp6[1] = tog3 ? run_comp(2, 1, tmp5[0], tmp5[1]) : tmp5[1]; + + run_comp(2, tmp5[0], tmp5[1], &outL, &outR); + tmp6[0] = tog3 ? outL : tmp5[0]; + tmp6[1] = tog3 ? outR : tmp5[1]; outputs[0][i] = tmp2[0] + tmp3[0] + tmp6[0]; outputs[1][i] = tmp2[1] + tmp3[1] + tmp6[1]; diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp index a491292..fd45f55 100644 --- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp +++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp @@ -127,7 +127,7 @@ protected: return (20.f*log10(g)); } - float run_comp(int k, int ch, float inL, float inR); + void run_comp(int k, float inL, float inR, float *outL, float *outR); float run_filter(int i, int ch, float in); void set_lp_coeffs(float fc, float q, float sr, int i, int ch, float gain); void set_hp_coeffs(float fc, float q, float sr, int i, int ch, float gain); |