diff options
Diffstat (limited to 'vp9/decoder/vp9_dboolhuff.c')
-rw-r--r-- | vp9/decoder/vp9_dboolhuff.c | 60 |
1 files changed, 26 insertions, 34 deletions
diff --git a/vp9/decoder/vp9_dboolhuff.c b/vp9/decoder/vp9_dboolhuff.c index 7e3b4646b..dcd591642 100644 --- a/vp9/decoder/vp9_dboolhuff.c +++ b/vp9/decoder/vp9_dboolhuff.c @@ -13,34 +13,29 @@ #include "vp9/decoder/vp9_dboolhuff.h" -int vp9_start_decode(BOOL_DECODER *br, - const unsigned char *source, - unsigned int source_sz) { - br->user_buffer_end = source + source_sz; - br->user_buffer = source; +int vp9_start_decode(BOOL_DECODER *br, const uint8_t *buffer, size_t size) { + br->buffer_end = buffer + size; + br->buffer = buffer; br->value = 0; br->count = -8; br->range = 255; - if (source_sz && !source) + if (size && !buffer) return 1; - /* Populate the buffer */ - vp9_bool_decoder_fill(br); - + vp9_reader_fill(br); return 0; } - -void vp9_bool_decoder_fill(BOOL_DECODER *br) { - const unsigned char *bufptr = br->user_buffer; - const unsigned char *bufend = br->user_buffer_end; +void vp9_reader_fill(BOOL_DECODER *br) { + const uint8_t *const buffer_end = br->buffer_end; + const uint8_t *buffer = br->buffer; VP9_BD_VALUE value = br->value; int count = br->count; int shift = VP9_BD_VALUE_SIZE - 8 - (count + 8); int loop_end = 0; - int bits_left = (int)((bufend - bufptr)*CHAR_BIT); - int x = shift + CHAR_BIT - bits_left; + const int bits_left = (int)((buffer_end - buffer)*CHAR_BIT); + const int x = shift + CHAR_BIT - bits_left; if (x >= 0) { count += VP9_LOTS_OF_BITS; @@ -50,18 +45,18 @@ void vp9_bool_decoder_fill(BOOL_DECODER *br) { if (x < 0 || bits_left) { while (shift >= loop_end) { count += CHAR_BIT; - value |= (VP9_BD_VALUE)*bufptr++ << shift; + value |= (VP9_BD_VALUE)*buffer++ << shift; shift -= CHAR_BIT; } } - br->user_buffer = bufptr; + br->buffer = buffer; br->value = value; br->count = count; } -static int get_unsigned_bits(unsigned num_values) { +static int get_unsigned_bits(unsigned int num_values) { int cat = 0; if (num_values <= 1) return 0; @@ -84,30 +79,29 @@ int vp9_inv_recenter_nonneg(int v, int m) { int vp9_decode_uniform(BOOL_DECODER *br, int n) { int v; - int l = get_unsigned_bits(n); - int m = (1 << l) - n; - if (!l) return 0; - v = decode_value(br, l - 1); - if (v < m) - return v; - else - return (v << 1) - m + decode_value(br, 1); + const int l = get_unsigned_bits(n); + const int m = (1 << l) - n; + if (!l) + return 0; + + v = vp9_read_literal(br, l - 1); + return v < m ? v : (v << 1) - m + vp9_read_bit(br); } int vp9_decode_term_subexp(BOOL_DECODER *br, int k, int num_syms) { int i = 0, mk = 0, word; while (1) { - int b = (i ? k + i - 1 : k); - int a = (1 << b); + const int b = i ? k + i - 1 : k; + const int a = 1 << b; if (num_syms <= mk + 3 * a) { word = vp9_decode_uniform(br, num_syms - mk) + mk; break; } else { - if (decode_value(br, 1)) { + if (vp9_read_bit(br)) { i++; mk += a; } else { - word = decode_value(br, b) + mk; + word = vp9_read_literal(br, b) + mk; break; } } @@ -119,10 +113,8 @@ int vp9_decode_unsigned_max(BOOL_DECODER *br, int max) { int data = 0, bit = 0, lmax = max; while (lmax) { - data |= decode_bool(br, 128) << bit++; + data |= vp9_read_bit(br) << bit++; lmax >>= 1; } - if (data > max) - return max; - return data; + return data > max ? max : data; } |