msdkdec: don't set unknown picture struct to progressive for vc1
authorHaihao Xiang <haihao.xiang@intel.com>
Fri, 29 Mar 2019 04:53:38 +0000 (12:53 +0800)
committerHaihao Xiang <haihao.xiang@intel.com>
Fri, 29 Mar 2019 05:13:07 +0000 (13:13 +0800)
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
sys/msdk/gstmsdkdec.h
sys/msdk/gstmsdkvp8dec.c
sys/msdk/gstmsdkvp9dec.c

index 53faaf9373e82038d070123f5dbc57d4be379f56..74137c0a5a10f846cacf5ebf0c2aa784ef14431e 100644 (file)
@@ -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;
 }
 
index c55e1458d8f13e233ac50c4bddf790ef4f174bfc..660c634e4a23a1d3241b6aae51403d28abde8e0a 100644 (file)
@@ -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);
 };
 
index 71f8c1da067791e25f71fcad65d2797b1810cc4f..ae68f94c89406057f6203ba47a94389a0aa92ce5 100644 (file)
@@ -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;
 }
 
index 7a9427a44f25623d157287b18e6e0fc33cfe457e..dcdee0309c345fee8a50168829d7a63dd8eaf799 100644 (file)
@@ -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;
 }