Index: source/libvpx/vp9/common/vp9_entropymv.c |
=================================================================== |
--- source/libvpx/vp9/common/vp9_entropymv.c (revision 219822) |
+++ source/libvpx/vp9/common/vp9_entropymv.c (working copy) |
@@ -16,7 +16,7 @@ |
#define MV_MAX_UPDATE_FACTOR 128 |
/* Integer pel reference mv threshold for use of high-precision 1/8 mv */ |
-#define COMPANDED_MVREF_THRESH 8 |
+#define COMPANDED_MVREF_THRESH 8 |
const vp9_tree_index vp9_mv_joint_tree[2 * MV_JOINTS - 2] = { |
-MV_JOINT_ZERO, 2, |
@@ -107,12 +107,6 @@ |
return mv_class_base(c) + offset; |
} |
-static void inc_mv_component_count(int v, nmv_component_counts *comp_counts, |
- int incr) { |
- assert (v != 0); |
- comp_counts->mvcount[MV_MAX + v] += incr; |
-} |
- |
static void inc_mv_component(int v, nmv_component_counts *comp_counts, |
int incr, int usehp) { |
int s, z, c, o, d, e, f; |
@@ -164,25 +158,19 @@ |
} |
} |
-void vp9_inc_mv(const MV *mv, nmv_context_counts *mvctx) { |
+void vp9_inc_mv(const MV *mv, nmv_context_counts *counts) { |
const MV_JOINT_TYPE j = vp9_get_mv_joint(mv); |
- mvctx->joints[j]++; |
+ ++counts->joints[j]; |
+ |
if (mv_joint_vertical(j)) |
- inc_mv_component_count(mv->row, &mvctx->comps[0], 1); |
+ ++counts->comps[0].mvcount[MV_MAX + mv->row]; |
if (mv_joint_horizontal(j)) |
- inc_mv_component_count(mv->col, &mvctx->comps[1], 1); |
+ ++counts->comps[1].mvcount[MV_MAX + mv->col]; |
} |
-static void adapt_prob(vp9_prob *dest, vp9_prob prep, unsigned int ct[2]) { |
- const int count = MIN(ct[0] + ct[1], MV_COUNT_SAT); |
- if (count) { |
- const vp9_prob newp = get_binary_prob(ct[0], ct[1]); |
- const int factor = MV_MAX_UPDATE_FACTOR * count / MV_COUNT_SAT; |
- *dest = weighted_prob(prep, newp, factor); |
- } else { |
- *dest = prep; |
- } |
+static vp9_prob adapt_prob(vp9_prob prep, const unsigned int ct[2]) { |
+ return merge_probs2(prep, ct, MV_COUNT_SAT, MV_MAX_UPDATE_FACTOR); |
} |
void vp9_counts_process(nmv_context_counts *nmv_count, int usehp) { |
@@ -195,31 +183,22 @@ |
vp9_prob this_probs[], |
const vp9_prob last_probs[], |
const unsigned int num_events[]) { |
- vp9_prob this_prob; |
- const uint32_t left = tree[i] <= 0 |
+ |
+ const unsigned int left = tree[i] <= 0 |
? num_events[-tree[i]] |
: adapt_probs(tree[i], tree, this_probs, last_probs, num_events); |
- const uint32_t right = tree[i + 1] <= 0 |
+ const unsigned int right = tree[i + 1] <= 0 |
? num_events[-tree[i + 1]] |
: adapt_probs(tree[i + 1], tree, this_probs, last_probs, num_events); |
- |
- uint32_t weight = left + right; |
- if (weight) { |
- this_prob = get_binary_prob(left, right); |
- weight = weight > MV_COUNT_SAT ? MV_COUNT_SAT : weight; |
- this_prob = weighted_prob(last_probs[i >> 1], this_prob, |
- MV_MAX_UPDATE_FACTOR * weight / MV_COUNT_SAT); |
- } else { |
- this_prob = last_probs[i >> 1]; |
- } |
- this_probs[i >> 1] = this_prob; |
+ const unsigned int ct[2] = { left, right }; |
+ this_probs[i >> 1] = adapt_prob(last_probs[i >> 1], ct); |
return left + right; |
} |
-void vp9_adapt_mv_probs(VP9_COMMON *cm, int usehp) { |
+void vp9_adapt_mv_probs(VP9_COMMON *cm, int allow_hp) { |
int i, j; |
FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx]; |
@@ -228,36 +207,32 @@ |
nmv_context *pre_ctx = &pre_fc->nmvc; |
nmv_context_counts *cts = &cm->counts.mv; |
- vp9_counts_process(cts, usehp); |
+ vp9_counts_process(cts, allow_hp); |
adapt_probs(0, vp9_mv_joint_tree, ctx->joints, pre_ctx->joints, cts->joints); |
for (i = 0; i < 2; ++i) { |
- adapt_prob(&ctx->comps[i].sign, pre_ctx->comps[i].sign, cts->comps[i].sign); |
+ ctx->comps[i].sign = adapt_prob(pre_ctx->comps[i].sign, cts->comps[i].sign); |
adapt_probs(0, vp9_mv_class_tree, ctx->comps[i].classes, |
pre_ctx->comps[i].classes, cts->comps[i].classes); |
adapt_probs(0, vp9_mv_class0_tree, ctx->comps[i].class0, |
pre_ctx->comps[i].class0, cts->comps[i].class0); |
for (j = 0; j < MV_OFFSET_BITS; ++j) |
- adapt_prob(&ctx->comps[i].bits[j], pre_ctx->comps[i].bits[j], |
- cts->comps[i].bits[j]); |
- } |
+ ctx->comps[i].bits[j] = adapt_prob(pre_ctx->comps[i].bits[j], |
+ cts->comps[i].bits[j]); |
- for (i = 0; i < 2; ++i) { |
for (j = 0; j < CLASS0_SIZE; ++j) |
adapt_probs(0, vp9_mv_fp_tree, ctx->comps[i].class0_fp[j], |
pre_ctx->comps[i].class0_fp[j], cts->comps[i].class0_fp[j]); |
adapt_probs(0, vp9_mv_fp_tree, ctx->comps[i].fp, pre_ctx->comps[i].fp, |
cts->comps[i].fp); |
- } |
- if (usehp) { |
- for (i = 0; i < 2; ++i) { |
- adapt_prob(&ctx->comps[i].class0_hp, pre_ctx->comps[i].class0_hp, |
- cts->comps[i].class0_hp); |
- adapt_prob(&ctx->comps[i].hp, pre_ctx->comps[i].hp, cts->comps[i].hp); |
+ if (allow_hp) { |
+ ctx->comps[i].class0_hp = adapt_prob(pre_ctx->comps[i].class0_hp, |
+ cts->comps[i].class0_hp); |
+ ctx->comps[i].hp = adapt_prob(pre_ctx->comps[i].hp, cts->comps[i].hp); |
} |
} |
} |