Better block center in gm_get_motion_vector fn
Also supports homography models for future experiments.
Change-Id: I4510540f54133e063891ed491c95c087222f7810
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index d9e1b27..7b84fd2 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -5046,7 +5046,8 @@
gm_get_motion_vector(
&cpi->common.global_motion[mbmi->ref_frame[ref]],
cpi->common.allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2, mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, mbmi->sb_type),
+ block_center_y(mi_row, mbmi->sb_type))
.as_int;
thismvcost += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[ref]);
#else
@@ -5104,14 +5105,14 @@
this_mv[0].as_int =
gm_get_motion_vector(&cpi->common.global_motion[mbmi->ref_frame[0]],
cpi->common.allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, mbmi->sb_type),
+ block_center_y(mi_row, mbmi->sb_type))
.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,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, mbmi->sb_type),
+ block_center_y(mi_row, mbmi->sb_type))
.as_int;
thismvcost += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[0]) +
GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[1]);
@@ -5382,8 +5383,8 @@
zeromv[cur_frm].as_int =
gm_get_motion_vector(&cpi->common.global_motion[ref_frames[cur_frm]],
cpi->common.allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize),
+ block_center_y(mi_row, bsize))
.as_int;
else
#endif // CONFIG_GLOBAL_MOTION
@@ -5843,9 +5844,10 @@
#endif // CONFIG_EXT_INTER
#if CONFIG_GLOBAL_MOTION
frame_mv[ZEROMV][frame].as_int =
- gm_get_motion_vector(
- &cm->global_motion[frame], cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2, mi_row * MI_SIZE + MI_SIZE / 2)
+ 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))
.as_int;
#else // CONFIG_GLOBAL_MOTION
frame_mv[ZEROMV][frame].as_int = 0;
@@ -5878,8 +5880,8 @@
frame_mv[ZERO_ZEROMV][frame].as_int =
gm_get_motion_vector(&cm->global_motion[frame],
cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, mbmi->sb_type),
+ block_center_y(mi_row, mbmi->sb_type))
.as_int;
#else
frame_mv[ZERO_ZEROMV][frame].as_int = 0;
@@ -9568,7 +9570,7 @@
frame_mv[ZEROMV][ref_frame].as_int =
gm_get_motion_vector(
&cm->global_motion[ref_frame], cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2, mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize), block_center_y(mi_row, bsize))
.as_int;
#else // CONFIG_GLOBAL_MOTION
frame_mv[ZEROMV][ref_frame].as_int = 0;
@@ -9580,7 +9582,7 @@
frame_mv[ZERO_ZEROMV][ref_frame].as_int =
gm_get_motion_vector(
&cm->global_motion[ref_frame], cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2, mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize), block_center_y(mi_row, bsize))
.as_int;
#else // CONFIG_GLOBAL_MOTION
frame_mv[ZERO_ZEROMV][ref_frame].as_int = 0;
@@ -9684,8 +9686,8 @@
#if CONFIG_GLOBAL_MOTION
zeromv.as_int = gm_get_motion_vector(&cm->global_motion[ALTREF_FRAME],
cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize),
+ block_center_y(mi_row, bsize))
.as_int;
#else
zeromv.as_int = 0;
@@ -10853,17 +10855,16 @@
#if CONFIG_GLOBAL_MOTION
zeromv[0].as_int = gm_get_motion_vector(&cm->global_motion[refs[0]],
cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize),
+ block_center_y(mi_row, bsize))
.as_int;
- zeromv[1].as_int =
- comp_pred_mode
- ? gm_get_motion_vector(&cm->global_motion[refs[1]],
- cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
- .as_int
- : 0;
+ 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;
#else
zeromv[0].as_int = 0;
zeromv[1].as_int = 0;
@@ -10973,15 +10974,15 @@
#if CONFIG_GLOBAL_MOTION
zeromv[0].as_int = gm_get_motion_vector(&cm->global_motion[refs[0]],
cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize),
+ block_center_y(mi_row, bsize))
.as_int;
zeromv[1].as_int =
comp_pred_mode
? gm_get_motion_vector(&cm->global_motion[refs[1]],
cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize),
+ block_center_y(mi_row, bsize))
.as_int
: 0;
#else
@@ -11027,13 +11028,13 @@
best_mbmode.ref_frame[1] };
zeromv[0].as_int = gm_get_motion_vector(&cm->global_motion[refs[0]],
cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize),
+ block_center_y(mi_row, bsize))
.as_int;
zeromv[1].as_int = gm_get_motion_vector(&cm->global_motion[refs[1]],
cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2,
- mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize),
+ block_center_y(mi_row, bsize))
.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);
@@ -11196,7 +11197,7 @@
mbmi->mv[0].as_int =
gm_get_motion_vector(
&cm->global_motion[mbmi->ref_frame[0]], cm->allow_high_precision_mv,
- mi_col * MI_SIZE + MI_SIZE / 2, mi_row * MI_SIZE + MI_SIZE / 2)
+ block_center_x(mi_col, bsize), block_center_y(mi_row, bsize))
.as_int;
#else // CONFIG_GLOBAL_MOTION
mbmi->mv[0].as_int = 0;