| /* | |
| * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| #ifndef VP8_COMMON_TREECODER_H_ | |
| #define VP8_COMMON_TREECODER_H_ | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| typedef unsigned char vp8bc_index_t; /* probability index */ | |
| typedef unsigned char vp8_prob; | |
| #define vp8_prob_half ( (vp8_prob) 128) | |
| typedef signed char vp8_tree_index; | |
| struct bool_coder_spec; | |
| typedef struct bool_coder_spec bool_coder_spec; | |
| typedef struct bool_writer bool_writer; | |
| typedef struct bool_reader bool_reader; | |
| typedef const bool_coder_spec c_bool_coder_spec; | |
| typedef const bool_writer c_bool_writer; | |
| typedef const bool_reader c_bool_reader; | |
| # define vp8_complement( x) (255 - x) | |
| /* We build coding trees compactly in arrays. | |
| Each node of the tree is a pair of vp8_tree_indices. | |
| Array index often references a corresponding probability table. | |
| Index <= 0 means done encoding/decoding and value = -Index, | |
| Index > 0 means need another bit, specification at index. | |
| Nonnegative indices are always even; processing begins at node 0. */ | |
| typedef const vp8_tree_index vp8_tree[], *vp8_tree_p; | |
| typedef const struct vp8_token_struct | |
| { | |
| int value; | |
| int Len; | |
| } vp8_token; | |
| /* Construct encoding array from tree. */ | |
| void vp8_tokens_from_tree(struct vp8_token_struct *, vp8_tree); | |
| void vp8_tokens_from_tree_offset(struct vp8_token_struct *, vp8_tree, | |
| int offset); | |
| /* Convert array of token occurrence counts into a table of probabilities | |
| for the associated binary encoding tree. Also writes count of branches | |
| taken for each node on the tree; this facilitiates decisions as to | |
| probability updates. */ | |
| void vp8_tree_probs_from_distribution( | |
| int n, /* n = size of alphabet */ | |
| vp8_token tok [ /* n */ ], | |
| vp8_tree tree, | |
| vp8_prob probs [ /* n-1 */ ], | |
| unsigned int branch_ct [ /* n-1 */ ] [2], | |
| const unsigned int num_events[ /* n */ ], | |
| unsigned int Pfactor, | |
| int Round | |
| ); | |
| /* Variant of above using coder spec rather than hardwired 8-bit probs. */ | |
| void vp8bc_tree_probs_from_distribution( | |
| int n, /* n = size of alphabet */ | |
| vp8_token tok [ /* n */ ], | |
| vp8_tree tree, | |
| vp8_prob probs [ /* n-1 */ ], | |
| unsigned int branch_ct [ /* n-1 */ ] [2], | |
| const unsigned int num_events[ /* n */ ], | |
| c_bool_coder_spec *s | |
| ); | |
| #ifdef __cplusplus | |
| } // extern "C" | |
| #endif | |
| #endif // VP8_COMMON_TREECODER_H_ |