vrawdepay: reset depayloader state

Reset the depayloader state on flush-stop.
This commit is contained in:
Wim Taymans 2010-12-21 15:24:18 +01:00
parent eb99eb5515
commit d5c8771b2b

View file

@ -58,6 +58,9 @@ static GstBuffer *gst_rtp_vraw_depay_process (GstBaseRTPDepayload * depayload,
static GstStateChangeReturn gst_rtp_vraw_depay_change_state (GstElement * static GstStateChangeReturn gst_rtp_vraw_depay_change_state (GstElement *
element, GstStateChange transition); element, GstStateChange transition);
static gboolean gst_rtp_vraw_depay_handle_event (GstBaseRTPDepayload * filter,
GstEvent * event);
static void static void
gst_rtp_vraw_depay_base_init (gpointer klass) 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->set_caps = gst_rtp_vraw_depay_setcaps;
gstbasertpdepayload_class->process = gst_rtp_vraw_depay_process; 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, GST_DEBUG_CATEGORY_INIT (rtpvrawdepay_debug, "rtpvrawdepay", 0,
"raw video RTP Depayloader"); "raw video RTP Depayloader");
@ -99,6 +103,16 @@ gst_rtp_vraw_depay_init (GstRtpVRawDepay * rtpvrawdepay,
/* needed because of GST_BOILERPLATE */ /* 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 static gboolean
gst_rtp_vraw_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps) 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 static GstStateChangeReturn
gst_rtp_vraw_depay_change_state (GstElement * element, gst_rtp_vraw_depay_change_state (GstElement * element,
GstStateChange transition) GstStateChange transition)
@ -526,7 +562,7 @@ gst_rtp_vraw_depay_change_state (GstElement * element,
case GST_STATE_CHANGE_NULL_TO_READY: case GST_STATE_CHANGE_NULL_TO_READY:
break; break;
case GST_STATE_CHANGE_READY_TO_PAUSED: case GST_STATE_CHANGE_READY_TO_PAUSED:
rtpvrawdepay->timestamp = -1; gst_rtp_vraw_depay_reset (rtpvrawdepay);
break; break;
default: default:
break; break;
@ -536,10 +572,7 @@ gst_rtp_vraw_depay_change_state (GstElement * element,
switch (transition) { switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY: case GST_STATE_CHANGE_PAUSED_TO_READY:
if (rtpvrawdepay->outbuf) { gst_rtp_vraw_depay_reset (rtpvrawdepay);
gst_buffer_unref (rtpvrawdepay->outbuf);
rtpvrawdepay->outbuf = NULL;
}
break; break;
case GST_STATE_CHANGE_READY_TO_NULL: case GST_STATE_CHANGE_READY_TO_NULL:
break; break;