protect meters against weird float values
[ardour.git] / libs / ardour / vumeterdsp.cc
index 67d48f6c5411859b5166f5f5b470402370fb3d30..a3d0ec23c1899406da90394b008d4d3fba6f5230 100644 (file)
@@ -43,8 +43,8 @@ void Vumeterdsp::process (float *p, int n)
 {
     float z1, z2, m, t1, t2;
 
-    z1 = _z1;
-    z2 = _z2;
+    z1 = _z1 > 20 ? 20 : (_z1 < -20 ? -20 : _z1);
+    z2 = _z2 > 20 ? 20 : (_z2 < -20 ? -20 : _z2);
     m = _res ? 0: _m;
     _res = false;
 
@@ -64,6 +64,8 @@ void Vumeterdsp::process (float *p, int n)
        if (z2 > m) m = z2;
     }
 
+    if (isnan(z1)) z1 = 0;
+    if (isnan(z2)) z2 = 0;
     _z1 = z1;
     _z2 = z2 + 1e-10f;
     _m = m;