summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaihao Xiang <haihao.xiang@intel.com>2019-03-29 12:53:38 +0800
committerHaihao Xiang <haihao.xiang@intel.com>2019-03-29 13:13:07 +0800
commit01051e7dfdf603a74f6fe96e114d3721eb763a5b (patch)
tree6d89dc54e51d95a87a11b5b2f466bfc6f5f0cb9c
parent5b0247db334f2da592cadc0cb116e75e2e7962d7 (diff)
downloadgstreamer-plugins-bad-01051e7dfdf603a74f6fe96e114d3721eb763a5b.tar.gz
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.
-rw-r--r--sys/msdk/gstmsdkdec.c7
-rw-r--r--sys/msdk/gstmsdkdec.h3
-rw-r--r--sys/msdk/gstmsdkvp8dec.c4
-rw-r--r--sys/msdk/gstmsdkvp9dec.c4
4 files changed, 13 insertions, 5 deletions
diff --git a/sys/msdk/gstmsdkdec.c b/sys/msdk/gstmsdkdec.c
index 53faaf937..74137c0a5 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 c55e1458d..660c634e4 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 71f8c1da0..ae68f94c8 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 7a9427a44..dcdee0309 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;
}