| Index: source/libvpx/vp9/common/vp9_treecoder.h
|
| ===================================================================
|
| --- source/libvpx/vp9/common/vp9_treecoder.h (revision 240950)
|
| +++ source/libvpx/vp9/common/vp9_treecoder.h (working copy)
|
| @@ -34,27 +34,11 @@
|
|
|
| typedef const vp9_tree_index vp9_tree[];
|
|
|
| -struct vp9_token {
|
| - int value;
|
| - int len;
|
| -};
|
| -
|
| -/* Construct encoding array from tree. */
|
| -
|
| -void vp9_tokens_from_tree(struct vp9_token*, vp9_tree);
|
| -void vp9_tokens_from_tree_offset(struct vp9_token*, vp9_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 vp9_tree_probs_from_distribution(vp9_tree tree,
|
| - vp9_prob probs[ /* n - 1 */ ],
|
| - unsigned int branch_ct[ /* n - 1 */ ][2],
|
| - const unsigned int num_events[ /* n */ ],
|
| - unsigned int tok0_offset);
|
| -
|
| static INLINE vp9_prob clip_prob(int p) {
|
| return (p > 255) ? 255u : (p < 1) ? 1u : p;
|
| }
|
| @@ -81,22 +65,47 @@
|
| return ROUND_POWER_OF_TWO(prob1 * (256 - factor) + prob2 * factor, 8);
|
| }
|
|
|
| -static INLINE vp9_prob merge_probs(vp9_prob pre_prob, vp9_prob prob,
|
| +static INLINE vp9_prob merge_probs(vp9_prob pre_prob,
|
| const unsigned int ct[2],
|
| unsigned int count_sat,
|
| unsigned int max_update_factor) {
|
| + const vp9_prob prob = get_binary_prob(ct[0], ct[1]);
|
| const unsigned int count = MIN(ct[0] + ct[1], count_sat);
|
| const unsigned int factor = max_update_factor * count / count_sat;
|
| return weighted_prob(pre_prob, prob, factor);
|
| }
|
|
|
| -static INLINE vp9_prob merge_probs2(vp9_prob pre_prob,
|
| - const unsigned int ct[2],
|
| - unsigned int count_sat,
|
| - unsigned int max_update_factor) {
|
| - return merge_probs(pre_prob, get_binary_prob(ct[0], ct[1]), ct, count_sat,
|
| - max_update_factor);
|
| +static unsigned int tree_merge_probs_impl(unsigned int i,
|
| + const vp9_tree_index *tree,
|
| + const vp9_prob *pre_probs,
|
| + const unsigned int *counts,
|
| + unsigned int count_sat,
|
| + unsigned int max_update_factor,
|
| + vp9_prob *probs) {
|
| + const int l = tree[i];
|
| + const unsigned int left_count = (l <= 0)
|
| + ? counts[-l]
|
| + : tree_merge_probs_impl(l, tree, pre_probs, counts,
|
| + count_sat, max_update_factor, probs);
|
| + const int r = tree[i + 1];
|
| + const unsigned int right_count = (r <= 0)
|
| + ? counts[-r]
|
| + : tree_merge_probs_impl(r, tree, pre_probs, counts,
|
| + count_sat, max_update_factor, probs);
|
| + const unsigned int ct[2] = { left_count, right_count };
|
| + probs[i >> 1] = merge_probs(pre_probs[i >> 1], ct,
|
| + count_sat, max_update_factor);
|
| + return left_count + right_count;
|
| }
|
|
|
| +static void tree_merge_probs(const vp9_tree_index *tree,
|
| + const vp9_prob *pre_probs,
|
| + const unsigned int *counts,
|
| + unsigned int count_sat,
|
| + unsigned int max_update_factor, vp9_prob *probs) {
|
| + tree_merge_probs_impl(0, tree, pre_probs, counts,
|
| + count_sat, max_update_factor, probs);
|
| +}
|
|
|
| +
|
| #endif // VP9_COMMON_VP9_TREECODER_H_
|
|
|