[Ffmpeg-cvslog] r6587 - in trunk/libavcodec: cabac.c cabac.h

michael subversion
Sun Oct 8 15:20:23 CEST 2006


Author: michael
Date: Sun Oct  8 15:20:22 2006
New Revision: 6587

Modified:
   trunk/libavcodec/cabac.c
   trunk/libavcodec/cabac.h

Log:
branchless renormalization (1% faster get_cabac) old branchless renormalization wasnt faster because gcc was scared of the shift variable (missusing bit variable now)


Modified: trunk/libavcodec/cabac.c
==============================================================================
--- trunk/libavcodec/cabac.c	(original)
+++ trunk/libavcodec/cabac.c	Sun Oct  8 15:20:22 2006
@@ -73,22 +73,22 @@
 };
 
 const uint8_t ff_h264_norm_shift[256]= {
- 8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,
+ 9,8,7,7,6,6,6,6,5,5,5,5,5,5,5,5,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 };
 
 /**

Modified: trunk/libavcodec/cabac.h
==============================================================================
--- trunk/libavcodec/cabac.h	(original)
+++ trunk/libavcodec/cabac.h	Sun Oct  8 15:20:22 2006
@@ -266,16 +266,16 @@
     c->bytestream+= CABAC_BITS/8;
 }
 
-#if 0 /* all use commented */
+#if 1 /* all use commented */
 static void refill2(CABACContext *c){
     int i, x;
 
     x= c->low ^ (c->low-1);
-    i= 8 - ff_h264_norm_shift[x>>(CABAC_BITS+1)];
+    i= 9 - ff_h264_norm_shift[x>>(CABAC_BITS+1)];
 
     x= -CABAC_MASK;
 
-    if(c->bytestream < c->bytestream_end)
+    if(c->bytestream <= c->bytestream_end)
 #if CABAC_BITS == 16
         x+= (c->bytestream[0]<<9) + (c->bytestream[1]<<1);
 #else
@@ -395,17 +395,18 @@
 #endif
         renorm_cabac_decoder_once(c);
     }else{
-//        int shift= ff_h264_norm_shift[RangeLPS>>17];
-        bit= (s&1)^1;
+        bit= ff_h264_norm_shift[RangeLPS>>17];
         c->low -= c->range;
         *state= c->lps_state[s];
-        c->range = RangeLPS;
-        renorm_cabac_decoder(c);
-/*        c->range = RangeLPS<<shift;
-        c->low <<= shift;
+//        c->range = RangeLPS;
+//        renorm_cabac_decoder(c);
+        c->range = RangeLPS<<bit;
+        c->low <<= bit;
+        bit= (s&1)^1;
+
         if(!(c->low & 0xFFFF)){
             refill2(c);
-        }*/
+        }
     }
 #else
     lps_mask= (c->range - c->low)>>31;




More information about the ffmpeg-cvslog mailing list