[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