[SCM] calf/master: Use generic single VU meter in some dynamics plugins as well.

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:40:20 UTC 2013


The following commit has been merged in the master branch:
commit 50505a2d304555bb3b766c43af5cd1a27de331e2
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Sun Aug 29 23:53:15 2010 +0100

    Use generic single VU meter in some dynamics plugins as well.

diff --git a/src/calf/modules_comp.h b/src/calf/modules_comp.h
index 934b289..9f8923a 100644
--- a/src/calf/modules_comp.h
+++ b/src/calf/modules_comp.h
@@ -29,6 +29,7 @@
 #include "giface.h"
 #include "loudness.h"
 #include "metadata.h"
+#include "plugin_tools.h"
 
 namespace calf_plugins {
 
@@ -97,8 +98,7 @@ public:
 class compressor_audio_module: public audio_module<compressor_metadata>, public line_graph_iface  {
 private:
     typedef compressor_audio_module AM;
-    uint32_t clip_in, clip_out;
-    float meter_in, meter_out;
+    stereo_in_out_metering<compressor_metadata> meters;
     gain_reduction_audio_module compressor;
 public:
     typedef std::complex<double> cfloat;
@@ -138,8 +138,7 @@ private:
     CalfScModes sc_mode;
     mutable CalfScModes sc_mode_old, sc_mode_old1;
     float f1_active, f2_active;
-    uint32_t clip_in, clip_out;
-    float meter_in, meter_out;
+    stereo_in_out_metering<sidechaincompressor_metadata> meters;
     gain_reduction_audio_module compressor;
     dsp::biquad_d2<float> f1L, f1R, f2L, f2R;
 public:
@@ -225,8 +224,7 @@ public:
 class gate_audio_module: public audio_module<gate_metadata>, public line_graph_iface  {
 private:
     typedef gate_audio_module AM;
-    uint32_t clip_in, clip_out;
-    float meter_in, meter_out;
+    stereo_in_out_metering<gate_metadata> meters;
     expander_audio_module gate;
 public:
     typedef std::complex<double> cfloat;
@@ -266,8 +264,7 @@ private:
     CalfScModes sc_mode;
     mutable CalfScModes sc_mode_old, sc_mode_old1;
     float f1_active, f2_active;
-    uint32_t clip_in, clip_out;
-    float meter_in, meter_out;
+    stereo_in_out_metering<sidechaingate_metadata> meters;
     expander_audio_module gate;
     dsp::biquad_d2<float> f1L, f1R, f2L, f2R;
 public:
diff --git a/src/calf/plugin_tools.h b/src/calf/plugin_tools.h
index aad5cdf..cd497b2 100644
--- a/src/calf/plugin_tools.h
+++ b/src/calf/plugin_tools.h
@@ -72,6 +72,11 @@ public:
                 *params[Metadata::param_clip_out] = vumeter_out.clip > 0 ? 1.f : 0.f;
         }
     }
+    void bypassed(float *const *params, unsigned int nsamples)
+    {
+        reset();
+        process(params, NULL, NULL, 0, nsamples);
+    }
 };
 
 };
diff --git a/src/modules_comp.cpp b/src/modules_comp.cpp
index a1240e4..35fad9c 100644
--- a/src/modules_comp.cpp
+++ b/src/modules_comp.cpp
@@ -363,6 +363,7 @@ compressor_audio_module::compressor_audio_module()
     is_active = false;
     srate = 0;
     last_generation = 0;
+    meters.reset();
 }
 
 void compressor_audio_module::activate()
@@ -371,10 +372,7 @@ void compressor_audio_module::activate()
     // set all filters and strips
     compressor.activate();
     params_changed();
