summaryrefslogtreecommitdiffstats
path: root/libavfilter/af_biquads.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-02-07 19:39:08 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-02-07 19:46:02 +0100
commita00c4b4db044b54296af14eeffe7989ac67e4197 (patch)
tree945f439b4042839c99794f973f600e5a5c69e45d /libavfilter/af_biquads.c
parent9f956611e33f73f6ad8d926e8a361e75aa42a491 (diff)
downloadffmpeg-streaming-a00c4b4db044b54296af14eeffe7989ac67e4197.zip
ffmpeg-streaming-a00c4b4db044b54296af14eeffe7989ac67e4197.tar.gz
af_biquad: avoid subtraction in loop
17% faster Note the speedup is smaller if its done before storing in the context (gcc 4.6.3 core i7) Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/af_biquads.c')
-rw-r--r--libavfilter/af_biquads.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libavfilter/af_biquads.c b/libavfilter/af_biquads.c
index 1f4d635..de0ba42 100644
--- a/libavfilter/af_biquads.c
+++ b/libavfilter/af_biquads.c
@@ -181,9 +181,11 @@ static void biquad_## name (const void *input, void *output, int len, \
double o1 = *out1; \
double o2 = *out2; \
int i; \
+ a1 = -a1; \
+ a2 = -a2; \
\
for (i = 0; i+1 < len; i++) { \
- o2 = i2 * b2 + i1 * b1 + ibuf[i] * b0 - o2 * a2 - o1 * a1; \
+ 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"); \
@@ -195,7 +197,7 @@ static void biquad_## name (const void *input, void *output, int len, \
obuf[i] = o2; \
} \
i++; \
- o1 = i1 * b2 + i2 * b1 + ibuf[i] * b0 - o1 * a2 - o2 * a1; \
+ 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"); \
@@ -208,7 +210,7 @@ static void biquad_## name (const void *input, void *output, int len, \
} \
} \
if (i < len) { \
- double o0 = ibuf[i] * b0 + i1 * b1 + i2 * b2 - o1 * a1 - o2 * a2; \
+ double o0 = ibuf[i] * b0 + i1 * b1 + i2 * b2 + o1 * a1 + o2 * a2; \
i2 = i1; \
i1 = ibuf[i]; \
o2 = o1; \
OpenPOWER on IntegriCloud