| Index: source/libvpx/vp9/common/vp9_prob.c
|
| ===================================================================
|
| --- source/libvpx/vp9/common/vp9_prob.c (revision 251189)
|
| +++ source/libvpx/vp9/common/vp9_prob.c (working copy)
|
| @@ -28,3 +28,34 @@
|
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
| };
|
| +
|
| +
|
| +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,
|
| + 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, 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, probs);
|
| + const unsigned int ct[2] = { left_count, right_count };
|
| + probs[i >> 1] = merge_probs(pre_probs[i >> 1], ct,
|
| + count_sat, max_update);
|
| + return left_count + right_count;
|
| +}
|
| +
|
| +void vp9_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);
|
| +}
|
|
|