1 /* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 12 #ifndef tree_reader_h 13 #define tree_reader_h 1 14 15 #include "vp8/common/treecoder.h" 16 17 #include "dboolhuff.h" 18 19 typedef BOOL_DECODER vp8_reader; 20 21 #define vp8_read vp8dx_decode_bool 22 #define vp8_read_literal vp8_decode_value 23 #define vp8_read_bit( R) vp8_read( R, vp8_prob_half) 24 25 26 /* Intent of tree data structure is to make decoding trivial. */ 27 28 static int vp8_treed_read( 29 vp8_reader *const r, /* !!! must return a 0 or 1 !!! */ 30 vp8_tree t, 31 const vp8_prob *const p 32 ) 33 { 34 register vp8_tree_index i = 0; 35 36 while ((i = t[ i + vp8_read(r, p[i>>1])]) > 0) ; 37 38 return -i; 39 } 40 41 42 /* Variant reads a binary number given distributions on each bit. 43 Note that tree is arbitrary; probability of decoding a zero 44 may or may not depend on previously decoded bits. */ 45 46 static int vp8_treed_read_num( 47 vp8_reader *const r, /* !!! must return a 0 or 1 !!! */ 48 vp8_tree t, 49 const vp8_prob *const p 50 ) 51 { 52 vp8_tree_index i = 0; 53 int v = 0, b; 54 55 do 56 { 57 b = vp8_read(r, p[i>>1]); 58 v = (v << 1) + b; 59 } 60 while ((i = t[i+b]) > 0); 61 62 return v; 63 } 64 #endif /* tree_reader_h */ 65