Use sqrt of noise ratio for gop partitioning.
Change-Id: I79209449327cba9434e8d5a3e5f5059762a2ed86
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index 0a80915..39cd36b 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -2043,8 +2043,9 @@
temp_accu_coeff *= stats[n].cor_coeff;
this_score +=
temp_accu_coeff *
- (1 - stats[n].noise_var /
- AOMMAX(regions[this_reg].avg_intra_err, 0.001));
+ sqrt(AOMMAX(0.5,
+ 1 - stats[n].noise_var /
+ AOMMAX(stats[n].intra_error, 0.001)));
count_f++;
}
// preceding frames
@@ -2054,8 +2055,9 @@
temp_accu_coeff *= stats[n].cor_coeff;
this_score +=
temp_accu_coeff *
- (1 - stats[n].noise_var /
- AOMMAX(regions[this_reg].avg_intra_err, 0.001));
+ sqrt(AOMMAX(0.5,
+ 1 - stats[n].noise_var /
+ AOMMAX(stats[n].intra_error, 0.001)));
}
if (this_score > best_score) {
diff --git a/av1/qmode_rc/ratectrl_qmode.cc b/av1/qmode_rc/ratectrl_qmode.cc
index 0a2892d..9dfdebc 100644
--- a/av1/qmode_rc/ratectrl_qmode.cc
+++ b/av1/qmode_rc/ratectrl_qmode.cc
@@ -630,8 +630,10 @@
temp_accu_coeff *= stats_list[order_index + n].cor_coeff;
this_score +=
temp_accu_coeff *
- (1 - stats_list[order_index + n].noise_var /
- AOMMAX(regions_list[this_reg].avg_intra_err, 0.001));
+ sqrt(AOMMAX(
+ 0.5, 1 - stats_list[order_index + n].noise_var /
+ AOMMAX(stats_list[order_index + n].intra_error,
+ 0.001)));
count_f++;
}
// preceding frames
@@ -641,8 +643,10 @@
temp_accu_coeff *= stats_list[order_index + n].cor_coeff;
this_score +=
temp_accu_coeff *
- (1 - stats_list[order_index + n].noise_var /
- AOMMAX(regions_list[this_reg].avg_intra_err, 0.001));
+ sqrt(AOMMAX(
+ 0.5, 1 - stats_list[order_index + n].noise_var /
+ AOMMAX(stats_list[order_index + n].intra_error,
+ 0.001)));
}
if (this_score > best_score) {
diff --git a/test/ratectrl_qmode_test.cc b/test/ratectrl_qmode_test.cc
index bcbab4b..3c947b0 100644
--- a/test/ratectrl_qmode_test.cc
+++ b/test/ratectrl_qmode_test.cc
@@ -1017,7 +1017,7 @@
std::back_inserter(gop_interval_list),
[](GopStruct const &x) { return x.show_frame_count; });
EXPECT_THAT(gop_interval_list,
- ElementsAre(21, 9, 30, 30, 17, 13, 21, 9, 30, 12, 16, 2, 30, 10));
+ ElementsAre(21, 9, 30, 30, 17, 13, 7, 23, 30, 12, 16, 2, 30, 10));
}
// TODO(b/242892473): Add a test which passes lookahead GOPs.