Commit 577e360c9a for aom
commit 577e360c9a66b893750c1d196e45f6f4ef589ae2
Author: Lin Zheng <linzhen@google.com>
Date: Tue Jun 16 18:05:46 2026 +0000
Tweak screen content tools detection algorithm
Improve the screen content tools decision algorithms to catch some
corner cases. For ugc1080p testset, the coding efficiency gain vs. speed
trade-off are as follows, and no degradations on other testsets.
ssim psnr1411 vmaf vmaf_neg uvqone encoding_spdup
speed=0 -0.798 -0.79 -0.72 -0.868 -1 -3.989
speed=1 -0.985 -0.998 -0.986 -1.106 -0.891 -2.768
speed=2 -1.224 -1.156 -1.123 -1.218 -1.146 -1.681
speed=3 -0.803 -0.737 -0.66 -0.762 -0.953 -0.505
speed=4 -0.838 -0.785 -0.785 -0.889 -1.762 -0.001
STATS_CHANGED
Change-Id: Id076ec753931d6c9a343c3a349be06f8fb974278
diff --git a/av1/encoder/encoder_utils.c b/av1/encoder/encoder_utils.c
index 47d6921aac..7e1db0c2dd 100644
--- a/av1/encoder/encoder_utils.c
+++ b/av1/encoder/encoder_utils.c
@@ -1157,11 +1157,16 @@ static void screen_content_tools_determination(
const int psnr_diff_is_large = (psnr_diff > STRICT_PSNR_DIFF_THRESH);
const int ratio_is_large =
((palette_ratio >= 0.0001) && ((psnr_diff / palette_ratio) > 4));
- const int is_sc_encoding_much_better = (psnr_diff_is_large || ratio_is_large);
+ const int ratio_is_large_2 = ((psnr_diff > 0.1) && (palette_ratio >= 0.05) &&
+ ((psnr_diff / palette_ratio) > 2));
+ const int is_sc_encoding_much_better =
+ (psnr_diff_is_large || ratio_is_large || ratio_is_large_2);
+
if (is_sc_encoding_much_better) {
// Use screen content tools, if we get coding gain.
features->allow_screen_content_tools = 1;
- features->allow_intrabc = cpi->intrabc_used;
+ features->allow_intrabc =
+ (allow_intrabc_orig_decision || cpi->intrabc_used);
cpi->use_screen_content_tools = 1;
cpi->is_screen_content_type = 1;
} else {