Turn off global motion for sub8x8 blocks
Lowres: 0.03% improvement, 1% improvement on waterfall_cif.y4m
Midres: 0.085% overall improvement, 1.253% improvement on station2_480p25.y4m
Change-Id: I3872934d978bb4ca828c6b9acd2fdb951d9da299
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 6054735..a4c50ce 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -5045,9 +5045,8 @@
this_mv[ref].as_int =
gm_get_motion_vector(
&cpi->common.global_motion[mbmi->ref_frame[ref]],
- cpi->common.allow_high_precision_mv,
- block_center_x(mi_col, mbmi->sb_type),
- block_center_y(mi_row, mbmi->sb_type))
+ cpi->common.allow_high_precision_mv, mbmi->sb_type, mi_col,
+ mi_row)
.as_int;
thismvcost += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[ref]);
#else
@@ -5105,14 +5104,12 @@
this_mv[0].as_int =
gm_get_motion_vector(&cpi->common.global_motion[mbmi->ref_frame[0]],
cpi->common.allow_high_precision_mv,
- block_center_x(mi_col, mbmi->sb_type),
- block_center_y(mi_row, mbmi->sb_type))
+ mbmi->sb_type, mi_col, mi_row)
.as_int;
this_mv[1].as_int =
gm_get_motion_vector(&cpi->common.global_motion[mbmi->ref_frame[1]],
cpi->common.allow_high_precision_mv,
- block_center_x(mi_col, mbmi->sb_type),
- block_center_y(mi_row, mbmi->sb_type))
+ mbmi->sb_type, mi_col, mi_row)
.as_int;
thismvcost += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[0]) +
GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[1]);
@@ -5382,9 +5379,8 @@
)
zeromv[cur_frm].as_int =
gm_get_motion_vector(&cpi->common.global_motion[ref_frames[cur_frm]],
- cpi->common.allow_high_precision_mv,
- block_center_x(mi_col, bsize),
- block_center_y(mi_row, bsize))
+ cpi->common.allow_high_precision_mv, bsize,
+ mi_col, mi_row)
.as_int;
else
#endif // CONFIG_GLOBAL_MOTION
@@ -5845,9 +5841,8 @@
#if CONFIG_GLOBAL_MOTION
frame_mv[ZEROMV][frame].as_int =
gm_get_motion_vector(&cm->global_motion[frame],
- cm->allow_high_precision_mv,
- block_center_x(mi_col, mbmi->sb_type),
- block_center_y(mi_row, mbmi->sb_type))
+ cm->allow_high_precision_mv, mbmi->sb_type,
+ mi_col, mi_row)
.as_int;
#else // CONFIG_GLOBAL_MOTION
frame_mv[ZEROMV][frame].as_int = 0;
@@ -5879,9 +5874,8 @@
#if CONFIG_GLOBAL_MOTION
frame_mv[ZERO_ZEROMV][frame].as_int =
gm_get_motion_vector(&cm->global_motion[frame],
- cm->allow_high_precision_mv,
- block_center_x(mi_col, mbmi->sb_type),
- block_center_y(mi_row, mbmi->sb_type))
+ cm->allow_high_precision_mv, mbmi->sb_type,
+ mi_col, mi_row)
.as_int;
#else
frame_mv[ZERO_ZEROMV][frame].as_int = 0;
@@ -9607,9 +9601,8 @@
frame_mv[NEWMV][ref_frame].as_int = INVALID_MV;
#if CONFIG_GLOBAL_MOTION
frame_mv[ZEROMV][ref_frame].as_int =
- gm_get_motion_vector(
- &cm->global_motion[ref_frame], cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize), block_center_y(mi_row, bsize))
+ gm_get_motion_vector(&cm->global_motion[ref_frame],
+ cm->allow_high_precision_mv, bsize, mi_col, mi_row)
.as_int;
#else // CONFIG_GLOBAL_MOTION
frame_mv[ZEROMV][ref_frame].as_int = 0;
@@ -9619,9 +9612,8 @@
frame_mv[NEW_NEWMV][ref_frame].as_int = INVALID_MV;
#if CONFIG_GLOBAL_MOTION
frame_mv[ZERO_ZEROMV][ref_frame].as_int =
- gm_get_motion_vector(
- &cm->global_motion[ref_frame], cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize), block_center_y(mi_row, bsize))
+ gm_get_motion_vector(&cm->global_motion[ref_frame],
+ cm->allow_high_precision_mv, bsize, mi_col, mi_row)
.as_int;
#else // CONFIG_GLOBAL_MOTION
frame_mv[ZERO_ZEROMV][ref_frame].as_int = 0;
@@ -9728,9 +9720,8 @@
mode_skip_mask[ALTREF_FRAME] = ~INTER_NEAREST_NEAR_ZERO;
#if CONFIG_GLOBAL_MOTION
zeromv.as_int = gm_get_motion_vector(&cm->global_motion[ALTREF_FRAME],
- cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize),
- block_center_y(mi_row, bsize))
+ cm->allow_high_precision_mv, bsize,
+ mi_col, mi_row)
.as_int;
#else
zeromv.as_int = 0;
@@ -10924,16 +10915,14 @@
const uint8_t rf_type = av1_ref_frame_type(best_mbmode.ref_frame);
#endif // CONFIG_REF_MV
#if CONFIG_GLOBAL_MOTION
- zeromv[0].as_int = gm_get_motion_vector(&cm->global_motion[refs[0]],
- cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize),
- block_center_y(mi_row, bsize))
- .as_int;
+ zeromv[0].as_int =
+ gm_get_motion_vector(&cm->global_motion[refs[0]],
+ cm->allow_high_precision_mv, bsize, mi_col, mi_row)
+ .as_int;
zeromv[1].as_int = comp_pred_mode
? gm_get_motion_vector(&cm->global_motion[refs[1]],
cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize),
- block_center_y(mi_row, bsize))
+ bsize, mi_col, mi_row)
.as_int
: 0;
#else
@@ -11045,17 +11034,14 @@
#if CONFIG_GLOBAL_MOTION
zeromv[0].as_int = gm_get_motion_vector(&cm->global_motion[refs[0]],
cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize),
- block_center_y(mi_row, bsize))
+ bsize, mi_col, mi_row)
.as_int;
- zeromv[1].as_int =
- comp_pred_mode
- ? gm_get_motion_vector(&cm->global_motion[refs[1]],
- cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize),
- block_center_y(mi_row, bsize))
- .as_int
- : 0;
+ zeromv[1].as_int = comp_pred_mode
+ ? gm_get_motion_vector(&cm->global_motion[refs[1]],
+ cm->allow_high_precision_mv,
+ bsize, mi_col, mi_row)
+ .as_int
+ : 0;
#else
zeromv[0].as_int = 0;
zeromv[1].as_int = 0;
@@ -11099,13 +11085,11 @@
best_mbmode.ref_frame[1] };
zeromv[0].as_int = gm_get_motion_vector(&cm->global_motion[refs[0]],
cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize),
- block_center_y(mi_row, bsize))
+ bsize, mi_col, mi_row)
.as_int;
zeromv[1].as_int = gm_get_motion_vector(&cm->global_motion[refs[1]],
cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize),
- block_center_y(mi_row, bsize))
+ bsize, mi_col, mi_row)
.as_int;
lower_mv_precision(&zeromv[0].as_mv, cm->allow_high_precision_mv);
lower_mv_precision(&zeromv[1].as_mv, cm->allow_high_precision_mv);
@@ -11266,9 +11250,8 @@
mbmi->ref_frame[1] = NONE_FRAME;
#if CONFIG_GLOBAL_MOTION
mbmi->mv[0].as_int =
- gm_get_motion_vector(
- &cm->global_motion[mbmi->ref_frame[0]], cm->allow_high_precision_mv,
- block_center_x(mi_col, bsize), block_center_y(mi_row, bsize))
+ gm_get_motion_vector(&cm->global_motion[mbmi->ref_frame[0]],
+ cm->allow_high_precision_mv, bsize, mi_col, mi_row)
.as_int;
#else // CONFIG_GLOBAL_MOTION
mbmi->mv[0].as_int = 0;