From ad66315a677de464634bfdc71aecf28843929b0a Mon Sep 17 00:00:00 2001 From: "Pohsiang (John) Hsu" Date: Mon, 4 Nov 2024 17:01:14 -0800 Subject: [PATCH] d3d12: fix incorrect IsRefUsedByCurrentPic marking for P Frame - On P Frame, we were looking at L1 list to determine IsRefUsedByCurrentPic. Reviewed-by: Jesse Natalie Reviewed by: Pohsiang (John) Hsu Reviewed-by: Jesse Natalie Part-of: --- .../d3d12/d3d12_video_encoder_references_manager_hevc.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_video_encoder_references_manager_hevc.cpp b/src/gallium/drivers/d3d12/d3d12_video_encoder_references_manager_hevc.cpp index b28d3fce9fe..275c4df513a 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_encoder_references_manager_hevc.cpp +++ b/src/gallium/drivers/d3d12/d3d12_video_encoder_references_manager_hevc.cpp @@ -288,8 +288,11 @@ d3d12_video_encoder_references_manager_hevc::begin_frame(D3D12_VIDEO_ENCODER_PIC // and set IsRefUsedByCurrentPic accordingly auto endItL0 = hevcPic->ref_list0 + (hevcPic->num_ref_idx_l0_active_minus1 + 1); bool bReferencesFromL0 = std::find(hevcPic->ref_list0, endItL0, i) != endItL0; - auto endItL1 = hevcPic->ref_list1 + (hevcPic->num_ref_idx_l1_active_minus1 + 1); - bool bReferencesFromL1 = std::find(hevcPic->ref_list1, endItL1, i) != endItL1; + bool bReferencesFromL1 = false; + if (d3d12_video_encoder_convert_frame_type_hevc(hevcPic->picture_type) == D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_B_FRAME) { + auto endItL1 = hevcPic->ref_list1 + (hevcPic->num_ref_idx_l1_active_minus1 + 1); + bReferencesFromL1 = std::find(hevcPic->ref_list1, endItL1, i) != endItL1; + } m_CurrentFrameReferencesData.pReferenceFramesReconPictureDescriptors[i].IsRefUsedByCurrentPic = bReferencesFromL0 || bReferencesFromL1;