Commit 81043e8d authored by Paul Wilkins's avatar Paul Wilkins
Browse files

Change definition of NearestMV.

This commit makes the NearestMV match the chosen
best reference MV. It can be a 0,0 or non zero vector
which means the the compound nearest mv mode can
combine a 0,0 and a non zero vector.

Change-Id: I2213d09996ae2916e53e6458d7d110350dcffd7a
parent fb4b533d
...@@ -279,20 +279,15 @@ void vp9_find_best_ref_mvs(MACROBLOCKD *xd, ...@@ -279,20 +279,15 @@ void vp9_find_best_ref_mvs(MACROBLOCKD *xd,
clamp_mv2(&sorted_mvs[i], xd); clamp_mv2(&sorted_mvs[i], xd);
} }
// Provided that there are non zero vectors available there will not // Nearest may be a 0,0 or non zero vector and now matches the chosen
// be more than one 0,0 entry in the sorted list. // "best reference". This has advantages when it is used as part of a
// The best ref mv is always set to the first entry (which gave the best // compound predictor as it means a non zero vector can be paired using
// results. The nearest is set to the first non zero vector if available and // this mode with a 0 vector. The Near vector is still forced to be a
// near to the second non zero vector if available. // non zero candidate if one is avaialble.
// We do not use 0,0 as a nearest or near as 0,0 has its own mode.
if ( sorted_mvs[0].as_int ) {
nearest->as_int = sorted_mvs[0].as_int; nearest->as_int = sorted_mvs[0].as_int;
if ( sorted_mvs[1].as_int ) if ( sorted_mvs[1].as_int ) {
near->as_int = sorted_mvs[1].as_int; near->as_int = sorted_mvs[1].as_int;
near->as_int = sorted_mvs[2].as_int;
} else { } else {
nearest->as_int = sorted_mvs[1].as_int;
near->as_int = sorted_mvs[2].as_int; near->as_int = sorted_mvs[2].as_int;
} }
...@@ -3301,13 +3301,8 @@ static int64_t handle_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, ...@@ -3301,13 +3301,8 @@ static int64_t handle_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
96, xd->allow_high_precision_mv); 96, xd->allow_high_precision_mv);
} }
break; break;
case NEARMV: case NEARMV:
// Do not bother proceeding if the vector (from newmv, nearest or case NEARESTMV:
// near) is 0,0 as this should then be coded using the zeromv mode.
for (i = 0; i < num_refs; ++i)
if (frame_mv[this_mode][refs[i]].as_int == 0)
return INT64_MAX;
case ZEROMV: case ZEROMV:
default: default:
break; break;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment