[FFmpeg-cvslog] avfilter/af_acrossover: unroll biquad_process loop
Paul B Mahol
git at videolan.org
Mon Nov 30 15:54:18 EET 2020
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | 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; \
\
More information about the ffmpeg-cvslog
mailing list