[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