avfilter/af_acrossover: unroll biquad_process loop

Makes code significantly faster for higher orders.
This commit is contained in:
Paul B Mahol 2020-11-30 14:20:45 +01:00
parent 6100a01a7a
commit ca0900bc6e
1 changed files with 19 additions and 1 deletions

View File

@ -288,7 +288,25 @@ static void biquad_process_## name(const BiquadCoeffs *const c,\
type z1 = b->z1; \ type z1 = b->z1; \
type z2 = b->z2; \ 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]; \ const type in = src[n]; \
type out; \ type out; \
\ \