Move twopass stats_in increment to twopass_postencode_update
The increment of the stats_in pointer is moved to
av1_twopass_postencode_update to facilitate
frame parallel encode.
Change-Id: If217b7daca9fe3144e3e106f8c616f4d008ad335
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index 151fe00..d998298 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -3429,10 +3429,10 @@
p_rc->avg_frame_qindex[KEY_FRAME] = rc->last_q[KEY_FRAME];
}
- if (cpi->ppi->lap_enabled) {
- input_stats_lap(twopass, &cpi->twopass_frame, this_frame);
- } else {
- input_stats(twopass, &cpi->twopass_frame, this_frame);
+ if (cpi->twopass_frame.stats_in <
+ cpi->ppi->twopass.stats_buf_ctx->stats_in_end) {
+ *this_frame = *cpi->twopass_frame.stats_in;
+ ++cpi->twopass_frame.stats_in;
}
set_twopass_params_based_on_fp_stats(cpi, this_frame);
}
@@ -3967,6 +3967,25 @@
TWO_PASS *const twopass = &cpi->ppi->twopass;
RATE_CONTROL *const rc = &cpi->rc;
const RateControlCfg *const rc_cfg = &cpi->oxcf.rc_cfg;
+ const int update_type = cpi->ppi->gf_group.update_type[cpi->gf_frame_index];
+
+ // Increment the stats_in pointer.
+ if (is_stat_consumption_stage(cpi) &&
+ (cpi->gf_frame_index < cpi->ppi->gf_group.size ||
+ rc->frames_to_key == 0)) {
+ if (update_type != ARF_UPDATE && update_type != INTNL_ARF_UPDATE) {
+ FIRSTPASS_STATS this_frame;
+ --cpi->twopass_frame.stats_in;
+ if (cpi->ppi->lap_enabled) {
+ input_stats_lap(twopass, &cpi->twopass_frame, &this_frame);
+ } else {
+ input_stats(twopass, &cpi->twopass_frame, &this_frame);
+ }
+ } else if (cpi->ppi->lap_enabled) {
+ cpi->twopass_frame.stats_in =
+ cpi->ppi->twopass.stats_buf_ctx->stats_in_start;
+ }
+ }
// VBR correction is done through rc->vbr_bits_off_target. Based on the
// sign of this value, a limited % adjustment is made to the target rate