Use current gf group index to control tpl stats calculation Remove an unnecessary control parameter is_for_kf from av1_tpl_setup_stats(). Directly make decisions based on gf_group->index. Change-Id: I5dc758344b0763f128747beabb376e1d3d9f60e0
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c index fe57bef..64ee5ce 100644 --- a/av1/encoder/encode_strategy.c +++ b/av1/encoder/encode_strategy.c
@@ -1168,7 +1168,7 @@ frame_params.show_frame) { av1_configure_buffer_updates(cpi, &frame_params, frame_update_type, 0); av1_set_frame_size(cpi, cm->width, cm->height); - av1_tpl_setup_stats(cpi, &frame_input, 1); + av1_tpl_setup_stats(cpi, &frame_input); } #endif // ENABLE_KF_TPL @@ -1180,7 +1180,7 @@ if (cpi->gf_group.index == 1 && cpi->oxcf.enable_tpl_model) { av1_configure_buffer_updates(cpi, &frame_params, frame_update_type, 0); av1_set_frame_size(cpi, cm->width, cm->height); - av1_tpl_setup_stats(cpi, &frame_input, 0); + av1_tpl_setup_stats(cpi, &frame_input); assert(cpi->num_gf_group_show_frames == 1); } }
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c index 2461e80..b1a9fb5 100644 --- a/av1/encoder/tpl_model.c +++ b/av1/encoder/tpl_model.c
@@ -548,14 +548,14 @@ static void init_gop_frames_for_tpl(AV1_COMP *cpi, YV12_BUFFER_CONFIG **gf_picture, GF_GROUP *gf_group, int *tpl_group_frames, - const EncodeFrameInput *const frame_input, - int is_for_kf) { + const EncodeFrameInput *const frame_input) { AV1_COMMON *cm = &cpi->common; const SequenceHeader *const seq_params = &cm->seq_params; int frame_idx = 0; int frame_disp_idx = 0; RefCntBuffer *frame_bufs = cm->buffer_pool->frame_bufs; int pframe_qindex = 0; + int cur_frame_idx = gf_group->index; for (int i = 0; i < FRAME_BUFFERS && frame_idx < INTER_REFS_PER_FRAME + 1; ++i) { @@ -574,20 +574,25 @@ *tpl_group_frames = 0; - if (!is_for_kf) { + if (cur_frame_idx > 0) { // Initialize Golden reference frame. RefCntBuffer *ref_buf = get_ref_frame_buf(cm, GOLDEN_FRAME); gf_picture[0] = &ref_buf->buf; ++*tpl_group_frames; } - int start_idx = !is_for_kf; + if (cur_frame_idx > 1) { + // Initialize Alt reference frame. + RefCntBuffer *ref_buf = get_ref_frame_buf(cm, ALTREF_FRAME); + gf_picture[1] = &ref_buf->buf; + ++*tpl_group_frames; + } // Initialize frames in the GF group - for (frame_idx = start_idx; + for (frame_idx = cur_frame_idx; frame_idx <= AOMMIN(gf_group->size, MAX_LENGTH_TPL_FRAME_STATS - 1); ++frame_idx) { - if (frame_idx == start_idx) { + if (frame_idx == cur_frame_idx) { gf_picture[frame_idx] = frame_input->source; frame_disp_idx = gf_group->frame_disp_idx[frame_idx]; } else { @@ -613,7 +618,7 @@ ++*tpl_group_frames; } - if (is_for_kf) return; + if (cur_frame_idx == 0) return; if (frame_idx < MAX_LENGTH_TPL_FRAME_STATS) { ++frame_disp_idx; @@ -689,20 +694,19 @@ } void av1_tpl_setup_stats(AV1_COMP *cpi, - const EncodeFrameInput *const frame_input, - int is_for_kf) { + const EncodeFrameInput *const frame_input) { YV12_BUFFER_CONFIG *gf_picture[MAX_LENGTH_TPL_FRAME_STATS]; GF_GROUP *gf_group = &cpi->gf_group; init_gop_frames_for_tpl(cpi, gf_picture, gf_group, &cpi->tpl_gf_group_frames, - frame_input, is_for_kf); + frame_input); init_tpl_stats(cpi); if (cpi->oxcf.enable_tpl_model == 1) { // Backward propagation from tpl_group_frames to 1. - for (int frame_idx = cpi->tpl_gf_group_frames - 1; frame_idx >= !is_for_kf; - --frame_idx) { + for (int frame_idx = cpi->tpl_gf_group_frames - 1; + frame_idx >= gf_group->index; --frame_idx) { if (gf_group->update_type[frame_idx] == OVERLAY_UPDATE || gf_group->update_type[frame_idx] == INTNL_OVERLAY_UPDATE) continue;
diff --git a/av1/encoder/tpl_model.h b/av1/encoder/tpl_model.h index 36be9ba..4732d1c 100644 --- a/av1/encoder/tpl_model.h +++ b/av1/encoder/tpl_model.h
@@ -17,8 +17,7 @@ #endif void av1_tpl_setup_stats(AV1_COMP *cpi, - const EncodeFrameInput *const frame_input, - int is_for_kf); + const EncodeFrameInput *const frame_input); void av1_tpl_setup_forward_stats(AV1_COMP *cpi);