[FFmpeg-cvslog] avcodec/apedec: optimize sign combination

Michael Niedermayer git at videolan.org
Mon Jun 23 02:21:26 CEST 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Mon Jun 23 02:04:44 2014 +0200| [42e6fc147b5a375fe811c64dc5f1cb66d5b0ac49] | committer: Michael Niedermayer

avcodec/apedec: optimize sign combination

48078630 -> 32533850 dezi cycles

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavcodec/apedec.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
index 126b6d7..4e25b44 100644
--- a/libavcodec/apedec.c
+++ b/libavcodec/apedec.c
@@ -913,7 +913,7 @@ static void long_filter_high_3800(int32_t *buffer, int order, int shift,
         sign = APESIGN(buffer[i]);
         for (j = 0; j < order; j++) {
             dotprod += delay[j] * coeffs[j];
-            coeffs[j] -= (((delay[j] >> 30) & 2) - 1) * sign;
+            coeffs[j] += ((delay[j] >> 31) | 1) * sign;
         }
         buffer[i] -= dotprod >> shift;
         for (j = 0; j < order - 1; j++)
@@ -933,7 +933,7 @@ static void long_filter_ehigh_3830(int32_t *buffer, int length)
         sign = APESIGN(buffer[i]);
         for (j = 7; j >= 0; j--) {
             dotprod += delay[j] * coeffs[j];
-            coeffs[j] -= (((delay[j] >> 30) & 2) - 1) * sign;
+            coeffs[j] += ((delay[j] >> 31) | 1) * sign;
         }
         for (j = 7; j > 0; j--)
             delay[j] = delay[j - 1];



More information about the ffmpeg-cvslog mailing list