Load the refresh frame index in the reference frame buffer
BUG=b/241257063
Change-Id: I236f7d8518672f8a18355daf5c90d8baaada02e1
diff --git a/av1/ducky_encode.cc b/av1/ducky_encode.cc
index 16ff97d..738ddba 100644
--- a/av1/ducky_encode.cc
+++ b/av1/ducky_encode.cc
@@ -312,13 +312,15 @@
gf_group->refbuf_state[i] =
frame.is_key_frame ? REFBUF_RESET : REFBUF_UPDATE;
- memset(gf_group->ref_frame_list[i], -1, REF_FRAMES);
+ std::fill_n(gf_group->ref_frame_list[i], REF_FRAMES, -1);
+ gf_group->update_ref_idx[i] = -1;
for (int ref_idx = 0;
ref_idx < static_cast<int>(frame.ref_frame_list.size()); ++ref_idx) {
int ref_frame = static_cast<int>(frame.ref_frame_list[ref_idx].name);
gf_group->ref_frame_list[i][ref_frame] =
static_cast<int8_t>(frame.ref_frame_list[ref_idx].index);
}
+ gf_group->update_ref_idx[i] = frame.update_ref_idx;
++i;
}
ppi->cpi->gf_frame_index = 0;
diff --git a/av1/encoder/firstpass.h b/av1/encoder/firstpass.h
index c81b612..2ef8448 100644
--- a/av1/encoder/firstpass.h
+++ b/av1/encoder/firstpass.h
@@ -369,8 +369,13 @@
// Stores the display order hint of each frame in the current GF_GROUP.
int display_idx[MAX_STATIC_GF_GROUP_LENGTH];
- // Reference frame list
+ // The reference frame list maps the reference frame indexes to its
+ // buffer index in the decoded buffer. A value of -1 means the
+ // corresponding reference frame index doesn't point towards any
+ // previously decoded frame.
int8_t ref_frame_list[MAX_STATIC_GF_GROUP_LENGTH][REF_FRAMES];
+ // Update frame index
+ int update_ref_idx[MAX_STATIC_GF_GROUP_LENGTH];
// Indicates the level of parallelism in frame parallel encodes.
// 0 : frame is independently encoded (not part of parallel encodes).