this can skip (incorrect) slice parsing and frame decoding until next valid header, fix https://bugs.freedesktop.org/show_bug.cgi?id=57902 --- gst-libs/gst/vaapi/gstvaapidecoder_h264.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) mode change 100644 => 100755 gst-libs/gst/vaapi/gstvaapidecoder_h264.c
diff --git a/gst-libs/gst/vaapi/gstvaapidecoder_h264.c b/gst-libs/gst/vaapi/gstvaapidecoder_h264.c old mode 100644 new mode 100755 index 3f8bb84..80839b0 --- a/gst-libs/gst/vaapi/gstvaapidecoder_h264.c +++ b/gst-libs/gst/vaapi/gstvaapidecoder_h264.c @@ -1175,8 +1175,10 @@ decode_sps(GstVaapiDecoderH264 *decoder, GstH264NalUnit *nalu) memset(sps, 0, sizeof(*sps)); result = gst_h264_parser_parse_sps(priv->parser, nalu, sps, TRUE); - if (result != GST_H264_PARSER_OK) + if (result != GST_H264_PARSER_OK) { + priv->got_sps = FALSE; return get_status(result); + } priv->got_sps = TRUE; return GST_VAAPI_DECODER_STATUS_SUCCESS; @@ -1193,8 +1195,10 @@ decode_pps(GstVaapiDecoderH264 *decoder, GstH264NalUnit *nalu) memset(pps, 0, sizeof(*pps)); result = gst_h264_parser_parse_pps(priv->parser, nalu, pps); - if (result != GST_H264_PARSER_OK) + if (result != GST_H264_PARSER_OK) { + priv->got_pps = FALSE; return get_status(result); + } priv->got_pps = TRUE; return GST_VAAPI_DECODER_STATUS_SUCCESS; @@ -3244,6 +3248,8 @@ gst_vaapi_decoder_h264_init(GstVaapiDecoderH264 *decoder) priv->is_avc = FALSE; priv->has_context = FALSE; priv->progressive_sequence = TRUE; + priv->got_sps = FALSE; + priv->got_pps = FALSE; memset(priv->dpb, 0, sizeof(priv->dpb)); memset(priv->short_ref, 0, sizeof(priv->short_ref)); -- 1.7.9.5 _______________________________________________ Libva mailing list Libva@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libva