Commit e19bda0d9f for aom
commit e19bda0d9fb8343ff2403e984cdf3c59d9b26269
Author: Jerome Jiang <jianj@google.com>
Date: Tue Mar 31 13:46:12 2026 -0400
RC: skip shortern GF when using ext RC
Change-Id: Ife44d95b3cd5779be738930d213be6c3a9bf366e
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 5093bfd243..a149da75a3 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -3442,9 +3442,7 @@ static int encode_with_recode_loop(AV1_COMP *cpi, size_t *size, uint8_t *dest,
}
}
- if (cpi->ext_ratectrl.ready &&
- (cpi->ext_ratectrl.funcs.rc_type & AOM_RC_QP) != 0 &&
- cpi->ext_ratectrl.funcs.get_encodeframe_decision != NULL) {
+ if (av1_encode_for_extrc(&cpi->ext_ratectrl)) {
aom_codec_err_t codec_status;
aom_rc_encodeframe_decision_t encode_frame_decision;
const int sb_rows = CEIL_POWER_OF_TWO(cm->mi_params.mi_rows,
@@ -3617,9 +3615,7 @@ static int encode_with_recode_loop(AV1_COMP *cpi, size_t *size, uint8_t *dest,
}
// Do not recode if external rate control is used.
- if (cpi->ext_ratectrl.ready &&
- (cpi->ext_ratectrl.funcs.rc_type & AOM_RC_QP) != 0 &&
- cpi->ext_ratectrl.funcs.get_encodeframe_decision != NULL) {
+ if (av1_encode_for_extrc(&cpi->ext_ratectrl)) {
loop = 0;
}
#if CONFIG_BITRATE_ACCURACY || CONFIG_RD_COMMAND
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 0bac37011e..b4e25d4c23 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -4233,6 +4233,11 @@ static inline int av1_frame_scaled(const AV1_COMMON *cm) {
return av1_superres_scaled(cm) || av1_resize_scaled(cm);
}
+static inline bool av1_encode_for_extrc(AOM_EXT_RATECTRL const *ext_rc) {
+ return ext_rc->ready && (ext_rc->funcs.rc_type & AOM_RC_QP) != 0 &&
+ ext_rc->funcs.get_encodeframe_decision != NULL;
+}
+
// Don't allow a show_existing_frame to coincide with an error resilient
// frame. An exception can be made for a forward keyframe since it has no
// previous dependencies.
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index f489317d04..3c02b8726f 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -1060,6 +1060,10 @@ static inline int detect_gf_cut(AV1_COMP *cpi, int frame_index, int cur_start,
static int is_shorter_gf_interval_better(
AV1_COMP *cpi, const EncodeFrameParams *frame_params) {
+ if (av1_use_tpl_for_extrc(&cpi->ext_ratectrl) ||
+ av1_encode_for_extrc(&cpi->ext_ratectrl)) {
+ return 0;
+ }
const RATE_CONTROL *const rc = &cpi->rc;
PRIMARY_RATE_CONTROL *const p_rc = &cpi->ppi->p_rc;
int gop_length_decision_method = cpi->sf.tpl_sf.gop_length_decision_method;