onevpl: Add VDSFC CSC support for sample_decode

Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
This commit is contained in:
Yew, Chang Ching 2021-11-10 14:20:48 +08:00 committed by Anuj Mittal
parent ff68bb4952
commit 5a66f35237
2 changed files with 133 additions and 0 deletions

View File

@ -0,0 +1,132 @@
From f8d87fc857d5bfd69247c985ed82ba88e167ef30 Mon Sep 17 00:00:00 2001
From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
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 <chang.ching.yew@intel.com>
---
.../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

View File

@ -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"