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