faster accounting of inc_mv
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:
Родитель
5dda1d2394
Коммит
532179e845
|
@ -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,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче