diff --git a/packages/multimedia/media-driver/package.mk b/packages/multimedia/media-driver/package.mk index a38f4576e92..fe9afca28fe 100644 --- a/packages/multimedia/media-driver/package.mk +++ b/packages/multimedia/media-driver/package.mk @@ -2,8 +2,8 @@ # Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) PKG_NAME="media-driver" -PKG_VERSION="24.3.0" -PKG_SHA256="b6728607e4d05739bce27124605993011b468781043ce34bb1a51919196f2d15" +PKG_VERSION="24.3.1" +PKG_SHA256="98702b946edb24454a3b780f8dd5b3091c6c795478467c1c00fe4d16c4371291" PKG_ARCH="x86_64" PKG_LICENSE="MIT" PKG_SITE="https://01.org/linuxmedia" diff --git a/packages/multimedia/media-driver/patches/media-driver-999.01-PR1162-use-forward_references-as-the-reference-for-ADI.patch b/packages/multimedia/media-driver/patches/media-driver-999.01-PR1162-use-forward_references-as-the-reference-for-ADI.patch deleted file mode 100644 index a237833fe71..00000000000 --- a/packages/multimedia/media-driver/patches/media-driver-999.01-PR1162-use-forward_references-as-the-reference-for-ADI.patch +++ /dev/null @@ -1,162 +0,0 @@ -From 1e79d58e7af77453e55ce40fe01c1cc8ca84461b Mon Sep 17 00:00:00 2001 -From: Jason Chen -Date: Thu, 18 Mar 2021 11:52:11 +0800 -Subject: [PATCH] [VP] Use forward_references as the reference for ADI - -VAAPI define forward_references as past referene frame, but vphal regart forward reference as future reference frame. This change will only correct the behavior in DDI level to map forward_references to VPHAL_SURFACE.pBwdRef, and backward_references to VPHAL_SURFACE.pFwdRef ---- - media_driver/linux/common/ddi/media_libva.cpp | 17 ++++++++ - .../linux/common/vp/ddi/media_libva_vp.c | 42 ++++++++++--------- - 2 files changed, 39 insertions(+), 20 deletions(-) - -diff --git a/media_driver/linux/common/ddi/media_libva.cpp b/media_driver/linux/common/ddi/media_libva.cpp -index 63f1659ed..efa0c08cc 100755 ---- a/media_driver/linux/common/ddi/media_libva.cpp -+++ b/media_driver/linux/common/ddi/media_libva.cpp -@@ -6525,6 +6525,23 @@ DdiMedia_QueryVideoProcPipelineCaps( - pipeline_caps->min_output_width = VP_MIN_PIC_WIDTH; - pipeline_caps->min_output_height = VP_MIN_PIC_WIDTH; - } -+ -+ for (int i = 0; i < num_filters; i++) { -+ void *pData; -+ DdiMedia_MapBuffer(ctx, filters[i], &pData); -+ DDI_CHK_NULL(pData, "nullptr pData", VA_STATUS_ERROR_INVALID_PARAMETER); -+ VAProcFilterParameterBufferBase* base_param = (VAProcFilterParameterBufferBase*) pData; -+ if (base_param->type == VAProcFilterDeinterlacing) -+ { -+ VAProcFilterParameterBufferDeinterlacing *di_param = (VAProcFilterParameterBufferDeinterlacing *)base_param; -+ if (di_param->algorithm == VAProcDeinterlacingMotionAdaptive || -+ di_param->algorithm == VAProcDeinterlacingMotionCompensated) -+ { -+ pipeline_caps->num_forward_references = 1; -+ } -+ } -+ } -+ - return VA_STATUS_SUCCESS; - } - -diff --git a/media_driver/linux/common/vp/ddi/media_libva_vp.c b/media_driver/linux/common/vp/ddi/media_libva_vp.c -index 1f544749b..7d5b95b4e 100644 ---- a/media_driver/linux/common/vp/ddi/media_libva_vp.c -+++ b/media_driver/linux/common/vp/ddi/media_libva_vp.c -@@ -90,8 +90,8 @@ VAStatus DdiVp_SetProcFilterTotalColorCorrectionParams(PDDI_VP_CONTEXT, uint - VAStatus DdiVp_SetProcFilterHdrTmParams(PDDI_VP_CONTEXT, uint32_t, VAProcFilterParameterBufferHDRToneMapping*); - VAStatus DdiVp_SetProcPipelineBlendingParams(PDDI_VP_CONTEXT pVpCtx, uint32_t uiSurfIndex, VAProcPipelineParameterBuffer* pPipelineParam); - VAStatus DdiVp_ConvertSurface (VADriverContextP ctx, DDI_MEDIA_SURFACE *srcSurface, int16_t srcx, int16_t srcy, uint16_t srcw, uint16_t srch, DDI_MEDIA_SURFACE *dstSurface, int16_t destx, int16_t desty, uint16_t destw, uint16_t desth ); --VAStatus DdiVp_UpdateProcPipelineForwardReferenceFrames(PDDI_VP_CONTEXT pVpCtx, VADriverContextP pVaDrvCtx, PVPHAL_SURFACE pVpHalSrcSurf, VAProcPipelineParameterBuffer* pPipelineParam); --VAStatus DdiVp_UpdateProcPipelineBackwardReferenceFrames(PDDI_VP_CONTEXT pVpCtx, VADriverContextP pVaDrvCtx, PVPHAL_SURFACE pVpHalSrcSurf, VAProcPipelineParameterBuffer* pPipelineParam); -+VAStatus DdiVp_UpdateProcPipelineFutureReferenceFrames(PDDI_VP_CONTEXT pVpCtx, VADriverContextP pVaDrvCtx, PVPHAL_SURFACE pVpHalSrcSurf, VAProcPipelineParameterBuffer* pPipelineParam); -+VAStatus DdiVp_UpdateProcPipelinePastReferenceFrames(PDDI_VP_CONTEXT pVpCtx, VADriverContextP pVaDrvCtx, PVPHAL_SURFACE pVpHalSrcSurf, VAProcPipelineParameterBuffer* pPipelineParam); - VAStatus DdiVp_UpdateVphalTargetSurfColorSpace(VADriverContextP, PDDI_VP_CONTEXT, VAProcPipelineParameterBuffer*, uint32_t targetIndex); - VAStatus DdiVp_BeginPictureInt(VADriverContextP pVaDrvCtx, PDDI_VP_CONTEXT pVpCtx, VASurfaceID vaSurfID); - -@@ -1174,15 +1174,15 @@ DdiVp_SetProcPipelineParams( - - // Update fwd and bkward ref frames: Required for Advanced processing - will be supported in the future - -- pVpHalSrcSurf->uFwdRefCount = pPipelineParam->num_forward_references; -+ pVpHalSrcSurf->uFwdRefCount = pPipelineParam->num_backward_references; - -- vaStatus = DdiVp_UpdateProcPipelineForwardReferenceFrames(pVpCtx, pVaDrvCtx, pVpHalSrcSurf, pPipelineParam); -- DDI_CHK_RET(vaStatus, "Failed to update forward reference frames!"); -+ vaStatus = DdiVp_UpdateProcPipelineFutureReferenceFrames(pVpCtx, pVaDrvCtx, pVpHalSrcSurf, pPipelineParam); -+ DDI_CHK_RET(vaStatus, "Failed to update future reference frames!"); - -- pVpHalSrcSurf->uBwdRefCount = pPipelineParam->num_backward_references; -+ pVpHalSrcSurf->uBwdRefCount = pPipelineParam->num_forward_references; - -- vaStatus = DdiVp_UpdateProcPipelineBackwardReferenceFrames(pVpCtx, pVaDrvCtx, pVpHalSrcSurf, pPipelineParam); -- DDI_CHK_RET(vaStatus, "Failed to update backward reference frames!"); -+ vaStatus = DdiVp_UpdateProcPipelinePastReferenceFrames(pVpCtx, pVaDrvCtx, pVpHalSrcSurf, pPipelineParam); -+ DDI_CHK_RET(vaStatus, "Failed to update past reference frames!"); - - // Check if filter values changed,if yes, then reset all filters for this surface - -@@ -3890,7 +3890,7 @@ DdiVp_SetProcPipelineBlendingParams( - } - - //////////////////////////////////////////////////////////////////////////////// --//! \purpose Update the forward reference frames for VPHAL input surface -+//! \purpose Update the future reference frames for VPHAL input surface - //! \params - //! [in] pVpCtx : VP context - //! [in] pVaDrvCtx : VA Driver context -@@ -3900,7 +3900,7 @@ DdiVp_SetProcPipelineBlendingParams( - //! \returns VA_STATUS_SUCCESS if call succeeds - //////////////////////////////////////////////////////////////////////////////// - VAStatus --DdiVp_UpdateProcPipelineForwardReferenceFrames( -+DdiVp_UpdateProcPipelineFutureReferenceFrames( - PDDI_VP_CONTEXT pVpCtx, - VADriverContextP pVaDrvCtx, - PVPHAL_SURFACE pVpHalSrcSurf, -@@ -3930,9 +3930,10 @@ DdiVp_UpdateProcPipelineForwardReferenceFrames( - - pSurface = pVpHalSrcSurf; - -- if (pPipelineParam->forward_references != nullptr) -+ // DDI regard backward_references as future frame, but VPHAL regard pFwdRef as future frame -+ if (pPipelineParam->backward_references != nullptr) - { -- for (i = 0;i < pPipelineParam->num_forward_references; i++) -+ for (i = 0;i < pPipelineParam->num_backward_references; i++) - { - PDDI_MEDIA_SURFACE pRefSurfBuffObj = nullptr; - if(pSurface->pFwdRef == nullptr) -@@ -3952,9 +3953,9 @@ DdiVp_UpdateProcPipelineForwardReferenceFrames( - pSurface->pFwdRef->dwWidth = pVpHalSrcSurf->dwWidth; - pSurface->pFwdRef->dwHeight = pVpHalSrcSurf->dwHeight; - pSurface->pFwdRef->dwPitch = pVpHalSrcSurf->dwPitch; -- pSurface->uFwdRefCount = pPipelineParam->num_forward_references - i; -+ pSurface->uFwdRefCount = pPipelineParam->num_backward_references - i; - } -- pRefSurfBuffObj = DdiMedia_GetSurfaceFromVASurfaceID(pMediaCtx, pPipelineParam->forward_references[i]); -+ pRefSurfBuffObj = DdiMedia_GetSurfaceFromVASurfaceID(pMediaCtx, pPipelineParam->backward_references[i]); - DDI_CHK_NULL(pRefSurfBuffObj, - "Null pRefSurfBuffObj!", - VA_STATUS_ERROR_INVALID_SURFACE); -@@ -3979,7 +3980,7 @@ DdiVp_UpdateProcPipelineForwardReferenceFrames( - } - - //////////////////////////////////////////////////////////////////////////////// --//! \purpose Update the backward reference frames for VPHAL input surface -+//! \purpose Update the past reference frames for VPHAL input surface - //! \params - //! [in] pVpCtx : VP context - //! [in] pVaDrvCtx : VA Driver context -@@ -3989,7 +3990,7 @@ DdiVp_UpdateProcPipelineForwardReferenceFrames( - //! \returns VA_STATUS_SUCCESS if call succeeds - //////////////////////////////////////////////////////////////////////////////// - VAStatus --DdiVp_UpdateProcPipelineBackwardReferenceFrames( -+DdiVp_UpdateProcPipelinePastReferenceFrames( - PDDI_VP_CONTEXT pVpCtx, - VADriverContextP pVaDrvCtx, - PVPHAL_SURFACE pVpHalSrcSurf, -@@ -4019,9 +4020,10 @@ DdiVp_UpdateProcPipelineBackwardReferenceFrames( - - pSurface = pVpHalSrcSurf; - -- if (pPipelineParam->backward_references != nullptr) -+ // DDI regard forward_references as past frame, but VPHAL regard pBwdRef as past frame -+ if (pPipelineParam->forward_references != nullptr) - { -- for (i = 0;i < pPipelineParam->num_backward_references; i++) -+ for (i = 0;i < pPipelineParam->num_forward_references; i++) - { - PDDI_MEDIA_SURFACE pRefSurfBuffObj = nullptr; - if(pSurface->pBwdRef == nullptr) -@@ -4041,9 +4043,9 @@ DdiVp_UpdateProcPipelineBackwardReferenceFrames( - pSurface->pBwdRef->dwWidth = pVpHalSrcSurf->dwWidth; - pSurface->pBwdRef->dwHeight = pVpHalSrcSurf->dwHeight; - pSurface->pBwdRef->dwPitch = pVpHalSrcSurf->dwPitch; -- pSurface->uBwdRefCount = pPipelineParam->num_backward_references - i;; -+ pSurface->uBwdRefCount = pPipelineParam->num_forward_references - i;; - } -- pRefSurfBuffObj = DdiMedia_GetSurfaceFromVASurfaceID(pMediaCtx, pPipelineParam->backward_references[i]); -+ pRefSurfBuffObj = DdiMedia_GetSurfaceFromVASurfaceID(pMediaCtx, pPipelineParam->forward_references[i]); - DDI_CHK_NULL(pRefSurfBuffObj, - "Null pRefSurfBuffObj!", - VA_STATUS_ERROR_INVALID_SURFACE); diff --git a/packages/multimedia/media-driver/patches/media-driver-999.02-Refactor-for-build-issue.patch b/packages/multimedia/media-driver/patches/media-driver-999.02-Refactor-for-build-issue.patch deleted file mode 100644 index fc9a74a3c56..00000000000 --- a/packages/multimedia/media-driver/patches/media-driver-999.02-Refactor-for-build-issue.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 47bae3c809c9f5b11793b76b5edfd7704adb4080 Mon Sep 17 00:00:00 2001 -From: Chen_Ke -Date: Fri, 12 Jul 2024 11:42:04 +0800 -Subject: [PATCH] [VP] Refactor for build issue - -Refactor for build issue: Avoid storing the address of local variable ---- - media_common/agnostic/common/hw/mhw_render.h | 1 + - media_common/agnostic/common/hw/mhw_state_heap.h | 2 -- - .../agnostic/common/hw/mhw_render_cmdpar.h | 1 + - .../shared/packet/media_render_cmd_packet.cpp | 4 ++-- - .../shared/packet/media_render_cmd_packet.h | 4 ++-- - .../common/vp/hal/packet/vp_render_kernel_obj.cpp | 15 +++++---------- - .../common/vp/hal/packet/vp_render_kernel_obj.h | 3 ++- - 7 files changed, 13 insertions(+), 17 deletions(-) - -diff --git a/media_common/agnostic/common/hw/mhw_render.h b/media_common/agnostic/common/hw/mhw_render.h -index b551ab1337..36c895c299 100644 ---- a/media_common/agnostic/common/hw/mhw_render.h -+++ b/media_common/agnostic/common/hw/mhw_render.h -@@ -312,6 +312,7 @@ typedef struct _MHW_GPGPU_WALKER_PARAMS - - bool hasBarrier; - PMHW_INLINE_DATA_PARAMS inlineDataParamBase; -+ uint32_t inlineDataParamSize; - - } MHW_GPGPU_WALKER_PARAMS, *PMHW_GPGPU_WALKER_PARAMS; - -diff --git a/media_common/agnostic/common/hw/mhw_state_heap.h b/media_common/agnostic/common/hw/mhw_state_heap.h -index 49add60823..2f9afff0af 100644 ---- a/media_common/agnostic/common/hw/mhw_state_heap.h -+++ b/media_common/agnostic/common/hw/mhw_state_heap.h -@@ -83,8 +83,6 @@ typedef struct MHW_BLOCK_MANAGER *PMHW_BLOCK_MANAGER; - - #define MHW_INVALID_SYNC_TAG 0xFFFFFFFF - --#define MAX_INLINE_DATA_PARAMS 32 -- - enum MW_RENDER_ENGINE_ADDRESS_SHIFT - { - MHW_STATE_HEAP_SURFACE_STATE_SHIFT = 0 -diff --git a/media_softlet/agnostic/common/hw/mhw_render_cmdpar.h b/media_softlet/agnostic/common/hw/mhw_render_cmdpar.h -index 4c01d351ce..a8004bbbb9 100644 ---- a/media_softlet/agnostic/common/hw/mhw_render_cmdpar.h -+++ b/media_softlet/agnostic/common/hw/mhw_render_cmdpar.h -@@ -65,6 +65,7 @@ struct MHW_HEAPS_RESOURCE - { - PMOS_RESOURCE presInstructionBuffer = nullptr; - PMHW_INLINE_DATA_PARAMS inlineDataParamsBase = nullptr; -+ uint32_t inlineDataParamSize = 0; - }; - - enum MHW_VFE_SLICE_DISABLE -diff --git a/media_softlet/agnostic/common/shared/packet/media_render_cmd_packet.cpp b/media_softlet/agnostic/common/shared/packet/media_render_cmd_packet.cpp -index dc9d6896ba..c18cbf4b4f 100644 ---- a/media_softlet/agnostic/common/shared/packet/media_render_cmd_packet.cpp -+++ b/media_softlet/agnostic/common/shared/packet/media_render_cmd_packet.cpp -@@ -1264,8 +1264,8 @@ MOS_STATUS RenderCmdPacket::PrepareComputeWalkerParams(KERNEL_WALKER_PARAMS para - - gpgpuWalker.SLMSize = params.slmSize; - gpgpuWalker.hasBarrier = params.hasBarrier; -- gpgpuWalker.inlineDataParamBase = params.inlineDataParams; -- -+ gpgpuWalker.inlineDataParamBase = params.inlineDataParamBase; -+ gpgpuWalker.inlineDataParamSize = params.inlineDataParamSize; - return MOS_STATUS_SUCCESS; - } - -diff --git a/media_softlet/agnostic/common/shared/packet/media_render_cmd_packet.h b/media_softlet/agnostic/common/shared/packet/media_render_cmd_packet.h -index 89ac89d9a5..7e6b0aa8a1 100644 ---- a/media_softlet/agnostic/common/shared/packet/media_render_cmd_packet.h -+++ b/media_softlet/agnostic/common/shared/packet/media_render_cmd_packet.h -@@ -120,8 +120,8 @@ typedef struct _KERNEL_WALKER_PARAMS - - bool hasBarrier; - uint32_t slmSize; -- MHW_INLINE_DATA_PARAMS inlineDataParams[MAX_INLINE_DATA_PARAMS]; -- uint32_t inlineDataParamNum; -+ PMHW_INLINE_DATA_PARAMS inlineDataParamBase; -+ uint32_t inlineDataParamSize; - }KERNEL_WALKER_PARAMS, * PKERNEL_WALKER_PARAMS; - - typedef struct _KERNEL_PACKET_RENDER_DATA -diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp b/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp -index d6630cbd5f..dbd5b12d1d 100644 ---- a/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp -+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.cpp -@@ -740,7 +740,7 @@ void VpRenderKernelObj::DumpSurface(VP_SURFACE* pSurface, PCCHAR fileName) - #endif - } - --MOS_STATUS VpRenderKernelObj::SetInlineDataParameter(KERNEL_WALKER_PARAMS &walkerParam, KRN_ARG args, RENDERHAL_INTERFACE *renderhal) -+MOS_STATUS VpRenderKernelObj::SetInlineDataParameter(KRN_ARG args, RENDERHAL_INTERFACE *renderhal) - { - VP_FUNC_CALL(); - MHW_INLINE_DATA_PARAMS inlineDataPar = {}; -@@ -762,15 +762,10 @@ MOS_STATUS VpRenderKernelObj::SetInlineDataParameter(KERNEL_WALKER_PARAMS &walke - { - inlineDataPar.isPtrType = false; - } -- if (walkerParam.inlineDataParamNum < MAX_INLINE_DATA_PARAMS) -- { -- walkerParam.inlineDataParams[walkerParam.inlineDataParamNum] = inlineDataPar; -- walkerParam.inlineDataParamNum++; -- } -- else -- { -- VP_RENDER_ASSERTMESSAGE("Exceed max inline data params!"); -- } -+ -+ // walkerParam.inlineDataParamBase will add m_inlineDataParams.data() in each kernel -+ // walkerParam.inlineDataParamSize will add m_inlineDataParams.size() in each kernel -+ m_inlineDataParams.push_back(inlineDataPar); - - return MOS_STATUS_SUCCESS; - } -\ No newline at end of file -diff --git a/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h b/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h -index 8b9abf9dca..8d095730cd 100644 ---- a/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h -+++ b/media_softlet/agnostic/common/vp/hal/packet/vp_render_kernel_obj.h -@@ -537,7 +537,7 @@ class VpRenderKernelObj - - virtual MOS_STATUS InitRenderHalSurfaceCMF(MOS_SURFACE* src, PRENDERHAL_SURFACE renderHalSurface); - -- virtual MOS_STATUS SetInlineDataParameter(KERNEL_WALKER_PARAMS &walkerParam, KRN_ARG args, RENDERHAL_INTERFACE *renderhal); -+ virtual MOS_STATUS SetInlineDataParameter(KRN_ARG args, RENDERHAL_INTERFACE *renderhal); - - virtual MOS_STATUS UpdateBindlessSurfaceResource(SurfaceType surf, std::set surfStateOffset) - { -@@ -617,6 +617,7 @@ class VpRenderKernelObj - bool m_useIndependentSamplerGroup = false; //true means multi kernels has their own stand alone sampler states group. only can be true when m_isAdvKernel is true. - - std::shared_ptr m_veboxItf = nullptr; -+ std ::vector m_inlineDataParams = {}; - - MEDIA_CLASS_DEFINE_END(vp__VpRenderKernelObj) - };