Home | History | Annotate | Download | only in decoder
      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