Tune sf 'use_bsize_dependent_search_method' for speed 6
This patch introduces more block size levels for the
'use_bsize_dependent_search_method' speed feature. The speed feature
level is chosen based on the frame resolution.
Encoder performance results averaged over all resolutions are as
follows:
Encoder Instruction BD-Rate Loss(%)
cpu Count Reduction(%) avg.psnr ovr.psnr ssim vmaf vmaf_neg
6 -1.40 -0.3003 -0.3055 -0.3463 -0.3999 -0.3844
STATS_CHANGED for speed=6
Change-Id: Iaa81b011701d6cd4bb8cf64e414eacee1341b64f
diff --git a/av1/encoder/motion_search_facade.h b/av1/encoder/motion_search_facade.h
index a1cbb77..5e7f417 100644
--- a/av1/encoder/motion_search_facade.h
+++ b/av1/encoder/motion_search_facade.h
@@ -123,10 +123,17 @@
const int sf_blk_search_method = mv_sf->use_bsize_dependent_search_method;
const int min_dim = AOMMIN(block_size_wide[bsize], block_size_high[bsize]);
const int qband = x->qindex >> (QINDEX_BITS - 2);
- const bool use_faster_search_method =
- (sf_blk_search_method == 1 && min_dim >= 32) ||
- (sf_blk_search_method >= 2 && min_dim >= 16 &&
- x->content_state_sb.source_sad_nonrd <= kMedSad && qband < 3);
+ const int min_dim_th[4] = { 128, 64, 32, 16 };
+ bool use_faster_search_method = false;
+
+ if (sf_blk_search_method >= 1 && sf_blk_search_method <= 3) {
+ use_faster_search_method =
+ (min_dim >= min_dim_th[sf_blk_search_method - 1]);
+ } else if (sf_blk_search_method == 4) {
+ use_faster_search_method =
+ (min_dim >= min_dim_th[sf_blk_search_method - 1] &&
+ x->content_state_sb.source_sad_nonrd <= kMedSad && qband < 3);
+ }
if (use_faster_search_method) {
search_method = av1_get_faster_search_method(search_method);
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 2f96b2c..ef45021 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -560,7 +560,7 @@
// target image quality is very low.
sf->part_sf.default_max_partition_size = BLOCK_32X32;
- sf->mv_sf.use_bsize_dependent_search_method = 1;
+ sf->mv_sf.use_bsize_dependent_search_method = 3;
sf->mv_sf.intrabc_search_level = 1;
sf->tx_sf.tx_type_search.winner_mode_tx_type_pruning = 3;
@@ -1050,6 +1050,12 @@
sf->inter_sf.prune_ref_mv_idx_search = 1;
}
+ if (is_720p_or_larger) {
+ sf->mv_sf.use_bsize_dependent_search_method = 1;
+ } else {
+ sf->mv_sf.use_bsize_dependent_search_method = 2;
+ }
+
if (!is_720p_or_larger) {
sf->tx_sf.tx_type_search.fast_inter_tx_type_prob_thresh =
is_boosted_arf2_bwd_type ? 450 : 150;
@@ -1458,7 +1464,6 @@
sf->part_sf.prune_part4_search = 3;
sf->mv_sf.simple_motion_subpel_force_stop = FULL_PEL;
- sf->mv_sf.use_bsize_dependent_search_method = 1;
sf->tpl_sf.gop_length_decision_method = 3;
@@ -2134,7 +2139,7 @@
sf->rt_sf.var_part_based_on_qidx = 4;
sf->rt_sf.partition_direct_merging = 1;
sf->rt_sf.prune_compoundmode_with_singlemode_var = false;
- sf->mv_sf.use_bsize_dependent_search_method = 2;
+ sf->mv_sf.use_bsize_dependent_search_method = 4;
sf->rt_sf.prune_hv_pred_modes_using_src_sad = true;
}
if (speed >= 9) {
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index c73cea1..cae217f 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -861,7 +861,9 @@
SEARCH_METHODS search_method;
// Enable the use of faster, less accurate mv search method
- // 0: disable, 1: if bsize >= BLOCK_32X32, 2: based on bsize, SAD and qp
+ // 0: Disable
+ // 1 - 3: Disable for larger bsize
+ // 4: Based on bsize, SAD and qp
// TODO(chiyotsai@google.com): Take the clip's resolution and mv activity into
// account.
int use_bsize_dependent_search_method;