Prune inter modes aggressively based on tpl stats
The speed feature 'prune_inter_modes_based_on_tpl'
is made more agressive for speed 6.
Instruction Count BD-Rate Loss(%)
cpu-used Reduction(%) avg.psnr ovr.psnr ssim
6 2.108 0.2426 0.2520 0.2241
STATS_CHANGED
Change-Id: I5e4c67530053068c417470373a0d3d5e21d42fa8
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 3f70dae..2d0553b 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2197,10 +2197,9 @@
PruneInfoFromTpl *inter_cost_info_from_tpl, const int *refs, int ref_mv_idx,
const PREDICTION_MODE this_mode, int prune_mode_level) {
const int have_newmv = have_newmv_in_inter_mode(this_mode);
- if ((prune_mode_level < 3) && have_newmv) return 0;
+ if ((prune_mode_level < 2) && have_newmv) return 0;
- static const int prune_level_idx[3] = { 0, 1, 1 };
- const int prune_level = prune_level_idx[prune_mode_level - 1];
+ const int prune_level = prune_mode_level - 1;
int64_t cur_inter_cost;
const int is_globalmv =
@@ -2212,8 +2211,8 @@
// conservative pruning which is set based on ref_mv_idx and speed feature.
// 'prune_index' 0, 1, 2 corresponds to ref_mv indices 0, 1 and 2. prune_index
// 3 corresponds to GLOBALMV/GLOBAL_GLOBALMV
- static const int tpl_inter_mode_prune_mul_factor[2][MAX_REF_MV_SEARCH + 1] = {
- { 3, 3, 3, 2 }, { 3, 2, 2, 2 }
+ static const int tpl_inter_mode_prune_mul_factor[3][MAX_REF_MV_SEARCH + 1] = {
+ { 6, 6, 6, 4 }, { 6, 4, 4, 4 }, { 5, 4, 4, 4 }
};
const int is_comp_pred = (refs[1] > INTRA_FRAME);
@@ -2235,7 +2234,7 @@
if (cur_inter_cost >
((tpl_inter_mode_prune_mul_factor[prune_level][prune_index] *
best_inter_cost) >>
- 1))
+ 2))
return 1;
return 0;
}
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index c38d240..3ad2655 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -567,7 +567,7 @@
sf->inter_sf.alt_ref_search_fp = 1;
sf->inter_sf.txfm_rd_gate_level = boosted ? 0 : 4;
- sf->inter_sf.prune_inter_modes_based_on_tpl = boosted ? 0 : 3;
+ sf->inter_sf.prune_inter_modes_based_on_tpl = boosted ? 0 : 2;
sf->inter_sf.prune_compound_using_neighbors = 2;
sf->inter_sf.prune_comp_using_best_single_mode_ref = 2;
sf->inter_sf.disable_smooth_interintra = 1;
@@ -642,6 +642,8 @@
}
if (speed >= 6) {
+ sf->inter_sf.prune_inter_modes_based_on_tpl = boosted ? 0 : 3;
+
sf->mv_sf.simple_motion_subpel_force_stop = FULL_PEL;
sf->mv_sf.use_bsize_dependent_search_method = 1;