From 5a66f35237cf396b20cea60279262e93a8f52bdc Mon Sep 17 00:00:00 2001 From: "Yew, Chang Ching" Date: Wed, 10 Nov 2021 14:20:48 +0800 Subject: onevpl: Add VDSFC CSC support for sample_decode Signed-off-by: Yew, Chang Ching Signed-off-by: Anuj Mittal --- ...-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch | 132 +++++++++++++++++++++ recipes-multimedia/onevpl/onevpl_2021.6.0.bb | 1 + 2 files changed, 133 insertions(+) create mode 100644 recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch (limited to 'recipes-multimedia') diff --git a/recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch b/recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch new file mode 100644 index 00000000..db8baa3e --- /dev/null +++ b/recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch @@ -0,0 +1,132 @@ +From f8d87fc857d5bfd69247c985ed82ba88e167ef30 Mon Sep 17 00:00:00 2001 +From: "Yew, Chang Ching" +Date: Fri, 9 Jul 2021 13:59:33 +0000 +Subject: [PATCH] sample_decode: Add VDSFC CSC for AVC/HEVC + +Upstream-Status: Submitted +innersource PR #289 + +Signed-off-by: Yew, Chang Ching +--- + .../sample_decode/src/pipeline_decode.cpp | 84 +++++++++++++++++-- + 1 file changed, 77 insertions(+), 7 deletions(-) + +diff --git a/tools/legacy/sample_decode/src/pipeline_decode.cpp b/tools/legacy/sample_decode/src/pipeline_decode.cpp +index 4dc811c5..d817ff2a 100644 +--- a/tools/legacy/sample_decode/src/pipeline_decode.cpp ++++ b/tools/legacy/sample_decode/src/pipeline_decode.cpp +@@ -765,6 +765,14 @@ bool CDecodingPipeline::IsVppRequired(sInputParams* pParams) { + if (pParams->eDeinterlace) { + bVppIsUsed = true; + } ++ ++ if ((MODE_DECODER_POSTPROC_AUTO == pParams->nDecoderPostProcessing) || ++ (MODE_DECODER_POSTPROC_FORCE == pParams->nDecoderPostProcessing)) { ++ /* Decoder will make decision about internal post-processing usage slightly later */ ++ if ((pParams->videoType == MFX_CODEC_AVC) || (pParams->videoType == MFX_CODEC_HEVC)) ++ bVppIsUsed = false; ++ } ++ + return bVppIsUsed; + } + +@@ -1014,6 +1022,8 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) { + if (!m_bVppIsUsed) { + if ((m_mfxVideoParams.mfx.FrameInfo.CropW != pParams->Width && pParams->Width) || + (m_mfxVideoParams.mfx.FrameInfo.CropH != pParams->Height && pParams->Height) || ++ (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_AVC) || ++ (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_HEVC) || + (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_JPEG && + pParams->fourcc == MFX_FOURCC_RGB4 && + // No need to use decoder's post processing for decoding of JPEG with RGB 4:4:4 +@@ -1027,7 +1037,10 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) { + if (((MODE_DECODER_POSTPROC_AUTO == pParams->nDecoderPostProcessing) || + (MODE_DECODER_POSTPROC_FORCE == pParams->nDecoderPostProcessing)) && + (MFX_CODEC_AVC == m_mfxVideoParams.mfx.CodecId || +- MFX_CODEC_JPEG == m_mfxVideoParams.mfx.CodecId) && /* Only for AVC and JPEG */ ++ MFX_CODEC_JPEG == m_mfxVideoParams.mfx.CodecId || ++ MFX_CODEC_HEVC == m_mfxVideoParams.mfx.CodecId || ++ MFX_CODEC_VP9 == m_mfxVideoParams.mfx.CodecId || ++ MFX_CODEC_AV1 == m_mfxVideoParams.mfx.CodecId) && + (MFX_PICSTRUCT_PROGRESSIVE == + m_mfxVideoParams.mfx.FrameInfo.PicStruct)) /* ...And only for progressive!*/ + { /* it is possible to use decoder's post-processing */ +@@ -1050,12 +1063,69 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) { + + decPostProcessing->Out.FourCC = m_mfxVideoParams.mfx.FrameInfo.FourCC; + decPostProcessing->Out.ChromaFormat = m_mfxVideoParams.mfx.FrameInfo.ChromaFormat; +- decPostProcessing->Out.Width = MSDK_ALIGN16(pParams->Width); +- decPostProcessing->Out.Height = MSDK_ALIGN16(pParams->Height); +- decPostProcessing->Out.CropX = 0; +- decPostProcessing->Out.CropY = 0; +- decPostProcessing->Out.CropW = pParams->Width; +- decPostProcessing->Out.CropH = pParams->Height; ++ ++ if (pParams->videoType == MFX_CODEC_AVC || pParams->videoType == MFX_CODEC_HEVC) { ++ switch (pParams->fourcc) { ++ case MFX_FOURCC_RGB4: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_RGB4; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444; ++ break; ++ ++ case MFX_FOURCC_NV12: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_NV12; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420; ++ break; ++ ++ case MFX_FOURCC_P010: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_P010; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420; ++ break; ++ ++ case MFX_FOURCC_P016: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_P016; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420; ++ break; ++ ++ case MFX_FOURCC_YUY2: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_YUY2; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422; ++ break; ++ ++ case MFX_FOURCC_Y210: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_Y210; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422; ++ break; ++ ++ case MFX_FOURCC_Y216: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_Y216; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422; ++ break; ++ ++ case MFX_FOURCC_AYUV: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_AYUV; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444; ++ break; ++ ++ case MFX_FOURCC_Y410: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_Y410; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444; ++ break; ++ ++ case MFX_FOURCC_Y416: ++ decPostProcessing->Out.FourCC = MFX_FOURCC_Y416; ++ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444; ++ break; ++ ++ default: ++ break; ++ } ++ } ++ decPostProcessing->Out.Width = MSDK_ALIGN16(pParams->Width); ++ decPostProcessing->Out.Height = MSDK_ALIGN16(pParams->Height); ++ decPostProcessing->Out.CropX = 0; ++ decPostProcessing->Out.CropY = 0; ++ decPostProcessing->Out.CropW = pParams->Width; ++ decPostProcessing->Out.CropH = pParams->Height; + + msdk_printf(MSDK_STRING("Decoder's post-processing is used for resizing\n")); + } +-- +2.33.1 + diff --git a/recipes-multimedia/onevpl/onevpl_2021.6.0.bb b/recipes-multimedia/onevpl/onevpl_2021.6.0.bb index ae198e9a..e586b54e 100644 --- a/recipes-multimedia/onevpl/onevpl_2021.6.0.bb +++ b/recipes-multimedia/onevpl/onevpl_2021.6.0.bb @@ -15,6 +15,7 @@ SRC_URI = "git://github.com/oneapi-src/oneVPL.git;protocol=https;branch=master \ file://0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch \ file://0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch \ file://0001-samples-use-find_program-to-detect-wayland-scanner-i.patch \ + file://0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch \ " SRCREV = "cdf7444dc971544d148c51e0d93a2df1bb55dda7" S = "${WORKDIR}/git" -- cgit v1.2.3-54-g00ecf