]> git.sesse.net Git - nageru/commitdiff
Remove an (easily-predictable) branch from the StereoCompressor inner loop.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 26 Aug 2016 19:20:39 +0000 (21:20 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 19 Oct 2016 22:55:44 +0000 (00:55 +0200)
stereocompressor.cpp

index 9291dc366b8384f15cf1d204cd05ce603a0c1671..808b71d3c8f0dd87b4a8e59fd99480a474dfbc97 100644 (file)
@@ -68,7 +68,7 @@ inline float fastpow(float x, float y)
 inline float compressor_knee(float x, float threshold, float inv_threshold, float inv_ratio_minus_one, float postgain)
 {
        assert(inv_ratio_minus_one <= 0.0f);
-       if (x > threshold && inv_ratio_minus_one < 0.0f) {
+       if (x > threshold) {
                return postgain * fastpow(x * inv_threshold, inv_ratio_minus_one);
        } else {
                return postgain;
@@ -93,6 +93,17 @@ void StereoCompressor::process(float *buf, size_t num_samples, float threshold,
        float *left_ptr = buf;
        float *right_ptr = buf + 1;
 
+       if (inv_ratio_minus_one >= 0.0) {
+               for (size_t i = 0; i < num_samples; ++i) {
+                       *left_ptr *= makeup_gain;
+                       left_ptr += 2;
+
+                       *right_ptr *= makeup_gain;
+                       right_ptr += 2;
+               }
+               return;
+       }
+
        float peak_level = this->peak_level;
        float compr_level = this->compr_level;