[FFmpeg-cvslog] r24466 - trunk/libavcodec/vp56.h

conrad subversion
Fri Jul 23 23:46:08 CEST 2010


Author: conrad
Date: Fri Jul 23 23:46:08 2010
New Revision: 24466

Log:
Split renorm of vp56 arith decoder to its own function

Modified:
   trunk/libavcodec/vp56.h

Modified: trunk/libavcodec/vp56.h
==============================================================================
--- trunk/libavcodec/vp56.h	Fri Jul 23 23:46:01 2010	(r24465)
+++ trunk/libavcodec/vp56.h	Fri Jul 23 23:46:08 2010	(r24466)
@@ -191,16 +191,30 @@ static inline void vp56_init_range_decod
     c->code_word = bytestream_get_be16(&c->buffer);
 }
 
+static av_always_inline void vp56_rac_renorm(VP56RangeCoder *c, unsigned int code_word)
+{
+    int shift = ff_h264_norm_shift[c->high] - 1;
+    int bits = c->bits;
+
+    c->high   <<= shift;
+    code_word <<= shift;
+    bits       += shift;
+    if(bits >= 0 && c->buffer < c->end) {
+        code_word |= *c->buffer++ << bits;
+        bits -= 8;
+    }
+    c->bits = bits;
+    c->code_word = code_word;
+}
+
 static inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob)
 {
     /* Don't put c->high in a local variable; if we do that, gcc gets
      * the stupids and turns the code below into a branch again. */
-    int bits = c->bits;
     unsigned int code_word = c->code_word;
     unsigned int low = 1 + (((c->high - 1) * prob) >> 8);
     unsigned int low_shift = low << 8;
     int bit = code_word >= low_shift;
-    int shift;
 
     /* Incantation to convince GCC to turn these into conditional moves
      * instead of branches -- faster, as this branch is basically
@@ -208,17 +222,7 @@ static inline int vp56_rac_get_prob(VP56
     c->high = bit ? c->high - low : low;
     code_word = bit ? code_word - low_shift : code_word;
 
-    /* normalize */
-    shift = ff_h264_norm_shift[c->high] - 1;
-    c->high   <<= shift;
-    code_word <<= shift;
-    bits       += shift;
-    if(bits >= 0 && c->buffer < c->end) {
-        code_word |= *c->buffer++ << bits;
-        bits -= 8;
-    }
-    c->bits = bits;
-    c->code_word = code_word;
+    vp56_rac_renorm(c, code_word);
     return bit;
 }
 



More information about the ffmpeg-cvslog mailing list