From f23ba1b768a4db58ed985a0f066b65d9a65dd61b Mon Sep 17 00:00:00 2001 From: "Yew, Chang Ching" 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 --- .../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