From 9f956611e33f73f6ad8d926e8a361e75aa42a491 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 7 Feb 2013 19:03:22 +0100 Subject: af_biquad: unroll loop, remove variable copies This makes the code about 7% faster Signed-off-by: Michael Niedermayer --- libavfilter/af_biquads.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/libavfilter/af_biquads.c b/libavfilter/af_biquads.c index 123d7a2eee..1f4d635585 100644 --- a/libavfilter/af_biquads.c +++ b/libavfilter/af_biquads.c @@ -182,7 +182,32 @@ static void biquad_## name (const void *input, void *output, int len, \ double o2 = *out2; \ int i; \ \ - for (i = 0; i < len; i++) { \ + for (i = 0; i+1 < len; i++) { \ + o2 = i2 * b2 + i1 * b1 + ibuf[i] * b0 - o2 * a2 - o1 * a1; \ + i2 = ibuf[i]; \ + if (o2 < min) { \ + av_log(NULL, AV_LOG_WARNING, "clipping\n"); \ + obuf[i] = min; \ + } else if (o2 > max) { \ + av_log(NULL, AV_LOG_WARNING, "clipping\n"); \ + obuf[i] = max; \ + } else { \ + obuf[i] = o2; \ + } \ + i++; \ + o1 = i1 * b2 + i2 * b1 + ibuf[i] * b0 - o1 * a2 - o2 * a1; \ + i1 = ibuf[i]; \ + if (o1 < min) { \ + av_log(NULL, AV_LOG_WARNING, "clipping\n"); \ + obuf[i] = min; \ + } else if (o1 > max) { \ + av_log(NULL, AV_LOG_WARNING, "clipping\n"); \ + obuf[i] = max; \ + } else { \ + obuf[i] = o1; \ + } \ + } \ + if (i < len) { \ double o0 = ibuf[i] * b0 + i1 * b1 + i2 * b2 - o1 * a1 - o2 * a2; \ i2 = i1; \ i1 = ibuf[i]; \ -- cgit v1.2.3