Commit ca6eb13f02 for aom
commit ca6eb13f021a66f59518b0a70480384663f3f4c3
Author: Satheesh Kumar <satheesh.kumar@ittiam.com>
Date: Thu Jan 22 17:32:35 2026 +0530
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 a1cbb77a79..5e7f4178e8 100644
--- a/av1/encoder/motion_search_facade.h
+++ b/av1/encoder/motion_search_facade.h
@@ -123,10 +123,17 @@ static inline SEARCH_METHODS av1_get_default_mv_search_method(
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 2f96b2ca51..ef450213de 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -560,7 +560,7 @@ static void set_allintra_speed_features_framesize_independent(
// 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 @@ static void set_good_speed_feature_framesize_dependent(
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 @@ static void set_good_speed_features_framesize_independent(
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 @@ static void set_rt_speed_features_framesize_independent(AV1_COMP *cpi,
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 c73cea1f0b..cae217f9a4 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -861,7 +861,9 @@ typedef struct MV_SPEED_FEATURES {
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;