From d5c8771b2b6aa26fa1bd015f6deff63042b2b785 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 21 Dec 2010 15:24:18 +0100 Subject: [PATCH] vrawdepay: reset depayloader state Reset the depayloader state on flush-stop. --- gst/rtp/gstrtpvrawdepay.c | 43 ++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/gst/rtp/gstrtpvrawdepay.c b/gst/rtp/gstrtpvrawdepay.c index 54a4b52875..aa2cbfaa1c 100644 --- a/gst/rtp/gstrtpvrawdepay.c +++ b/gst/rtp/gstrtpvrawdepay.c @@ -58,6 +58,9 @@ static GstBuffer *gst_rtp_vraw_depay_process (GstBaseRTPDepayload * depayload, static GstStateChangeReturn gst_rtp_vraw_depay_change_state (GstElement * element, GstStateChange transition); +static gboolean gst_rtp_vraw_depay_handle_event (GstBaseRTPDepayload * filter, + GstEvent * event); + static void gst_rtp_vraw_depay_base_init (gpointer klass) { @@ -87,6 +90,7 @@ gst_rtp_vraw_depay_class_init (GstRtpVRawDepayClass * klass) gstbasertpdepayload_class->set_caps = gst_rtp_vraw_depay_setcaps; gstbasertpdepayload_class->process = gst_rtp_vraw_depay_process; + gstbasertpdepayload_class->handle_event = gst_rtp_vraw_depay_handle_event; GST_DEBUG_CATEGORY_INIT (rtpvrawdepay_debug, "rtpvrawdepay", 0, "raw video RTP Depayloader"); @@ -99,6 +103,16 @@ gst_rtp_vraw_depay_init (GstRtpVRawDepay * rtpvrawdepay, /* needed because of GST_BOILERPLATE */ } +static void +gst_rtp_vraw_depay_reset (GstRtpVRawDepay * rtpvrawdepay) +{ + if (rtpvrawdepay->outbuf) { + gst_buffer_unref (rtpvrawdepay->outbuf); + rtpvrawdepay->outbuf = NULL; + } + rtpvrawdepay->timestamp = -1; +} + static gboolean gst_rtp_vraw_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps) { @@ -513,6 +527,28 @@ short_packet: } } +static gboolean +gst_rtp_vraw_depay_handle_event (GstBaseRTPDepayload * filter, GstEvent * event) +{ + gboolean ret; + GstRtpVRawDepay *rtpvrawdepay; + + rtpvrawdepay = GST_RTP_VRAW_DEPAY (filter); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_FLUSH_STOP: + gst_rtp_vraw_depay_reset (rtpvrawdepay); + break; + default: + break; + } + + ret = + GST_BASE_RTP_DEPAYLOAD_CLASS (parent_class)->handle_event (filter, event); + + return ret; +} + static GstStateChangeReturn gst_rtp_vraw_depay_change_state (GstElement * element, GstStateChange transition) @@ -526,7 +562,7 @@ gst_rtp_vraw_depay_change_state (GstElement * element, case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: - rtpvrawdepay->timestamp = -1; + gst_rtp_vraw_depay_reset (rtpvrawdepay); break; default: break; @@ -536,10 +572,7 @@ gst_rtp_vraw_depay_change_state (GstElement * element, switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: - if (rtpvrawdepay->outbuf) { - gst_buffer_unref (rtpvrawdepay->outbuf); - rtpvrawdepay->outbuf = NULL; - } + gst_rtp_vraw_depay_reset (rtpvrawdepay); break; case GST_STATE_CHANGE_READY_TO_NULL: break;