d3d12: Fix H264 interlaced decode
Have to set the interlaced field of the surface before
end_frame is called in the pipe codec object so the info
is available to the frontend/va, instead of setting it
directly in end_frame like before.
Fixes: 578e10e157
("frontends/va: Alloc interlaced surface for interlaced pics")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24909>
This commit is contained in:
@@ -330,6 +330,11 @@ d3d12_video_decoder_decode_bitstream(struct pipe_video_codec *codec,
|
|||||||
debug_printf("[d3d12_video_decoder] d3d12_video_decoder_decode_bitstream finalized for fenceValue: %d\n",
|
debug_printf("[d3d12_video_decoder] d3d12_video_decoder_decode_bitstream finalized for fenceValue: %d\n",
|
||||||
pD3D12Dec->m_fenceValue);
|
pD3D12Dec->m_fenceValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pD3D12Dec->m_d3d12DecProfileType == d3d12_video_decode_profile_type_h264) {
|
||||||
|
struct pipe_h264_picture_desc *h264 = (pipe_h264_picture_desc*) picture;
|
||||||
|
target->interlaced = !h264->pps->sps->frame_mbs_only_flag && (h264->field_pic_flag || /* PAFF */ h264->pps->sps->mb_adaptive_frame_field_flag); /* MBAFF */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1107,7 +1112,7 @@ d3d12_video_decoder_reconfigure_dpb(struct d3d12_video_decoder *pD3D12Dec,
|
|||||||
ID3D12Resource *pPipeD3D12DstResource = d3d12_resource_resource(pD3D12VideoBuffer->texture);
|
ID3D12Resource *pPipeD3D12DstResource = d3d12_resource_resource(pD3D12VideoBuffer->texture);
|
||||||
D3D12_RESOURCE_DESC outputResourceDesc = GetDesc(pPipeD3D12DstResource);
|
D3D12_RESOURCE_DESC outputResourceDesc = GetDesc(pPipeD3D12DstResource);
|
||||||
|
|
||||||
pD3D12VideoBuffer->base.interlaced = isInterlaced;
|
assert(pD3D12VideoBuffer->base.interlaced == isInterlaced);
|
||||||
D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE interlaceTypeRequested =
|
D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE interlaceTypeRequested =
|
||||||
isInterlaced ? D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_FIELD_BASED : D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_NONE;
|
isInterlaced ? D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_FIELD_BASED : D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_NONE;
|
||||||
if ((pD3D12Dec->m_decodeFormat != outputResourceDesc.Format) ||
|
if ((pD3D12Dec->m_decodeFormat != outputResourceDesc.Format) ||
|
||||||
|
Reference in New Issue
Block a user