Find correct display buffer for show_existing_frame

Get rid of the assumption that the display buffer for internal overlay
is in the BWDREF slot.

BUG=aomedia:2818

Change-Id: I8dbaea9b292198268d561f52c82f6edc5cac038e
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 3ae25db..0071f26 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -1563,12 +1563,20 @@
         cpi, &frame_params, frame_update_type, cpi->gf_group.index,
         cur_frame_disp, ref_frame_map_pairs, &cpi->ref_buffer_stack);
 
-    frame_params.existing_fb_idx_to_show =
-        frame_params.show_existing_frame
-            ? (frame_update_type == INTNL_OVERLAY_UPDATE
-                   ? get_ref_frame_map_idx(cm, BWDREF_FRAME)
-                   : get_ref_frame_map_idx(cm, ALTREF_FRAME))
-            : INVALID_IDX;
+    frame_params.existing_fb_idx_to_show = INVALID_IDX;
+    // Find the frame buffer to show based on display order
+    if (frame_params.show_existing_frame) {
+      for (int frame = LAST_FRAME; frame <= ALTREF_FRAME; frame++) {
+        // Get reference frame buffer
+        const RefCntBuffer *const buf = get_ref_frame_buf(&cpi->common, frame);
+        if (buf == NULL) continue;
+        const int frame_order = (int)buf->display_order_hint;
+        if (frame_order == cur_frame_disp) {
+          frame_params.existing_fb_idx_to_show =
+              get_ref_frame_map_idx(cm, frame);
+        }
+      }
+    }
   }
 
   // The way frame_params->remapped_ref_idx is setup is a placeholder.