vp10: fix entropy counts for the hp bit. The counts didn't take usehp into account, which means that if the scope of the refmv is too large for the hp bit to be coded, the value (always 1) is still included in the stats. Therefore, the final counts will not reflect the entropy of the coded bits, but rather the entropy of the combination of coded bits and the implied value (which is always 1). Fix that by only including counts if the hp bit is actually coded. See issue 1060. Change-Id: I19a3adda4a8662a05f08a9e58d7e56ff979be11e
diff --git a/vp10/common/entropymv.c b/vp10/common/entropymv.c index ebf7a07..6b99606 100644 --- a/vp10/common/entropymv.c +++ b/vp10/common/entropymv.c
@@ -161,17 +161,19 @@ } } -void vp10_inc_mv(const MV *mv, nmv_context_counts *counts) { +void vp10_inc_mv(const MV *mv, nmv_context_counts *counts, const int usehp) { if (counts != NULL) { const MV_JOINT_TYPE j = vp10_get_mv_joint(mv); ++counts->joints[j]; if (mv_joint_vertical(j)) { - inc_mv_component(mv->row, &counts->comps[0], 1, 1); + inc_mv_component(mv->row, &counts->comps[0], 1, + !CONFIG_MISC_FIXES || usehp); } if (mv_joint_horizontal(j)) { - inc_mv_component(mv->col, &counts->comps[1], 1, 1); + inc_mv_component(mv->col, &counts->comps[1], 1, + !CONFIG_MISC_FIXES || usehp); } } }
diff --git a/vp10/common/entropymv.h b/vp10/common/entropymv.h index fd9f1c0..d1eb95c 100644 --- a/vp10/common/entropymv.h +++ b/vp10/common/entropymv.h
@@ -124,7 +124,7 @@ nmv_component_counts comps[2]; } nmv_context_counts; -void vp10_inc_mv(const MV *mv, nmv_context_counts *mvctx); +void vp10_inc_mv(const MV *mv, nmv_context_counts *mvctx, const int usehp); #ifdef __cplusplus } // extern "C"
diff --git a/vp10/decoder/decodemv.c b/vp10/decoder/decodemv.c index b190f73..f157ada 100644 --- a/vp10/decoder/decodemv.c +++ b/vp10/decoder/decodemv.c
@@ -294,7 +294,7 @@ if (mv_joint_horizontal(joint_type)) diff.col = read_mv_component(r, &ctx->comps[1], use_hp); - vp10_inc_mv(&diff, counts); + vp10_inc_mv(&diff, counts, use_hp); mv->row = ref->row + diff.row; mv->col = ref->col + diff.col;
diff --git a/vp10/encoder/encodemv.c b/vp10/encoder/encodemv.c index f1fe5a7..ca2de1f 100644 --- a/vp10/encoder/encodemv.c +++ b/vp10/encoder/encodemv.c
@@ -239,7 +239,7 @@ const MV *ref = &mbmi_ext->ref_mvs[mbmi->ref_frame[i]][0].as_mv; const MV diff = {mvs[i].as_mv.row - ref->row, mvs[i].as_mv.col - ref->col}; - vp10_inc_mv(&diff, counts); + vp10_inc_mv(&diff, counts, vp10_use_mv_hp(ref)); } }