]> git.sesse.net Git - ffmpeg/commitdiff
avfilter/af_aiir: reverse order of biquads in serial processing
authorPaul B Mahol <onemda@gmail.com>
Sat, 17 Oct 2020 16:23:35 +0000 (18:23 +0200)
committerPaul B Mahol <onemda@gmail.com>
Sat, 17 Oct 2020 16:43:47 +0000 (18:43 +0200)
This avoids most of clippings for fixed-point precision inputs.
Also add warning about filtering fixed-point precision with parallel processing.

libavfilter/af_aiir.c

index 8900b0a7c4a60fa9ab355cfe0633b13e09d60230..f5e5dbb03684f7f20d22930bc3aa89763e0e3e18 100644 (file)
@@ -195,7 +195,7 @@ static int iir_ch_serial_## name(AVFilterContext *ctx, void *arg,       \
     int nb_biquads = (FFMAX(iir->nb_ab[0], iir->nb_ab[1]) + 1) / 2;     \
     int n, i;                                                           \
                                                                         \
-    for (i = 0; i < nb_biquads; i++) {                                  \
+    for (i = nb_biquads - 1; i >= 0; i--) {                             \
         const double a1 = -iir->biquads[i].a[1];                        \
         const double a2 = -iir->biquads[i].a[2];                        \
         const double b0 = iir->biquads[i].b[0];                         \
@@ -1226,6 +1226,8 @@ static int config_output(AVFilterLink *outlink)
         if (ret < 0)
             return ret;
     } else if (s->format > 0 && s->process == 2) {
+        if (s->precision > 1)
+            av_log(ctx, AV_LOG_WARNING, "Parallel processing is not recommended for fixed-point precisions.\n");
         ret = decompose_zp2biquads(ctx, inlink->channels);
         if (ret < 0)
             return ret;