Index: source/libvpx/vp9/common/vp9_prob.h |
diff --git a/source/libvpx/vp9/common/vp9_prob.h b/source/libvpx/vp9/common/vp9_prob.h |
index bc1511a5e1875c484bbbccb984849bf480a6e25f..c69c62c81f85517ab3cfb4897b99d468190cafe0 100644 |
--- a/source/libvpx/vp9/common/vp9_prob.h |
+++ b/source/libvpx/vp9/common/vp9_prob.h |
@@ -33,6 +33,8 @@ typedef int8_t vp9_tree_index; |
#define vp9_complement(x) (255 - x) |
+#define MODE_MV_COUNT_SAT 20 |
+ |
/* We build coding trees compactly in arrays. |
Each node of the tree is a pair of vp9_tree_indices. |
Array index often references a corresponding probability table. |
@@ -69,9 +71,28 @@ static INLINE vp9_prob merge_probs(vp9_prob pre_prob, |
return weighted_prob(pre_prob, prob, factor); |
} |
+// MODE_MV_MAX_UPDATE_FACTOR (128) * count / MODE_MV_COUNT_SAT; |
+static const int count_to_update_factor[MODE_MV_COUNT_SAT + 1] = { |
+ 0, 6, 12, 19, 25, 32, 38, 44, 51, 57, 64, |
+ 70, 76, 83, 89, 96, 102, 108, 115, 121, 128 |
+}; |
+ |
+static INLINE vp9_prob mode_mv_merge_probs(vp9_prob pre_prob, |
+ const unsigned int ct[2]) { |
+ const unsigned int den = ct[0] + ct[1]; |
+ if (den == 0) { |
+ return pre_prob; |
+ } else { |
+ const unsigned int count = MIN(den, MODE_MV_COUNT_SAT); |
+ const unsigned int factor = count_to_update_factor[count]; |
+ const vp9_prob prob = |
+ clip_prob(((int64_t)(ct[0]) * 256 + (den >> 1)) / den); |
+ return weighted_prob(pre_prob, prob, factor); |
+ } |
+} |
+ |
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); |
+ const unsigned int *counts, vp9_prob *probs); |
DECLARE_ALIGNED(16, extern const uint8_t, vp9_norm[256]); |