No second MV search for speed >= 3
Turned off second MV search for speed >= 3 to speed up the encoder.
The overall speed/quality tradeoff is good.
Borg test results:
avg_psnr: ovr_psnr: ssim: speedup:
speed 3:
hdres2 0.077 0.063 0.071 5.3%
midres2 0.184 0.180 0.076 5.1%
speed 5:
hdres2 0.093 0.096 0.096 6.2%
midres2 0.192 0.206 0.143 5.6%
STATS_CHANGED
Change-Id: Ib7e6de8376302506a7821e05b4b5b0c1d39f59b6
diff --git a/av1/encoder/motion_search_facade.c b/av1/encoder/motion_search_facade.c
index bad8e65..14050f2 100644
--- a/av1/encoder/motion_search_facade.c
+++ b/av1/encoder/motion_search_facade.c
@@ -303,7 +303,8 @@
case SIMPLE_TRANSLATION:
if (cpi->sf.mv_sf.use_accurate_subpel_search) {
const int try_second = second_best_mv.as_int != INVALID_MV &&
- second_best_mv.as_int != best_mv->as_int;
+ second_best_mv.as_int != best_mv->as_int &&
+ !cpi->sf.mv_sf.disable_second_mv;
mv_search_params->find_fractional_mv_step(
xd, cm, &ms_params, subpel_start_mv, &best_mv->as_mv, &dis,
&x->pred_sse[ref], fractional_ms_list);
@@ -757,7 +758,7 @@
mask_stride, rate_mv, which);
} else if (which == 2) {
av1_joint_motion_search(cpi, x, bsize, tmp_mv, mask, mask_stride, rate_mv,
- 1);
+ !cpi->sf.mv_sf.disable_second_mv);
}
}
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index bc71669..d57fb43 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -855,6 +855,7 @@
sf->mv_sf.full_pixel_search_level = 1;
sf->mv_sf.subpel_search_method = SUBPEL_TREE_PRUNED;
sf->mv_sf.search_method = DIAMOND;
+ sf->mv_sf.disable_second_mv = 1;
sf->inter_sf.mv_cost_upd_level = 1;
sf->inter_sf.disable_onesided_comp = 1;
@@ -1441,6 +1442,7 @@
mv_sf->use_fullpel_costlist = 0;
mv_sf->use_downsampled_sad = 0;
mv_sf->disable_extensive_joint_motion_search = 0;
+ mv_sf->disable_second_mv = 0;
}
static AOM_INLINE void init_inter_sf(INTER_MODE_SPEED_FEATURES *inter_sf) {
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index ba7c472..1cf3052 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -575,7 +575,7 @@
int disable_extensive_joint_motion_search;
// Enable second best mv check in joint mv search.
- int enable_second_mv;
+ int disable_second_mv;
} MV_SPEED_FEATURES;
typedef struct INTER_MODE_SPEED_FEATURES {
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 183f3c1..38345b4 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -711,7 +711,8 @@
int_mv tmp_mv[2] = { single_mv[rf_idx0], single_mv[rf_idx1] };
int rate_mv;
- av1_joint_motion_search(cpi, x, bsize, tmp_mv, NULL, 0, &rate_mv, 1);
+ av1_joint_motion_search(cpi, x, bsize, tmp_mv, NULL, 0, &rate_mv,
+ !cpi->sf.mv_sf.disable_second_mv);
for (int ref = 0; ref < 2; ++ref) {
struct buf_2d ref_buf = { NULL, ref_frame_ptr[ref]->y_buffer,