• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 __INC_TREECODER_H
13 #define __INC_TREECODER_H
14 
15 typedef unsigned char vp8bc_index_t; /* probability index */
16 
17 
18 typedef unsigned char vp8_prob;
19 
20 #define vp8_prob_half ( (vp8_prob) 128)
21 
22 typedef signed char vp8_tree_index;
23 struct bool_coder_spec;
24 
25 typedef struct bool_coder_spec bool_coder_spec;
26 typedef struct bool_writer bool_writer;
27 typedef struct bool_reader bool_reader;
28 
29 typedef const bool_coder_spec c_bool_coder_spec;
30 typedef const bool_writer c_bool_writer;
31 typedef const bool_reader c_bool_reader;
32 
33 
34 
35 # define vp8_complement( x) (255 - x)
36 
37 
38 /* We build coding trees compactly in arrays.
39    Each node of the tree is a pair of vp8_tree_indices.
40    Array index often references a corresponding probability table.
41    Index <= 0 means done encoding/decoding and value = -Index,
42    Index > 0 means need another bit, specification at index.
43    Nonnegative indices are always even;  processing begins at node 0. */
44 
45 typedef const vp8_tree_index vp8_tree[], *vp8_tree_p;
46 
47 
48 typedef const struct vp8_token_struct
49 {
50     int value;
51     int Len;
52 } vp8_token;
53 
54 /* Construct encoding array from tree. */
55 
56 void vp8_tokens_from_tree(struct vp8_token_struct *, vp8_tree);
57 void vp8_tokens_from_tree_offset(struct vp8_token_struct *, vp8_tree,
58                                  int offset);
59 
60 
61 /* Convert array of token occurrence counts into a table of probabilities
62    for the associated binary encoding tree.  Also writes count of branches
63    taken for each node on the tree; this facilitiates decisions as to
64    probability updates. */
65 
66 void vp8_tree_probs_from_distribution(
67     int n,                      /* n = size of alphabet */
68     vp8_token tok               [ /* n */ ],
69     vp8_tree tree,
70     vp8_prob probs          [ /* n-1 */ ],
71     unsigned int branch_ct       [ /* n-1 */ ] [2],
72     const unsigned int num_events[ /* n */ ],
73     unsigned int Pfactor,
74     int Round
75 );
76 
77 /* Variant of above using coder spec rather than hardwired 8-bit probs. */
78 
79 void vp8bc_tree_probs_from_distribution(
80     int n,                      /* n = size of alphabet */
81     vp8_token tok               [ /* n */ ],
82     vp8_tree tree,
83     vp8_prob probs          [ /* n-1 */ ],
84     unsigned int branch_ct       [ /* n-1 */ ] [2],
85     const unsigned int num_events[ /* n */ ],
86     c_bool_coder_spec *s
87 );
88 
89 
90 #endif
91