ffmpeg | branch: master | Paul B Mahol <[email protected]> | Mon Nov 30 14:20:45 
2020 +0100| [ca0900bc6ef1db42881769528f2a3bb69e0bc492] | committer: Paul B Mahol

avfilter/af_acrossover: unroll biquad_process loop

Makes code significantly faster for higher orders.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ca0900bc6ef1db42881769528f2a3bb69e0bc492
---

 libavfilter/af_acrossover.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/libavfilter/af_acrossover.c b/libavfilter/af_acrossover.c
index 7788251d3a..6150af7933 100644
--- a/libavfilter/af_acrossover.c
+++ b/libavfilter/af_acrossover.c
@@ -288,7 +288,25 @@ static void biquad_process_## name(const BiquadCoeffs 
*const c,\
     type z1 = b->z1;                                           \
     type z2 = b->z2;                                           \
                                                                \
-    for (int n = 0; n < nb_samples; n++) {                     \
+    for (int n = 0; n + 1 < nb_samples; n++) {                 \
+        type in = src[n];                                      \
+        type out;                                              \
+                                                               \
+        out = in * b0 + z1;                                    \
+        z1 = b1 * in + z2 + a1 * out;                          \
+        z2 = b2 * in + a2 * out;                               \
+        dst[n] = out;                                          \
+                                                               \
+        n++;                                                   \
+        in = src[n];                                           \
+        out = in * b0 + z1;                                    \
+        z1 = b1 * in + z2 + a1 * out;                          \
+        z2 = b2 * in + a2 * out;                               \
+        dst[n] = out;                                          \
+    }                                                          \
+                                                               \
+    if (nb_samples & 1) {                                      \
+        const int n = nb_samples - 1;                          \
         const type in = src[n];                                \
         type out;                                              \
                                                                \

_______________________________________________
ffmpeg-cvslog mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to