mirror of
git://git.yoctoproject.org/meta-intel
synced 2026-01-01 13:58:05 +00:00
onevpl-intel-gpu: Add VDSFC CSC support
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:
parent
5a66f35237
commit
42a15be8a9
|
|
@ -0,0 +1,98 @@
|
|||
From f23ba1b768a4db58ed985a0f066b65d9a65dd61b Mon Sep 17 00:00:00 2001
|
||||
From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
|
||||
Date: Mon, 1 Nov 2021 13:28:06 +0000
|
||||
Subject: [PATCH 2/2] [AVCd] Add frame info check and update ChromaFormat in
|
||||
FillOutputSurface for VDSFC CSC
|
||||
|
||||
Upstream-Status: Submitted
|
||||
innersource PR #3871
|
||||
|
||||
Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
|
||||
---
|
||||
.../decode/h264/src/mfx_h264_dec_decode.cpp | 48 +++++++++----------
|
||||
1 file changed, 24 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/_studio/mfx_lib/decode/h264/src/mfx_h264_dec_decode.cpp b/_studio/mfx_lib/decode/h264/src/mfx_h264_dec_decode.cpp
|
||||
index 84e57f7f18..8e51ad7852 100644
|
||||
--- a/_studio/mfx_lib/decode/h264/src/mfx_h264_dec_decode.cpp
|
||||
+++ b/_studio/mfx_lib/decode/h264/src/mfx_h264_dec_decode.cpp
|
||||
@@ -1140,12 +1140,8 @@ mfxStatus VideoDECODEH264::DecodeFrameCheck(mfxBitstream *bs, mfxFrameSurface1 *
|
||||
isVideoProcCscEnabled = true;
|
||||
}
|
||||
#endif
|
||||
- sts = CheckFrameInfoCodecs(&surface_work->Info, MFX_CODEC_AVC);
|
||||
- //Decode CSC support more FourCC format, already checked in Init, skip the check return;
|
||||
- if(!isVideoProcCscEnabled)
|
||||
- {
|
||||
- MFX_CHECK(sts == MFX_ERR_NONE, MFX_ERR_UNSUPPORTED);
|
||||
- }
|
||||
+ sts = isVideoProcCscEnabled ? CheckFrameInfoDecVideoProcCsc(&surface_work->Info, MFX_CODEC_AVC) : CheckFrameInfoCodecs(&surface_work->Info, MFX_CODEC_AVC);
|
||||
+ MFX_CHECK(sts == MFX_ERR_NONE, MFX_ERR_INVALID_VIDEO_PARAM)
|
||||
|
||||
sts = CheckFrameData(surface_work);
|
||||
MFX_CHECK_STS(sts);
|
||||
@@ -1420,11 +1416,6 @@ void VideoDECODEH264::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
|
||||
}
|
||||
#endif
|
||||
|
||||
- surface_out->Info.CropH = (mfxU16)(pFrame->lumaSize().height - pFrame->m_crop_bottom - pFrame->m_crop_top);
|
||||
- surface_out->Info.CropW = (mfxU16)(pFrame->lumaSize().width - pFrame->m_crop_right - pFrame->m_crop_left);
|
||||
- surface_out->Info.CropX = (mfxU16)(pFrame->m_crop_left);
|
||||
- surface_out->Info.CropY = (mfxU16)(pFrame->m_crop_top);
|
||||
-
|
||||
#ifndef MFX_DEC_VIDEO_POSTPROCESS_DISABLE
|
||||
mfxExtDecVideoProcessing * videoProcessing = (mfxExtDecVideoProcessing *)GetExtendedBuffer(m_vFirstPar.ExtParam, m_vFirstPar.NumExtParam, MFX_EXTBUFF_DEC_VIDEO_PROCESSING);
|
||||
if (videoProcessing)
|
||||
@@ -1433,8 +1424,28 @@ void VideoDECODEH264::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
|
||||
surface_out->Info.CropW = videoProcessing->Out.CropW;
|
||||
surface_out->Info.CropX = videoProcessing->Out.CropX;
|
||||
surface_out->Info.CropY = videoProcessing->Out.CropY;
|
||||
- }
|
||||
+ surface_out->Info.ChromaFormat = videoProcessing->Out.ChromaFormat;
|
||||
+ } else
|
||||
#endif
|
||||
+ {
|
||||
+ surface_out->Info.CropH = (mfxU16)(pFrame->lumaSize().height - pFrame->m_crop_bottom - pFrame->m_crop_top);
|
||||
+ surface_out->Info.CropW = (mfxU16)(pFrame->lumaSize().width - pFrame->m_crop_right - pFrame->m_crop_left);
|
||||
+ surface_out->Info.CropX = (mfxU16)(pFrame->m_crop_left);
|
||||
+ surface_out->Info.CropY = (mfxU16)(pFrame->m_crop_top);
|
||||
+
|
||||
+ switch(pFrame->m_chroma_format)
|
||||
+ {
|
||||
+ case 0:
|
||||
+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV400;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
|
||||
+ break;
|
||||
+ default:
|
||||
+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
bool isShouldUpdate = !(m_vFirstPar.mfx.FrameInfo.AspectRatioH || m_vFirstPar.mfx.FrameInfo.AspectRatioW);
|
||||
|
||||
@@ -1447,18 +1458,7 @@ void VideoDECODEH264::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
|
||||
surface_out->Info.FrameRateExtN = isShouldUpdate ? m_vPar.mfx.FrameInfo.FrameRateExtN : m_vFirstPar.mfx.FrameInfo.FrameRateExtN;
|
||||
|
||||
surface_out->Info.PicStruct = 0;
|
||||
- switch(pFrame->m_chroma_format)
|
||||
- {
|
||||
- case 0:
|
||||
- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV400;
|
||||
- break;
|
||||
- case 2:
|
||||
- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
|
||||
- break;
|
||||
- default:
|
||||
- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
|
||||
- break;
|
||||
- }
|
||||
+
|
||||
|
||||
switch (pFrame->m_displayPictureStruct)
|
||||
{
|
||||
--
|
||||
2.33.1
|
||||
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
From 99160958668fd4a170cd749492e37ebdb28dae69 Mon Sep 17 00:00:00 2001
|
||||
From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
|
||||
Date: Thu, 23 Sep 2021 21:34:16 +0000
|
||||
Subject: [PATCH 1/2] [HEVCd] Add frame info check and update ChromaFormat in
|
||||
FillOutputSurface for VDSFC CSC
|
||||
|
||||
Upstream-Status: Submitted
|
||||
innersource PR #3871
|
||||
|
||||
Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
|
||||
---
|
||||
.../decode/h265/src/mfx_h265_dec_decode.cpp | 64 +++++++++++--------
|
||||
.../mfx_lib/shared/include/mfx_common_int.h | 1 +
|
||||
_studio/mfx_lib/shared/src/mfx_common_int.cpp | 33 ++++++++++
|
||||
3 files changed, 71 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/_studio/mfx_lib/decode/h265/src/mfx_h265_dec_decode.cpp b/_studio/mfx_lib/decode/h265/src/mfx_h265_dec_decode.cpp
|
||||
index fe2bcf2c3f..362ad257d6 100644
|
||||
--- a/_studio/mfx_lib/decode/h265/src/mfx_h265_dec_decode.cpp
|
||||
+++ b/_studio/mfx_lib/decode/h265/src/mfx_h265_dec_decode.cpp
|
||||
@@ -963,8 +963,16 @@ mfxStatus VideoDECODEH265::DecodeFrameCheck(mfxBitstream *bs, mfxFrameSurface1 *
|
||||
|
||||
if (surface_work)
|
||||
{
|
||||
- sts = CheckFrameInfoCodecs(&surface_work->Info, MFX_CODEC_HEVC);
|
||||
- MFX_CHECK(sts == MFX_ERR_NONE, MFX_ERR_INVALID_VIDEO_PARAM);
|
||||
+ bool isVideoProcCscEnabled = false;
|
||||
+#ifndef MFX_DEC_VIDEO_POSTPROCESS_DISABLE
|
||||
+ mfxExtDecVideoProcessing* videoProcessing = (mfxExtDecVideoProcessing*)GetExtendedBuffer(m_vInitPar.ExtParam, m_vInitPar.NumExtParam, MFX_EXTBUFF_DEC_VIDEO_PROCESSING);
|
||||
+ if (videoProcessing && videoProcessing->Out.FourCC != m_vPar.mfx.FrameInfo.FourCC)
|
||||
+ {
|
||||
+ isVideoProcCscEnabled = true;
|
||||
+ }
|
||||
+#endif
|
||||
+ sts = isVideoProcCscEnabled ? CheckFrameInfoDecVideoProcCsc(&surface_work->Info, MFX_CODEC_HEVC) : CheckFrameInfoCodecs(&surface_work->Info, MFX_CODEC_HEVC);
|
||||
+ MFX_CHECK(sts == MFX_ERR_NONE, MFX_ERR_INVALID_VIDEO_PARAM)
|
||||
|
||||
sts = CheckFrameData(surface_work);
|
||||
MFX_CHECK_STS(sts);
|
||||
@@ -1172,11 +1180,6 @@ void VideoDECODEH265::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
|
||||
|
||||
surface_out->Info.FrameId.TemporalId = 0;
|
||||
|
||||
- surface_out->Info.CropH = (mfxU16)(pFrame->lumaSize().height - pFrame->m_crop_bottom - pFrame->m_crop_top);
|
||||
- surface_out->Info.CropW = (mfxU16)(pFrame->lumaSize().width - pFrame->m_crop_right - pFrame->m_crop_left);
|
||||
- surface_out->Info.CropX = (mfxU16)(pFrame->m_crop_left);
|
||||
- surface_out->Info.CropY = (mfxU16)(pFrame->m_crop_top);
|
||||
-
|
||||
#ifndef MFX_DEC_VIDEO_POSTPROCESS_DISABLE
|
||||
mfxExtDecVideoProcessing * videoProcessing = (mfxExtDecVideoProcessing *)GetExtendedBuffer(m_vFirstPar.ExtParam, m_vFirstPar.NumExtParam, MFX_EXTBUFF_DEC_VIDEO_PROCESSING);
|
||||
if (videoProcessing)
|
||||
@@ -1185,8 +1188,35 @@ void VideoDECODEH265::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
|
||||
surface_out->Info.CropW = videoProcessing->Out.CropW;
|
||||
surface_out->Info.CropX = videoProcessing->Out.CropX;
|
||||
surface_out->Info.CropY = videoProcessing->Out.CropY;
|
||||
+ surface_out->Info.ChromaFormat = videoProcessing->Out.ChromaFormat;
|
||||
}
|
||||
+ else
|
||||
#endif
|
||||
+ {
|
||||
+ surface_out->Info.CropH = (mfxU16)(pFrame->lumaSize().height - pFrame->m_crop_bottom - pFrame->m_crop_top);
|
||||
+ surface_out->Info.CropW = (mfxU16)(pFrame->lumaSize().width - pFrame->m_crop_right - pFrame->m_crop_left);
|
||||
+ surface_out->Info.CropX = (mfxU16)(pFrame->m_crop_left);
|
||||
+ surface_out->Info.CropY = (mfxU16)(pFrame->m_crop_top);
|
||||
+
|
||||
+ switch(pFrame->m_chroma_format)
|
||||
+ {
|
||||
+ case 0:
|
||||
+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV400;
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
|
||||
+ break;
|
||||
+ default:
|
||||
+ VM_ASSERT(!"Unknown chroma format");
|
||||
+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
bool isShouldUpdate = !(m_vFirstPar.mfx.FrameInfo.AspectRatioH || m_vFirstPar.mfx.FrameInfo.AspectRatioW);
|
||||
|
||||
@@ -1198,26 +1228,6 @@ void VideoDECODEH265::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
|
||||
surface_out->Info.FrameRateExtD = isShouldUpdate ? m_vPar.mfx.FrameInfo.FrameRateExtD : m_vFirstPar.mfx.FrameInfo.FrameRateExtD;
|
||||
surface_out->Info.FrameRateExtN = isShouldUpdate ? m_vPar.mfx.FrameInfo.FrameRateExtN : m_vFirstPar.mfx.FrameInfo.FrameRateExtN;
|
||||
|
||||
- surface_out->Info.PicStruct = 0;
|
||||
- switch(pFrame->m_chroma_format)
|
||||
- {
|
||||
- case 0:
|
||||
- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV400;
|
||||
- break;
|
||||
- case 1:
|
||||
- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
|
||||
- break;
|
||||
- case 2:
|
||||
- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
|
||||
- break;
|
||||
- case 3:
|
||||
- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
|
||||
- break;
|
||||
- default:
|
||||
- VM_ASSERT(!"Unknown chroma format");
|
||||
- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
|
||||
- }
|
||||
-
|
||||
surface_out->Info.PicStruct =
|
||||
UMC2MFX_PicStruct(pFrame->m_DisplayPictureStruct_H265, !!m_vPar.mfx.ExtendedPicStruct);
|
||||
|
||||
diff --git a/_studio/mfx_lib/shared/include/mfx_common_int.h b/_studio/mfx_lib/shared/include/mfx_common_int.h
|
||||
index 4f12ddb883..73f4667a18 100644
|
||||
--- a/_studio/mfx_lib/shared/include/mfx_common_int.h
|
||||
+++ b/_studio/mfx_lib/shared/include/mfx_common_int.h
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
mfxStatus CheckFrameInfoCommon(mfxFrameInfo *info, mfxU32 codecId);
|
||||
mfxStatus CheckFrameInfoEncoders(mfxFrameInfo *info);
|
||||
+mfxStatus CheckFrameInfoDecVideoProcCsc(mfxFrameInfo *info, mfxU32 codecId);
|
||||
mfxStatus CheckFrameInfoCodecs(mfxFrameInfo *info, mfxU32 codecId = MFX_CODEC_AVC);
|
||||
|
||||
mfxStatus CheckVideoParamEncoders(mfxVideoParam *in, eMFXHWType type);
|
||||
diff --git a/_studio/mfx_lib/shared/src/mfx_common_int.cpp b/_studio/mfx_lib/shared/src/mfx_common_int.cpp
|
||||
index 1142457f00..4f2126d944 100644
|
||||
--- a/_studio/mfx_lib/shared/src/mfx_common_int.cpp
|
||||
+++ b/_studio/mfx_lib/shared/src/mfx_common_int.cpp
|
||||
@@ -163,6 +163,39 @@ mfxStatus CheckFrameInfoEncoders(mfxFrameInfo *info)
|
||||
return MFX_ERR_NONE;
|
||||
}
|
||||
|
||||
+mfxStatus CheckFrameInfoDecVideoProcCsc(mfxFrameInfo *info, mfxU32 codecId)
|
||||
+{
|
||||
+ mfxStatus sts = CheckFrameInfoCommon(info, codecId);
|
||||
+ MFX_CHECK_STS(sts);
|
||||
+
|
||||
+ switch(info->FourCC) {
|
||||
+ case MFX_FOURCC_NV12:
|
||||
+ case MFX_FOURCC_P010:
|
||||
+ case MFX_FOURCC_P016:
|
||||
+ if (info->ChromaFormat == MFX_CHROMAFORMAT_YUV420)
|
||||
+ return MFX_ERR_NONE;
|
||||
+ MFX_RETURN(MFX_ERR_INVALID_VIDEO_PARAM);
|
||||
+
|
||||
+ case MFX_FOURCC_YUY2:
|
||||
+ case MFX_FOURCC_Y210:
|
||||
+ case MFX_FOURCC_Y216:
|
||||
+ if (info->ChromaFormat == MFX_CHROMAFORMAT_YUV422)
|
||||
+ return MFX_ERR_NONE;
|
||||
+ MFX_RETURN(MFX_ERR_INVALID_VIDEO_PARAM);
|
||||
+
|
||||
+ case MFX_FOURCC_AYUV:
|
||||
+ case MFX_FOURCC_Y410:
|
||||
+ case MFX_FOURCC_Y416:
|
||||
+ case MFX_FOURCC_RGB4:
|
||||
+ if (info->ChromaFormat == MFX_CHROMAFORMAT_YUV444)
|
||||
+ return MFX_ERR_NONE;
|
||||
+ MFX_RETURN(MFX_ERR_INVALID_VIDEO_PARAM);
|
||||
+
|
||||
+ default:
|
||||
+ MFX_RETURN(MFX_ERR_UNSUPPORTED);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
mfxStatus CheckFrameInfoCodecs(mfxFrameInfo *info, mfxU32 codecId)
|
||||
{
|
||||
mfxStatus sts = CheckFrameInfoCommon(info, codecId);
|
||||
--
|
||||
2.33.1
|
||||
|
||||
|
|
@ -19,6 +19,8 @@ DEPENDS += "libdrm libva intel-media-driver onevpl pkgconfig-native"
|
|||
SRC_URI = "git://github.com/oneapi-src/oneVPL-intel-gpu.git;protocol=https;branch=main;lfs=0 \
|
||||
file://0001-jpegd-Enable-JPEG-decode-error-report.patch \
|
||||
file://0001-Adding-missing-device-ID-4692-for-ADL-S.patch \
|
||||
file://0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch \
|
||||
file://0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch \
|
||||
"
|
||||
|
||||
SRCREV = "51608c724044802cc060b7969084126a3e90ca4a"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user