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.