Index: source/libvpx/vp9/decoder/vp9_dboolhuff.h |
=================================================================== |
--- source/libvpx/vp9/decoder/vp9_dboolhuff.h (revision 240950) |
+++ source/libvpx/vp9/decoder/vp9_dboolhuff.h (working copy) |
@@ -18,46 +18,50 @@ |
#include "vpx_ports/mem.h" |
#include "vpx/vpx_integer.h" |
-typedef size_t VP9_BD_VALUE; |
+#include "vp9/common/vp9_treecoder.h" |
-#define BD_VALUE_SIZE ((int)sizeof(VP9_BD_VALUE)*CHAR_BIT) |
+typedef size_t BD_VALUE; |
+#define BD_VALUE_SIZE ((int)sizeof(BD_VALUE) * CHAR_BIT) |
+ |
+DECLARE_ALIGNED(16, extern const uint8_t, vp9_norm[256]); |
+ |
typedef struct { |
const uint8_t *buffer_end; |
const uint8_t *buffer; |
- VP9_BD_VALUE value; |
+ BD_VALUE value; |
int count; |
unsigned int range; |
} vp9_reader; |
-DECLARE_ALIGNED(16, extern const uint8_t, vp9_norm[256]); |
- |
int vp9_reader_init(vp9_reader *r, const uint8_t *buffer, size_t size); |
void vp9_reader_fill(vp9_reader *r); |
+int vp9_reader_has_error(vp9_reader *r); |
+ |
const uint8_t *vp9_reader_find_end(vp9_reader *r); |
-static int vp9_read(vp9_reader *br, int probability) { |
+static int vp9_read(vp9_reader *r, int prob) { |
unsigned int bit = 0; |
- VP9_BD_VALUE value; |
- VP9_BD_VALUE bigsplit; |
+ BD_VALUE value; |
+ BD_VALUE bigsplit; |
int count; |
unsigned int range; |
- unsigned int split = 1 + (((br->range - 1) * probability) >> 8); |
+ unsigned int split = (r->range * prob + (256 - prob)) >> CHAR_BIT; |
- if (br->count < 0) |
- vp9_reader_fill(br); |
+ if (r->count < 0) |
+ vp9_reader_fill(r); |
- value = br->value; |
- count = br->count; |
+ value = r->value; |
+ count = r->count; |
- bigsplit = (VP9_BD_VALUE)split << (BD_VALUE_SIZE - 8); |
+ bigsplit = (BD_VALUE)split << (BD_VALUE_SIZE - CHAR_BIT); |
range = split; |
if (value >= bigsplit) { |
- range = br->range - split; |
+ range = r->range - split; |
value = value - bigsplit; |
bit = 1; |
} |
@@ -68,9 +72,9 @@ |
value <<= shift; |
count -= shift; |
} |
- br->value = value; |
- br->count = count; |
- br->range = range; |
+ r->value = value; |
+ r->count = count; |
+ r->range = range; |
return bit; |
} |
@@ -79,15 +83,23 @@ |
return vp9_read(r, 128); // vp9_prob_half |
} |
-static int vp9_read_literal(vp9_reader *br, int bits) { |
- int z = 0, bit; |
+static int vp9_read_literal(vp9_reader *r, int bits) { |
+ int literal = 0, bit; |
for (bit = bits - 1; bit >= 0; bit--) |
- z |= vp9_read_bit(br) << bit; |
+ literal |= vp9_read_bit(r) << bit; |
- return z; |
+ return literal; |
} |
-int vp9_reader_has_error(vp9_reader *r); |
+static int vp9_read_tree(vp9_reader *r, const vp9_tree_index *tree, |
+ const vp9_prob *probs) { |
+ vp9_tree_index i = 0; |
+ while ((i = tree[i + vp9_read(r, probs[i >> 1])]) > 0) |
+ continue; |
+ |
+ return -i; |
+} |
+ |
#endif // VP9_DECODER_VP9_DBOOLHUFF_H_ |