-    meter_in = 0.f;
-    meter_out = 0.f;
-    clip_in = 0.f;
-    clip_out = 0.f;
+    meters.reset();
 }
 void compressor_audio_module::deactivate()
 {
@@ -395,6 +393,8 @@ void compressor_audio_module::set_sample_rate(uint32_t sr)
 
 uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
 {
+    uint32_t orig_offset = offset;
+    uint32_t orig_numsamples = numsamples;
     bool bypass = *params[param_bypass] > 0.5f;
     numsamples += offset;
     if(bypass) {
@@ -405,16 +405,10 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples,
             ++offset;
         }
         // displays, too
-        clip_in    = 0.f;
-        clip_out   = 0.f;
-        meter_in   = 0.f;
-        meter_out  = 0.f;
+        meters.bypassed(params, orig_numsamples);
     } else {
         // process
         
-        clip_in    -= std::min(clip_in,  numsamples);
-        clip_out   -= std::min(clip_out,  numsamples);
-        
         compressor.update_curve();        
         
         while(offset < numsamples) {
@@ -439,26 +433,11 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples,
             outs[0][offset] = outL;
             outs[1][offset] = outR;
             
-            // clip LED's
-            if(std::max(fabs(inL), fabs(inR)) > 1.f) {
-                clip_in   = srate >> 3;
-            }
-            if(std::max(fabs(outL), fabs(outR)) > 1.f) {
-                clip_out  = srate >> 3;
-            }
-            // rise up out meter
-            meter_in = std::max(fabs(inL), fabs(inR));;
-            meter_out = std::max(fabs(outL), fabs(outR));;
-            
             // next sample
             ++offset;
         } // cycle trough samples
+        meters.process(params, ins, outs, orig_offset, orig_numsamples);
     }
-    // draw meters
-    SET_IF_CONNECTED(clip_in)
-    SET_IF_CONNECTED(clip_out)
-    SET_IF_CONNECTED(meter_in)
-    SET_IF_CONNECTED(meter_out)
     // draw strip meter
     if(bypass > 0.5f) {
         if(params[param_compression] != NULL) {
@@ -517,6 +496,7 @@ sidechaincompressor_audio_module::sidechaincompressor_audio_module()
     f1_level_old1 = 0.f;
     f2_level_old1 = 0.f;
     sc_mode_old1  = WIDEBAND;
+    meters.reset();
 }
 
 void sidechaincompressor_audio_module::activate()
@@ -525,10 +505,7 @@ void sidechaincompressor_audio_module::activate()
     // set all filters and strips
     compressor.activate();
     params_changed();
-    meter_in = 0.f;
-    meter_out = 0.f;
-    clip_in = 0.f;
-    clip_out = 0.f;
+    meters.reset();
 }
 void sidechaincompressor_audio_module::deactivate()
 {
@@ -685,6 +662,8 @@ void sidechaincompressor_audio_module::set_sample_rate(uint32_t sr)
 
 uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
 {
+    uint32_t orig_offset = offset;
+    uint32_t orig_numsamples = numsamples;
     bool bypass = *params[param_bypass] > 0.5f;
     numsamples += offset;
     if(bypass) {
@@ -695,15 +674,10 @@ uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t num
             ++offset;
         }
         // displays, too
-        clip_in    = 0.f;
-        clip_out   = 0.f;
-        meter_in   = 0.f;
-        meter_out  = 0.f;
+        meters.bypassed(params, orig_numsamples);
     } else {
         // process
         
-        clip_in    -= std::min(clip_in,  numsamples);
-        clip_out   -= std::min(clip_out,  numsamples);
         compressor.update_curve();        
         
         while(offset < numsamples) {
@@ -783,32 +757,16 @@ uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t num
             // send to output
             outs[0][offset] = outL;
             outs[1][offset] = outR;
-            
-            // clip LED's
-            if(std::max(fabs(inL), fabs(inR)) > 1.f) {
-                clip_in   = srate >> 3;
-            }
-            if(std::max(fabs(outL), fabs(outR)) > 1.f) {
-                clip_out  = srate >> 3;
-            }
-            // rise up out meter
-            meter_in = std::max(fabs(inL), fabs(inR));;
-            meter_out = std::max(fabs(outL), fabs(outR));;
-            
+                        
             // next sample
             ++offset;
         } // cycle trough samples
+        meters.process(params, ins, outs, orig_offset, orig_numsamples);
         f1L.sanitize();
         f1R.sanitize();
         f2L.sanitize();
         f2R.sanitize();
-            
     }
-    // draw meters
-    SET_IF_CONNECTED(clip_in)
-    SET_IF_CONNECTED(clip_out)
-    SET_IF_CONNECTED(meter_in)
-    SET_IF_CONNECTED(meter_out)
     // draw strip meter
     if(bypass > 0.5f) {
         if(params[param_compression] != NULL) {
@@ -1139,6 +1097,7 @@ gate_audio_module::gate_audio_module()
     is_active = false;
     srate = 0;
     last_generation = 0;
+    meters.reset();
 }
 
 void gate_audio_module::activate()
@@ -1147,10 +1106,7 @@ void gate_audio_module::activate()
     // set all filters and strips
     gate.activate();
     params_changed();
-    meter_in = 0.f;
-    meter_out = 0.f;
-    clip_in = 0.f;
-    clip_out = 0.f;
+    meters.reset();
 }
 void gate_audio_module::deactivate()
 {
@@ -1171,6 +1127,8 @@ void gate_audio_module::set_sample_rate(uint32_t sr)
 
 uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
 {
+    uint32_t orig_offset = offset;
+    uint32_t orig_numsamples = numsamples;
     bool bypass = *params[param_bypass] > 0.5f;
     numsamples += offset;
     if(bypass) {
@@ -1181,15 +1139,9 @@ uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32
             ++offset;
         }
         // displays, too
-        clip_in    = 0.f;
-        clip_out   = 0.f;
-        meter_in   = 0.f;
-        meter_out  = 0.f;
+        meters.bypassed(params, orig_numsamples);
     } else {
         // process
-        clip_in    -= std::min(clip_in,  numsamples);
-        clip_out   -= std::min(clip_out,  numsamples);
-        
         gate.update_curve();
         
         while(offset < numsamples) {
@@ -1214,26 +1166,11 @@ uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32
             outs[0][offset] = outL;
             outs[1][offset] = outR;
             
-            // clip LED's
-            if(std::max(fabs(inL), fabs(inR)) > 1.f) {
-                clip_in   = srate >> 3;
-            }
-            if(std::max(fabs(outL), fabs(outR)) > 1.f) {
-                clip_out  = srate >> 3;
-            }
-            // rise up out meter
-            meter_in = std::max(fabs(inL), fabs(inR));;
-            meter_out = std::max(fabs(outL), fabs(outR));;
-            
             // next sample
             ++offset;
         } // cycle trough samples
+        meters.process(params, ins, outs, orig_offset, orig_numsamples);
     }
-    // draw meters
-    SET_IF_CONNECTED(clip_in)
-    SET_IF_CONNECTED(clip_out)
-    SET_IF_CONNECTED(meter_in)
-    SET_IF_CONNECTED(meter_out)
     // draw strip meter
     if(bypass > 0.5f) {
         if(params[param_gating] != NULL) {
@@ -1291,7 +1228,7 @@ sidechaingate_audio_module::sidechaingate_audio_module()
     f1_freq_old = f2_freq_old = f1_level_old = f2_level_old = 0;
     f1_freq_old1 = f2_freq_old1 = f1_level_old1 = f2_level_old1 = 0;
     sc_mode_old = sc_mode_old1 = WIDEBAND; // doesn't matter as long as it's sane
-    
+    meters.reset();
 }
 
 void sidechaingate_audio_module::activate()
@@ -1300,10 +1237,7 @@ void sidechaingate_audio_module::activate()
     // set all filters and strips
     gate.activate();
     params_changed();
-    meter_in = 0.f;
-    meter_out = 0.f;
-    clip_in = 0.f;
-    clip_out = 0.f;
+    meters.reset();
 }
 void sidechaingate_audio_module::deactivate()
 {
@@ -1460,6 +1394,8 @@ void sidechaingate_audio_module::set_sample_rate(uint32_t sr)
 
 uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
 {
+    uint32_t orig_offset = offset;
+    uint32_t orig_numsamples = numsamples;
     bool bypass = *params[param_bypass] > 0.5f;
     numsamples += offset;
     if(bypass) {
@@ -1470,15 +1406,10 @@ uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsample
             ++offset;
         }
         // displays, too
-        clip_in    = 0.f;
-        clip_out   = 0.f;
-        meter_in   = 0.f;
-        meter_out  = 0.f;
+        meters.bypassed(params, orig_offset);
     } else {
         // process
         
-        clip_in    -= std::min(clip_in,  numsamples);
-        clip_out   -= std::min(clip_out,  numsamples);
         gate.update_curve();
         
         while(offset < numsamples) {
@@ -1559,31 +1490,16 @@ uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsample
             outs[0][offset] = outL;
             outs[1][offset] = outR;
             
-            // clip LED's
-            if(std::max(fabs(inL), fabs(inR)) > 1.f) {
-                clip_in   = srate >> 3;
-            }
-            if(std::max(fabs(outL), fabs(outR)) > 1.f) {
-                clip_out  = srate >> 3;
-            }
-            // rise up out meter
-            meter_in = std::max(fabs(inL), fabs(inR));;
-            meter_out = std::max(fabs(outL), fabs(outR));;
-            
             // next sample
             ++offset;
         } // cycle trough samples
+        meters.process(params, ins, outs, orig_offset, orig_numsamples);
         f1L.sanitize();
         f1R.sanitize();
         f2L.sanitize();
         f2R.sanitize();
             
     }
-    // draw meters
-    SET_IF_CONNECTED(clip_in)
-    SET_IF_CONNECTED(clip_out)
-    SET_IF_CONNECTED(meter_in)
-    SET_IF_CONNECTED(meter_out)
     // draw strip meter
     if(bypass > 0.5f) {
         if(params[param_gating] != NULL) {
diff --git a/src/modules_dist.cpp b/src/modules_dist.cpp
index 1592e32..4d6a891 100644
--- a/src/modules_dist.cpp
+++ b/src/modules_dist.cpp
@@ -137,8 +137,7 @@ uint32_t saturator_audio_module::process(uint32_t offset, uint32_t numsamples, u
             }
             ++offset;
         }
-        meters.reset();
-        meters.process(params, NULL, NULL, 0, 0);
+        meters.bypassed(params, orig_numsamples);
     } else {
         meter_drive = 0.f;
         float in_avg[2] = {0.f, 0.f};
@@ -327,8 +326,7 @@ uint32_t exciter_audio_module::process(uint32_t offset, uint32_t numsamples, uin
             }
             ++offset;
         }
-        meters.reset();
-        meters.process(params, NULL, NULL, 0, 0);
+        meters.bypassed(params, orig_numsamples);
         // displays, too
         meter_drive = 0.f;
     } else {
@@ -515,8 +513,7 @@ uint32_t bassenhancer_audio_module::process(uint32_t offset, uint32_t numsamples
             ++offset;
         }
         // displays, too
-        meters.reset();
-        meters.process(params, NULL, NULL, 0, 0);
+        meters.bypassed(params, orig_numsamples);
         meter_drive = 0.f;
     } else {
         meter_drive = 0.f;

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list