diff options
author | Olivier CrĂȘte <olivier.crete@collabora.com> | 2015-08-28 20:33:40 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2015-08-31 14:42:27 -0400 |
commit | cf1d116b19802d6bde8ae4589d5dd64ecb924945 (patch) | |
tree | 8994d4249fa50a966b0b3d2cbc582f1e92168543 /gst/pcapparse/gstpcapparse.c | |
parent | 1cb3e8c5919e7773232d3ff6a7cc61cbb145298f (diff) | |
download | gstreamer-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/pcapparse/gstpcapparse.c')
-rw-r--r-- | gst/pcapparse/gstpcapparse.c | 27 |
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; +} |