Moves counting of mv branches to where we have a new mv, instead of after
the whole frame is summed.

Change-Id: I945d9f6d9199ba2443fe816c92d5849340d17bbd
This commit is contained in:
Jim Bankoski 2013-09-04 09:47:57 -07:00
Родитель 5dda1d2394
Коммит 532179e845
2 изменённых файлов: 6 добавлений и 22 удалений

Просмотреть файл

@ -149,8 +149,6 @@ int vp9_get_mv_mag(MV_CLASS_TYPE c, int offset) {
static void inc_mv_component(int v, nmv_component_counts *comp_counts, static void inc_mv_component(int v, nmv_component_counts *comp_counts,
int incr, int usehp) { int incr, int usehp) {
int s, z, c, o, d, e, f; int s, z, c, o, d, e, f;
if (!incr)
return;
assert (v != 0); /* should not be zero */ assert (v != 0); /* should not be zero */
s = v < 0; s = v < 0;
comp_counts->sign[s] += incr; comp_counts->sign[s] += incr;
@ -177,35 +175,24 @@ static void inc_mv_component(int v, nmv_component_counts *comp_counts,
} }
} }
static void counts_to_context(nmv_component_counts *mvcomp, int usehp) {
int v;
vpx_memset(mvcomp->sign, 0, sizeof(nmv_component_counts) - sizeof(mvcomp->mvcount));
for (v = 1; v <= MV_MAX; v++) {
inc_mv_component(-v, mvcomp, mvcomp->mvcount[MV_MAX - v], usehp);
inc_mv_component( v, mvcomp, mvcomp->mvcount[MV_MAX + v], usehp);
}
}
void vp9_inc_mv(const MV *mv, nmv_context_counts *counts) { void vp9_inc_mv(const MV *mv, nmv_context_counts *counts) {
const MV_JOINT_TYPE j = vp9_get_mv_joint(mv); const MV_JOINT_TYPE j = vp9_get_mv_joint(mv);
++counts->joints[j]; ++counts->joints[j];
if (mv_joint_vertical(j)) if (mv_joint_vertical(j)) {
++counts->comps[0].mvcount[MV_MAX + mv->row]; inc_mv_component(mv->row, &counts->comps[0], 1, 1);
}
if (mv_joint_horizontal(j)) if (mv_joint_horizontal(j)) {
++counts->comps[1].mvcount[MV_MAX + mv->col]; inc_mv_component(mv->col, &counts->comps[1], 1, 1);
}
} }
static vp9_prob adapt_prob(vp9_prob prep, const unsigned int ct[2]) { 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); return merge_probs2(prep, ct, MV_COUNT_SAT, MV_MAX_UPDATE_FACTOR);
} }
void vp9_counts_process(nmv_context_counts *nmv_count, int usehp) {
counts_to_context(&nmv_count->comps[0], usehp);
counts_to_context(&nmv_count->comps[1], usehp);
}
static unsigned int adapt_probs(unsigned int i, static unsigned int adapt_probs(unsigned int i,
vp9_tree tree, vp9_tree tree,
vp9_prob this_probs[], vp9_prob this_probs[],
@ -235,8 +222,6 @@ void vp9_adapt_mv_probs(VP9_COMMON *cm, int allow_hp) {
nmv_context *pre_ctx = &pre_fc->nmvc; nmv_context *pre_ctx = &pre_fc->nmvc;
nmv_context_counts *cts = &cm->counts.mv; nmv_context_counts *cts = &cm->counts.mv;
vp9_counts_process(cts, allow_hp);
adapt_probs(0, vp9_mv_joint_tree, ctx->joints, pre_ctx->joints, cts->joints); adapt_probs(0, vp9_mv_joint_tree, ctx->joints, pre_ctx->joints, cts->joints);
for (i = 0; i < 2; ++i) { for (i = 0; i < 2; ++i) {

Просмотреть файл

@ -155,7 +155,6 @@ static void counts_to_nmv_context(
unsigned int (*branch_ct_class0_hp)[2], unsigned int (*branch_ct_class0_hp)[2],
unsigned int (*branch_ct_hp)[2]) { unsigned int (*branch_ct_hp)[2]) {
int i, j, k; int i, j, k;
vp9_counts_process(nmv_count, usehp);
vp9_tree_probs_from_distribution(vp9_mv_joint_tree, vp9_tree_probs_from_distribution(vp9_mv_joint_tree,
prob->joints, prob->joints,
branch_ct_joint, branch_ct_joint,