summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2015-08-28 20:33:40 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2015-08-31 14:42:27 -0400
commitcf1d116b19802d6bde8ae4589d5dd64ecb924945 (patch)
tree8994d4249fa50a966b0b3d2cbc582f1e92168543 /gst
parent1cb3e8c5919e7773232d3ff6a7cc61cbb145298f (diff)
downloadgstreamer-plugins-bad-cf1d116b19802d6bde8ae4589d5dd64ecb924945.tar.gz
pcapparse: Reset state on flush and state changes
https://bugzilla.gnome.org/show_bug.cgi?id=753152
Diffstat (limited to 'gst')
-rw-r--r--gst/pcapparse/gstpcapparse.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/gst/pcapparse/gstpcapparse.c b/gst/pcapparse/gstpcapparse.c
index 11a443e21..23eaff374 100644
--- a/gst/pcapparse/gstpcapparse.c
+++ b/gst/pcapparse/gstpcapparse.c
@@ -36,7 +36,6 @@
*/
/* TODO:
- * - React on state-change and update state accordingly.
* - Implement support for timestamping the buffers.
*/
@@ -604,9 +603,6 @@ out:
if (list)
gst_buffer_list_unref (list);
- if (ret != GST_FLOW_OK)
- gst_pcap_parse_reset (self);
-
return ret;
}
@@ -621,6 +617,9 @@ gst_pcap_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
/* Drop it, we'll replace it with our own */
gst_event_unref (event);
break;
+ case GST_EVENT_FLUSH_STOP:
+ gst_pcap_parse_reset (self);
+ break;
default:
ret = gst_pad_push_event (self->src_pad, event);
break;
@@ -628,3 +627,23 @@ gst_pcap_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
return ret;
}
+
+static GstStateChangeReturn
+gst_pcap_parse_change_state (GstElement * element, GstStateChange transition)
+{
+ GstPcapParse *self = GST_PCAP_PARSE (element);
+ GstStateChangeReturn ret;
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ gst_pcap_parse_reset (element);
+ break;
+ default:
+ break;
+ }
+
+
+ return ret;
+}