From: "Yew, Chang Ching" <[email protected]>

Signed-off-by: Yew, Chang Ching <[email protected]>
---
 ...nfo-check-and-update-ChromaFormat-in.patch |  98 ++++++++++
 ...info-check-and-update-ChromaFormat-i.patch | 173 ++++++++++++++++++
 .../onevpl/onevpl-intel-gpu_21.3.4.bb         |   2 +
 3 files changed, 273 insertions(+)
 create mode 100644 
recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch
 create mode 100644 
recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch

diff --git 
a/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch
 
b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch
new file mode 100644
index 00000000..3c41c741
--- /dev/null
+++ 
b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch
@@ -0,0 +1,98 @@
+From f23ba1b768a4db58ed985a0f066b65d9a65dd61b Mon Sep 17 00:00:00 2001
+From: "Yew, Chang Ching" <[email protected]>
+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 <[email protected]>
+---
+ .../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
+
diff --git 
a/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch
 
b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch
new file mode 100644
index 00000000..69ce1369
--- /dev/null
+++ 
b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch
@@ -0,0 +1,173 @@
+From 99160958668fd4a170cd749492e37ebdb28dae69 Mon Sep 17 00:00:00 2001
+From: "Yew, Chang Ching" <[email protected]>
+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 <[email protected]>
+---
+ .../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
+
diff --git a/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb 
b/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb
index d0a8b222..864104b2 100644
--- a/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb
+++ b/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb
@@ -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"
-- 
2.33.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#7347): 
https://lists.yoctoproject.org/g/meta-intel/message/7347
Mute This Topic: https://lists.yoctoproject.org/mt/86952158/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/meta-intel/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to