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)
{
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");
/* 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)
{
}
}
+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)
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;
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;