mpeg2: clear buffers and PTSGenerator on GST_EVENT_FLUSH_STOP
authorWind Yuan <feng.yuan@intel.com>
Wed, 5 Dec 2012 07:04:25 +0000 (15:04 +0800)
committerzhongcong <congx.zhong@intel.com>
Thu, 28 Feb 2013 08:17:33 +0000 (16:17 +0800)
Change-Id: I7f7561805f9efd1513d5f1a04308c2b39ce986c8

gst-libs/gst/vaapi/gstvaapidecoder_mpeg2.c

index 8bdb13f..de750fa 100644 (file)
@@ -274,6 +274,29 @@ static const VLCTable mpeg2_mbaddr_vlc_table[] = {
 };
 
 static void
+gst_vaapi_decoder_mpeg2_clear_buffer(GstVaapiDecoder *base)
+{
+    GstVaapiDecoderMpeg2* const decoder = GST_VAAPI_DECODER_MPEG2(base);
+    GstVaapiDecoderMpeg2Private * const priv = decoder->priv;
+
+    priv->closed_gop            = FALSE;
+    priv->broken_link           = FALSE;
+
+    gst_vaapi_picture_replace(&priv->current_picture, NULL);
+
+    pts_init(&priv->tsg);
+    pts_set_framerate(&priv->tsg, priv->fps_n, priv->fps_d);
+
+    if (priv->dpb) {
+        gst_vaapi_dpb_flush(priv->dpb);
+    }
+
+    if (priv->adapter) {
+        gst_adapter_clear(priv->adapter);
+    }
+}
+
+static void
 gst_vaapi_decoder_mpeg2_close(GstVaapiDecoderMpeg2 *decoder)
 {
     GstVaapiDecoderMpeg2Private * const priv = decoder->priv;
@@ -1157,6 +1180,7 @@ gst_vaapi_decoder_mpeg2_class_init(GstVaapiDecoderMpeg2Class *klass)
     object_class->constructed   = gst_vaapi_decoder_mpeg2_constructed;
 
     decoder_class->decode       = gst_vaapi_decoder_mpeg2_decode;
+    decoder_class->clear_buffer = gst_vaapi_decoder_mpeg2_clear_buffer;
 }
 
 static void