Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(638)

Unified Diff: source/libvpx/vp8/decoder/dboolhuff.h

Issue 7671004: Update libvpx snapshot to v0.9.7-p1 (Cayuga). (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/libvpx/vp8/decoder/asm_dec_offsets.c ('k') | source/libvpx/vp8/decoder/dboolhuff.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/libvpx/vp8/decoder/dboolhuff.h
===================================================================
--- source/libvpx/vp8/decoder/dboolhuff.h (revision 96967)
+++ source/libvpx/vp8/decoder/dboolhuff.h (working copy)
@@ -34,7 +34,7 @@
unsigned int range;
} BOOL_DECODER;
-DECLARE_ALIGNED(16, extern const unsigned char, vp8dx_bitreader_norm[256]);
+DECLARE_ALIGNED(16, extern const unsigned char, vp8_norm[256]);
int vp8dx_start_decode(BOOL_DECODER *br,
const unsigned char *source,
@@ -51,19 +51,26 @@
#define VP8DX_BOOL_DECODER_FILL(_count,_value,_bufptr,_bufend) \
do \
{ \
- int shift; \
- for(shift = VP8_BD_VALUE_SIZE - 8 - ((_count) + 8); shift >= 0; ) \
+ int shift = VP8_BD_VALUE_SIZE - 8 - ((_count) + 8); \
+ int loop_end, x; \
+ size_t bits_left = ((_bufend)-(_bufptr))*CHAR_BIT; \
+ \
+ x = shift + CHAR_BIT - bits_left; \
+ loop_end = 0; \
+ if(x >= 0) \
{ \
- if((_bufptr) >= (_bufend)) { \
- (_count) = VP8_LOTS_OF_BITS; \
- break; \
- } \
- (_count) += 8; \
+ (_count) += VP8_LOTS_OF_BITS; \
+ loop_end = x; \
+ if(!bits_left) break; \
+ } \
+ while(shift >= loop_end) \
+ { \
+ (_count) += CHAR_BIT; \
(_value) |= (VP8_BD_VALUE)*(_bufptr)++ << shift; \
- shift -= 8; \
+ shift -= CHAR_BIT; \
} \
} \
- while(0)
+ while(0) \
static int vp8dx_decode_bool(BOOL_DECODER *br, int probability) {
@@ -74,11 +81,14 @@
int count;
unsigned int range;
+ split = 1 + (((br->range - 1) * probability) >> 8);
+
+ if(br->count < 0)
+ vp8dx_bool_decoder_fill(br);
+
value = br->value;
count = br->count;
- range = br->range;
- split = 1 + (((range - 1) * probability) >> 8);
bigsplit = (VP8_BD_VALUE)split << (VP8_BD_VALUE_SIZE - 8);
range = split;
@@ -91,7 +101,7 @@
}
{
- register unsigned int shift = vp8dx_bitreader_norm[range];
+ register unsigned int shift = vp8_norm[range];
range <<= shift;
value <<= shift;
count -= shift;
@@ -99,8 +109,7 @@
br->value = value;
br->count = count;
br->range = range;
- if(count < 0)
- vp8dx_bool_decoder_fill(br);
+
return bit;
}
@@ -119,18 +128,19 @@
static int vp8dx_bool_error(BOOL_DECODER *br)
{
- /* Check if we have reached the end of the buffer.
- *
- * Variable 'count' stores the number of bits in the 'value' buffer,
- * minus 8. So if count == 8, there are 16 bits available to be read.
- * Normally, count is filled with 8 and one byte is filled into the
- * value buffer. When we reach the end of the buffer, count is instead
- * filled with VP8_LOTS_OF_BITS, 8 of which represent the last 8 real
- * bits from the bitstream. So the last bit in the bitstream will be
- * represented by count == VP8_LOTS_OF_BITS - 16.
- */
- if ((br->count > VP8_BD_VALUE_SIZE)
- && (br->count <= VP8_LOTS_OF_BITS - 16))
+ /* Check if we have reached the end of the buffer.
+ *
+ * Variable 'count' stores the number of bits in the 'value' buffer, minus
+ * 8. The top byte is part of the algorithm, and the remainder is buffered
+ * to be shifted into it. So if count == 8, the top 16 bits of 'value' are
+ * occupied, 8 for the algorithm and 8 in the buffer.
+ *
+ * When reading a byte from the user's buffer, count is filled with 8 and
+ * one byte is filled into the value buffer. When we reach the end of the
+ * data, count is additionally filled with VP8_LOTS_OF_BITS. So when
+ * count == VP8_LOTS_OF_BITS - 1, the user's data has been exhausted.
+ */
+ if ((br->count > VP8_BD_VALUE_SIZE) && (br->count < VP8_LOTS_OF_BITS))
{
/* We have tried to decode bits after the end of
* stream was encountered.
« no previous file with comments | « source/libvpx/vp8/decoder/asm_dec_offsets.c ('k') | source/libvpx/vp8/decoder/dboolhuff.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698