]> git.sesse.net Git - ffmpeg/commitdiff
avfilter/af_aiir: normalize biquads only if divisor is big enough
authorPaul B Mahol <onemda@gmail.com>
Fri, 22 Nov 2019 20:06:35 +0000 (21:06 +0100)
committerPaul B Mahol <onemda@gmail.com>
Fri, 22 Nov 2019 20:10:43 +0000 (21:10 +0100)
libavfilter/af_aiir.c

index 55828c1a82dcde6eb65eb409304050430af4acf5..717388f45050d56a77bfc4b41fb296ca59baf841 100644 (file)
@@ -601,18 +601,22 @@ static int decompose_zp2biquads(AVFilterContext *ctx, int channels)
             iir->biquads[current_biquad].b[1] = b[2] / a[4];
             iir->biquads[current_biquad].b[2] = b[0] / a[4];
 
-            factor = (iir->biquads[current_biquad].a[0] +
-                      iir->biquads[current_biquad].a[1] +
-                      iir->biquads[current_biquad].a[2]) /
-                     (iir->biquads[current_biquad].b[0] +
-                      iir->biquads[current_biquad].b[1] +
-                      iir->biquads[current_biquad].b[2]);
-
-            av_log(ctx, AV_LOG_VERBOSE, "factor=%f\n", factor);
-
-            iir->biquads[current_biquad].b[0] *= factor;
-            iir->biquads[current_biquad].b[1] *= factor;
-            iir->biquads[current_biquad].b[2] *= factor;
+            if (fabs(iir->biquads[current_biquad].b[0] +
+                     iir->biquads[current_biquad].b[1] +
+                     iir->biquads[current_biquad].b[2]) > 1e-6) {
+                factor = (iir->biquads[current_biquad].a[0] +
+                          iir->biquads[current_biquad].a[1] +
+                          iir->biquads[current_biquad].a[2]) /
+                         (iir->biquads[current_biquad].b[0] +
+                          iir->biquads[current_biquad].b[1] +
+                          iir->biquads[current_biquad].b[2]);
+
+                av_log(ctx, AV_LOG_VERBOSE, "factor=%f\n", factor);
+
+                iir->biquads[current_biquad].b[0] *= factor;
+                iir->biquads[current_biquad].b[1] *= factor;
+                iir->biquads[current_biquad].b[2] *= factor;
+            }
 
             iir->biquads[current_biquad].b[0] *= (current_biquad ? 1.0 : iir->g);
             iir->biquads[current_biquad].b[1] *= (current_biquad ? 1.0 : iir->g);