Use MV_COST_NONE in subpel search of TPL stage In the TPL stage, MV cost is not considered during the sub-pel motion search for the NEWMV mode. However, during the sub-pel motion search for the NEW_NEWMV mode, the entropy rate of the MV was being used as the cost. This patch applies MV_COST_NONE to the subpel search for the NEW_NEWMV mode in the tpl stage to ensure consistency with the NEWMV mode. STATS_CHANGED for speed = 0, 1 Change-Id: I556b2efc76cfb5218d0cb77fbc5656c77847d705
diff --git a/av1/encoder/motion_search_facade.c b/av1/encoder/motion_search_facade.c index 575ac98..68e865d 100644 --- a/av1/encoder/motion_search_facade.c +++ b/av1/encoder/motion_search_facade.c
@@ -546,7 +546,8 @@ int av1_joint_motion_search(const AV1_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, int_mv *cur_mv, const uint8_t *mask, int mask_stride, int *rate_mv, - int allow_second_mv, int joint_me_num_refine_iter) { + int allow_second_mv, int joint_me_num_refine_iter, + bool use_subpel_mv_cost_none) { const AV1_COMMON *const cm = &cpi->common; const int num_planes = av1_num_planes(cm); const int pw = block_size_wide[bsize]; @@ -708,6 +709,9 @@ av1_set_ms_compound_refs(&ms_params.var_params.ms_buffers, second_pred, mask, mask_stride, id); ms_params.forced_stop = EIGHTH_PEL; + if (use_subpel_mv_cost_none) { + ms_params.mv_cost_params.mv_cost_type = MV_COST_NONE; + } MV start_mv = get_mv_from_fullmv(&best_mv.as_fullmv); assert(av1_is_subpelmv_in_range(&ms_params.mv_limits, start_mv)); bestsme = cpi->mv_search_params.find_fractional_mv_step( @@ -948,7 +952,8 @@ : NUM_JOINT_ME_REFINE_ITER; av1_joint_motion_search(cpi, x, bsize, tmp_mv, mask, mask_stride, rate_mv, !cpi->sf.mv_sf.disable_second_mv, - joint_me_num_refine_iter); + joint_me_num_refine_iter, + /*use_subpel_mv_cost_none=*/false); } }
diff --git a/av1/encoder/motion_search_facade.h b/av1/encoder/motion_search_facade.h index 402fdf1..e5b4dd2 100644 --- a/av1/encoder/motion_search_facade.h +++ b/av1/encoder/motion_search_facade.h
@@ -40,7 +40,8 @@ int av1_joint_motion_search(const AV1_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, int_mv *cur_mv, const uint8_t *mask, int mask_stride, int *rate_mv, - int allow_second_mv, int joint_me_num_refine_iter); + int allow_second_mv, int joint_me_num_refine_iter, + bool use_subpel_mv_cost_none); int av1_interinter_compound_motion_search(const AV1_COMP *const cpi, MACROBLOCK *x,
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c index d4881c9..9131c16 100644 --- a/av1/encoder/tpl_model.c +++ b/av1/encoder/tpl_model.c
@@ -981,7 +981,8 @@ int rate_mv; av1_joint_motion_search(cpi, x, bsize, tmp_mv, NULL, 0, &rate_mv, !cpi->sf.mv_sf.disable_second_mv, - NUM_JOINT_ME_REFINE_ITER); + NUM_JOINT_ME_REFINE_ITER, + /*use_subpel_mv_cost_none=*/true); for (int ref = 0; ref < 2; ++ref) { struct buf_2d ref_buf = { NULL, ref_frame_ptr[ref]->y_buffer,