Commit c8db5b2007 for aom
commit c8db5b2007925bc8044aec0546aa9296bce2c5b9
Author: Mudassir Galaganath <mudassir.galaganath@ittiam.com>
Date: Fri Jun 5 18:25:31 2026 +0530
lc-dec: Extend sf gm_erroradv_tr_level to shorts
This patch extends the sf gm_erroradv_tr_level to shorts (vertical
videos) by adding an intermediate level=1 (erroradv_tr= 0.3).
Existing level=1 (erroradv_tr= 0.2) for VOD test set has been made
as level=2.
Performance results of encoder and decoder for the streams
generated with low complexity decode enabled.
Decode Time BD-Rate Loss(%)
cpu Reduction(%) avg.psnr ssim vmaf vmaf_neg uvq_1p5
1 0.745 0.0789 0.0710 0.0916 0.0930 0.2183
2 0.916 0.0829 0.0930 0.1317 0.1066 0.0262
3 1.147 0.0938 0.1144 0.1114 0.1181 -0.0033
STATS_CHANGED for low complexity decode, shorts
Change-Id: I6a02be5d5fae7de27184874eecdb25cf4891052a
diff --git a/av1/encoder/global_motion.h b/av1/encoder/global_motion.h
index 97feff41f7..0d25c7079c 100644
--- a/av1/encoder/global_motion.h
+++ b/av1/encoder/global_motion.h
@@ -77,7 +77,7 @@ void av1_convert_model_to_params(const double *params,
WarpedMotionParams *model);
// Criteria for accepting a global motion model
-static const double erroradv_tr[2] = { 0.65, 0.2 };
+static const double erroradv_tr[3] = { 0.65, 0.3, 0.2 };
static const double erroradv_prod_tr = 20000;
// Early exit threshold for global motion refinement
diff --git a/av1/encoder/global_motion_facade.c b/av1/encoder/global_motion_facade.c
index df625c0fa1..4fdad0bedb 100644
--- a/av1/encoder/global_motion_facade.c
+++ b/av1/encoder/global_motion_facade.c
@@ -94,7 +94,7 @@ static inline void compute_global_motion_for_ref_frame(
int gm_erroradv_tr_level = cpi->sf.gm_sf.gm_erroradv_tr_level;
bool mem_alloc_failed = false;
- assert(gm_erroradv_tr_level < 2);
+ assert(gm_erroradv_tr_level < 3);
// Select the best model based on fractional error reduction.
// By initializing this to erroradv_tr, the same logic which is used to
// select the best model will automatically filter out any model which
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 0ce15c84bf..d4e1f011de 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -641,6 +641,7 @@ static void set_good_speed_features_lc_dec_framesize_dependent(
(update_type == LF_UPDATE || update_type == OVERLAY_UPDATE ||
update_type == INTNL_OVERLAY_UPDATE);
if (leaf_and_overlay_frames) sf->gm_sf.gm_search_type = GM_DISABLE_SEARCH;
+ sf->gm_sf.gm_erroradv_tr_level = 1;
sf->hl_sf.ref_frame_mvs_lvl = 2;
@@ -665,7 +666,7 @@ static void set_good_speed_features_lc_dec_framesize_dependent(
// Speed features for regular videos
if (!is_vertical_video && is_between_720p_and_1080p) {
- sf->gm_sf.gm_erroradv_tr_level = 1;
+ sf->gm_sf.gm_erroradv_tr_level = 2;
sf->hl_sf.ref_frame_mvs_lvl = 1;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index ca885c7800..da6f18b655 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -616,7 +616,8 @@ typedef struct GLOBAL_MOTION_SPEED_FEATURES {
int num_refinement_steps;
// Error advantage threshold level used to determine whether global motion
- // compensation should be enabled
+ // compensation should be enabled. It Can take values 0 - 2 increasing
+ // aggressiveness of skipping GM in order.
int gm_erroradv_tr_level;
} GLOBAL_MOTION_SPEED_FEATURES;