Commit 4953015c6d for aom

commit 4953015c6d41f4dc890a8cd21478298b0fe5f4b0
Author: Jerome Jiang <jianj@google.com>
Date:   Thu Jan 15 14:05:22 2026 -0500

    ext rc: fix gop decision indices & show_frame

    same variable means different things between libaom and
    the external RC. Differences are explained in the comment.

    Also override show_frame assignment.

    Bug: 461792087
    Change-Id: I1a34980bdf4773ec69b8f60b1a89e06aa6e31e08

diff --git a/av1/encoder/gop_structure.c b/av1/encoder/gop_structure.c
index 81647520d8..1de901a51b 100644
--- a/av1/encoder/gop_structure.c
+++ b/av1/encoder/gop_structure.c
@@ -849,9 +849,13 @@ static void construct_gop_structure_from_rc(
         &rc_gop_decision->gop_frame_list[frame_index];
     gf_group->update_type[frame_index] = gop_frame_rc->update_type;
     gf_group->layer_depth[frame_index] = gop_frame_rc->layer_depth;
-    gf_group->display_idx[frame_index] =
-        gop_frame_rc->display_idx + rc_gop_decision->global_order_idx_offset;
     gf_group->update_ref_idx[frame_index] = gop_frame_rc->update_ref_idx;
+    // `display_idx` means differently in libaom and RC.
+    // - in libaom: it is display order index in the GOP, equivalent to
+    //              `order_idx` in RC
+    // - in RC: it is the number of display frames precedeing this frame, which
+    //          is equivalent to `cur_frame_idx` in libaom.
+    gf_group->display_idx[frame_index] = gop_frame_rc->order_idx;
     gf_group->cur_frame_idx[frame_index] = gop_frame_rc->display_idx;
     switch (gf_group->update_type[frame_index]) {
       case LF_UPDATE:
@@ -861,11 +865,10 @@ static void construct_gop_structure_from_rc(
       case ARF_UPDATE:
       case INTNL_ARF_UPDATE:
         gf_group->arf_src_offset[frame_index] =
-            gop_frame_rc->display_idx - frame_index;
+            gop_frame_rc->order_idx - frame_index;
         break;
       default: gf_group->arf_src_offset[frame_index] = 0;
     }
-    gf_group->cur_frame_idx[frame_index] = frame_index;
     gf_group->frame_type[frame_index] =
         gop_frame_rc->is_key_frame ? KEY_FRAME : INTER_FRAME;
     gf_group->refbuf_state[frame_index] =
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index be22b63931..0dec565400 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -3857,6 +3857,14 @@ void av1_get_second_pass_params(AV1_COMP *cpi,
     return;
   }

+  if (cpi->ext_ratectrl.ready &&
+      (cpi->ext_ratectrl.funcs.rc_type & AOM_RC_GOP) != 0 &&
+      cpi->ext_ratectrl.funcs.get_gop_decision != NULL) {
+    frame_params->show_frame =
+        !(gf_group->update_type[cpi->gf_frame_index] == ARF_UPDATE ||
+          gf_group->update_type[cpi->gf_frame_index] == INTNL_ARF_UPDATE);
+  }
+
   if (cpi->use_ducky_encode &&
       cpi->ducky_encode_info.frame_info.gop_mode == DUCKY_ENCODE_GOP_MODE_RCL) {
     frame_params->frame_type = gf_group->frame_type[cpi->gf_frame_index];
diff --git a/test/ext_ratectrl_test.cc b/test/ext_ratectrl_test.cc
index c7a413e508..57944d993f 100644
--- a/test/ext_ratectrl_test.cc
+++ b/test/ext_ratectrl_test.cc
@@ -92,26 +92,30 @@ aom_rc_status_t mock_get_gop_decision(aom_rc_model_t /*ratectrl_model*/,
       current_gop_frame->layer_depth = 0;
       current_gop_frame->display_idx = 0;
       current_gop_frame->update_ref_idx = 0;
+      current_gop_frame->order_idx = 0;
     } else {
       current_gop_frame->is_key_frame = false;
       if (i == 1) {
         // ALTREF
         current_gop_frame->update_type = AOM_RC_ARF_UPDATE;
         current_gop_frame->layer_depth = 1;
-        current_gop_frame->display_idx = 4;
+        current_gop_frame->display_idx = 1;
         current_gop_frame->update_ref_idx = 1;
+        current_gop_frame->order_idx = 4;
       } else if (i == 5) {
         // Overlay frame
         current_gop_frame->is_key_frame = false;
         current_gop_frame->update_type = AOM_RC_OVERLAY_UPDATE;
         current_gop_frame->layer_depth = AOM_RC_MAX_ARF_LAYERS - 1;
         current_gop_frame->display_idx = 4;
+        current_gop_frame->order_idx = 4;
       } else {
         // Leaf frames
         current_gop_frame->is_key_frame = false;
         current_gop_frame->update_type = AOM_RC_LF_UPDATE;
         current_gop_frame->layer_depth = AOM_RC_MAX_ARF_LAYERS - 1;
-        current_gop_frame->display_idx = i - 2;  // Key and ARF in the front
+        current_gop_frame->display_idx = i - 1;  // Key in the front
+        current_gop_frame->order_idx = i - 1;
         current_gop_frame->update_ref_idx = 2;
       }
       // For leaf and overlay frames, set ALTREF to buffer 1.