Extend joint motion search range
Allow slightly wider full pixel motion search range for frame
distance weighted compound mode to cover the fact that single
reference frame mode's motion vector may not fully reflect the
effective region for joint compound mode.
The compression performance is improved in speed 1 150 frames vbr
setting:
avg PSNR overall PSNR SSIM
lowres -0.140 -0.143 -0.127
midres2 -0.193 -0.194 -0.190
ugc480p -0.210 -0.209 -0.297
STATS_CHANGED
Change-Id: Ibf752e7c6610c6504b7db8b79726f3efccd2575a
diff --git a/av1/encoder/mcomp.c b/av1/encoder/mcomp.c
index e6a8033..d2d82af 100644
--- a/av1/encoder/mcomp.c
+++ b/av1/encoder/mcomp.c
@@ -1646,10 +1646,6 @@
MARK_MV_INVALID(second_best_mv);
}
- assert(ms_params->ms_buffers.second_pred == NULL &&
- ms_params->ms_buffers.mask == NULL &&
- "av1_full_pixel_search does not support compound pred");
-
if (cost_list) {
cost_list[0] = INT_MAX;
cost_list[1] = INT_MAX;
diff --git a/av1/encoder/motion_search_facade.c b/av1/encoder/motion_search_facade.c
index e545144..319858f 100644
--- a/av1/encoder/motion_search_facade.c
+++ b/av1/encoder/motion_search_facade.c
@@ -420,8 +420,10 @@
// Make motion search params
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
+ const search_site_config *src_search_sites =
+ cpi->mv_search_params.search_site_cfg[SS_CFG_SRC];
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize,
- &ref_mv[id].as_mv, NULL,
+ &ref_mv[id].as_mv, src_search_sites,
/*fine_search_interval=*/0);
av1_set_ms_compound_refs(&full_ms_params.ms_buffers, second_pred, mask,
@@ -431,8 +433,8 @@
const FULLPEL_MV start_fullmv = get_fullmv_from_mv(&cur_mv[id].as_mv);
// Small-range full-pixel motion search.
- bestsme = av1_refining_search_8p_c(&full_ms_params, start_fullmv,
- &best_mv.as_fullmv);
+ bestsme = av1_full_pixel_search(start_fullmv, &full_ms_params, 5, NULL,
+ &best_mv.as_fullmv, NULL);
if (bestsme < INT_MAX) {
bestsme = av1_get_mvpred_compound_var(
@@ -548,8 +550,10 @@
// Make motion search params
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
+ const search_site_config *src_search_sites =
+ cpi->mv_search_params.search_site_cfg[SS_CFG_SRC];
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize,
- &ref_mv.as_mv, NULL,
+ &ref_mv.as_mv, src_search_sites,
/*fine_search_interval=*/0);
av1_set_ms_compound_refs(&full_ms_params.ms_buffers, second_pred, mask,
@@ -559,8 +563,8 @@
const FULLPEL_MV start_fullmv = get_fullmv_from_mv(this_mv);
// Small-range full-pixel motion search.
- bestsme = av1_refining_search_8p_c(&full_ms_params, start_fullmv,
- &best_mv.as_fullmv);
+ bestsme = av1_full_pixel_search(start_fullmv, &full_ms_params, 5, NULL,
+ &best_mv.as_fullmv, NULL);
if (bestsme < INT_MAX) {
bestsme = av1_get_mvpred_compound_var(