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); |
+} |