Commit 701387bbf0 for aom
commit 701387bbf03058000315cec0e6d3fe2bfea0cadf
Author: Lin Zheng <linzhen@google.com>
Date: Mon Mar 30 15:08:03 2026 +0000
Tweak the gf_length decision
Tweak the condition for videos starting with frozen frames
Change-Id: I3398df965c0e3f83b42f0a9b191fd2f7737ca79d
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index 3c02b8726f..52b92b24b2 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -2053,11 +2053,20 @@ static void calculate_gf_length(AV1_COMP *cpi, int max_gop_length,
const int last_frame = regions[num_regions - 1].last - offset;
// score of how much the arf helps the whole GOP
double base_score = 0.0;
+ int count_base = 0;
+ bool static_frames = false;
+
// Accumulate base_score in
for (int j = cur_start + 1; j < cur_start + min_shrink_int; j++) {
if (stats + j >= twopass->stats_buf_ctx->stats_in_end) break;
base_score = (base_score + 1.0) * stats[j].cor_coeff;
+ count_base++;
+ }
+
+ if (count_base && base_score / count_base > 0.992) {
+ static_frames = true;
}
+
int met_blending = 0; // Whether we have met blending areas before
int last_blending = 0; // Whether the previous frame if blending
for (int j = cur_start + min_shrink_int; j <= cur_last; j++) {
@@ -2108,7 +2117,9 @@ static void calculate_gf_length(AV1_COMP *cpi, int max_gop_length,
AOMMAX(stats[n].intra_error, 0.001)));
}
- if (this_score > best_score) {
+ // Slightly relax the condition for videos starting with frozen
+ // frames.
+ if (this_score + (static_frames ? 0.5 : 0) > best_score) {
best_score = this_score;
best_j = j;
}