[FFmpeg-cvslog] adpcmenc:Optimize adpcm_ima_qt_compress_sample()

Michael Niedermayer git at videolan.org
Sun May 8 13:30:11 CEST 2011


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sun May  8 13:20:22 2011 +0200| [af3c8f823018ef8c07b25c8834d8032093a49418] | committer: Michael Niedermayer

adpcmenc:Optimize adpcm_ima_qt_compress_sample()
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavcodec/adpcm.c |   33 ++++++++++++++++++---------------
 1 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c
index 2d231e8..ba31255 100644
--- a/libavcodec/adpcm.c
+++ b/libavcodec/adpcm.c
@@ -274,24 +274,27 @@ static inline unsigned char adpcm_ima_compress_sample(ADPCMChannelStatus *c, sho
 static inline unsigned char adpcm_ima_qt_compress_sample(ADPCMChannelStatus *c, short sample)
 {
     int delta = sample - c->prev_sample;
-    int mask, step = step_table[c->step_index];
-    int diff = step >> 3;
-    int nibble = 0;
+    int diff, step = step_table[c->step_index];
+    int nibble = 8*(delta < 0);
 
-    if (delta < 0) {
-        nibble = 8;
-        delta = -delta;
-    }
+    delta= abs(delta);
+    diff = delta + (step >> 3);
 
-    for (mask = 4; mask;) {
-        if (delta >= step) {
-            nibble |= mask;
-            delta -= step;
-            diff += step;
-        }
-        step >>= 1;
-        mask >>= 1;
+    if (delta >= step) {
+        nibble |= 4;
+        delta -= step;
+    }
+    step >>= 1;
+    if (delta >= step) {
+        nibble |= 2;
+        delta -= step;
+    }
+    step >>= 1;
+    if (delta >= step) {
+        nibble |= 1;
+        delta -= step;
     }
+    diff -= delta;
 
     if (nibble & 8)
         c->prev_sample -= diff;



More information about the ffmpeg-cvslog mailing list