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);