Extend skip_newmv_in_drl to speed 4
This gave a small speedup for res <= 480p at speed 4.
avg_psnr: ovr_psnr: ssim: speed:
lowres2: 0.021 0.022 -0.005 0.585
midres2: 0.017 -0.019 -0.003 0.602
STATS_CHANGED
Change-Id: I9b722aa4ca36c7fd81bed578ac4095a2d567f833
diff --git a/av1/encoder/motion_search_facade.c b/av1/encoder/motion_search_facade.c
index 048298d..07485bd 100644
--- a/av1/encoder/motion_search_facade.c
+++ b/av1/encoder/motion_search_facade.c
@@ -282,9 +282,12 @@
// Terminate the evaluation of current ref_mv_idx based on bestsme and
// drl_cost.
- if (cpi->sf.inter_sf.skip_newmv_in_drl == 3 &&
- mode_info[prev_ref_idx].full_mv_bestsme <
- mode_info[ref_mv_idx].full_mv_bestsme &&
+ const int psme = mode_info[prev_ref_idx].full_mv_bestsme;
+ if (psme == INT_MAX) continue;
+ const int thr =
+ cpi->sf.inter_sf.skip_newmv_in_drl == 3 ? (psme + (psme >> 2)) : psme;
+ if (cpi->sf.inter_sf.skip_newmv_in_drl >= 3 &&
+ mode_info[ref_mv_idx].full_mv_bestsme > thr &&
mode_info[prev_ref_idx].drl_cost < mode_info[ref_mv_idx].drl_cost) {
best_mv->as_int = INVALID_MV;
return;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 0973f48..d7eac2b 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -681,6 +681,7 @@
}
sf->inter_sf.prune_obmc_prob_thresh = INT_MAX;
+ if (is_480p_or_lesser) sf->inter_sf.skip_newmv_in_drl = 3;
if (is_720p_or_larger)
sf->hl_sf.recode_tolerance = 32;
@@ -698,7 +699,7 @@
}
if (is_720p_or_larger) sf->hl_sf.recode_tolerance = 40;
- sf->inter_sf.skip_newmv_in_drl = 3;
+ sf->inter_sf.skip_newmv_in_drl = 4;
}
if (speed >= 6) {
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 6772bd2..e4ff3d2 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -678,8 +678,8 @@
// other ref_mv.
// The speed feature equaling 1 means using subpel mv in the comparison.
// The speed feature equaling 2 means using fullpel mv in the comparison.
- // If the speed feature equals 3, skip the current ref_mv in NEW_MV mode based
- // on known full_mv bestsme and drl cost.
+ // If the speed feature >= 3, skip the current ref_mv in NEW_MV mode based on
+ // known full_mv bestsme and drl cost.
int skip_newmv_in_drl;
// This speed feature checks duplicate ref MVs among NEARESTMV, NEARMV,