From 01051e7dfdf603a74f6fe96e114d3721eb763a5b Mon Sep 17 00:00:00 2001 From: Haihao Xiang Date: Fri, 29 Mar 2019 12:53:38 +0800 Subject: [PATCH] msdkdec: don't set unknown picture struct to progressive for vc1 MFXVideoDECODE_DecodeHeader only parses the sequence layer for VC1, so the structure is unknown for a stream with interlace flag set in the sequence layer. If forcing the struct to progressive in this plugin, MediaSDK will fail to decode such streams. --- sys/msdk/gstmsdkdec.c | 7 ++++--- sys/msdk/gstmsdkdec.h | 3 +-- sys/msdk/gstmsdkvp8dec.c | 4 ++++ sys/msdk/gstmsdkvp9dec.c | 4 ++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/sys/msdk/gstmsdkdec.c b/sys/msdk/gstmsdkdec.c index 53faaf9373..74137c0a5a 100644 --- a/sys/msdk/gstmsdkdec.c +++ b/sys/msdk/gstmsdkdec.c @@ -319,9 +319,6 @@ gst_msdkdec_init_decoder (GstMsdkDec * thiz) thiz->param.mfx.FrameInfo.AspectRatioH = info->par_d; } - thiz->param.mfx.FrameInfo.PicStruct = - thiz->param.mfx.FrameInfo.PicStruct ? thiz->param.mfx. - FrameInfo.PicStruct : MFX_PICSTRUCT_PROGRESSIVE; thiz->param.mfx.FrameInfo.FourCC = thiz->param.mfx.FrameInfo.FourCC ? thiz->param.mfx. FrameInfo.FourCC : MFX_FOURCC_NV12; @@ -1468,6 +1465,10 @@ gst_msdkdec_preinit_decoder (GstMsdkDec * decoder) decoder->param.mfx.FrameInfo.Height = GST_ROUND_UP_32 (decoder->param.mfx.FrameInfo.Height); + decoder->param.mfx.FrameInfo.PicStruct = + decoder->param.mfx.FrameInfo.PicStruct ? decoder->param.mfx. + FrameInfo.PicStruct : MFX_PICSTRUCT_PROGRESSIVE; + return TRUE; } diff --git a/sys/msdk/gstmsdkdec.h b/sys/msdk/gstmsdkdec.h index c55e1458d8..660c634e4a 100644 --- a/sys/msdk/gstmsdkdec.h +++ b/sys/msdk/gstmsdkdec.h @@ -108,8 +108,7 @@ struct _GstMsdkDecClass gboolean (*configure) (GstMsdkDec * decoder); - /* reset mfx parameters per codec, currently it is only used for - * the alignment exception for frame width and height */ + /* reset mfx parameters per codec */ gboolean (*preinit_decoder) (GstMsdkDec * decoder); }; diff --git a/sys/msdk/gstmsdkvp8dec.c b/sys/msdk/gstmsdkvp8dec.c index 71f8c1da06..ae68f94c89 100644 --- a/sys/msdk/gstmsdkvp8dec.c +++ b/sys/msdk/gstmsdkvp8dec.c @@ -140,6 +140,10 @@ gst_msdkvp8dec_preinit_decoder (GstMsdkDec * decoder) decoder->param.mfx.FrameInfo.Height = GST_ROUND_UP_16 (decoder->param.mfx.FrameInfo.Height); + decoder->param.mfx.FrameInfo.PicStruct = + decoder->param.mfx.FrameInfo.PicStruct ? decoder->param.mfx. + FrameInfo.PicStruct : MFX_PICSTRUCT_PROGRESSIVE; + return TRUE; } diff --git a/sys/msdk/gstmsdkvp9dec.c b/sys/msdk/gstmsdkvp9dec.c index 7a9427a44f..dcdee0309c 100644 --- a/sys/msdk/gstmsdkvp9dec.c +++ b/sys/msdk/gstmsdkvp9dec.c @@ -156,6 +156,10 @@ gst_msdkvp9dec_preinit_decoder (GstMsdkDec * decoder) decoder->param.mfx.FrameInfo.Height = GST_ROUND_UP_16 (decoder->param.mfx.FrameInfo.Height); + decoder->param.mfx.FrameInfo.PicStruct = + decoder->param.mfx.FrameInfo.PicStruct ? decoder->param.mfx. + FrameInfo.PicStruct : MFX_PICSTRUCT_PROGRESSIVE; + return TRUE; }