From cfb39dbb1b9d88dba45bbd85057fda5d0c06ae66 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Tue, 24 Mar 2009 15:44:42 +0100 Subject: [PATCH] qtdemux: handle FLUSH_STOP event Clean up some state (most notably pad flow returns) to resume proper streaming following flushing seek. --- gst/qtdemux/qtdemux.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index ae69e3f388..6619c43d62 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -1229,6 +1229,20 @@ gst_qtdemux_handle_sink_event (GstPad * sinkpad, GstEvent * event) exit: gst_event_unref (event); res = TRUE; + goto drop; + break; + } + case GST_EVENT_FLUSH_STOP: + { + gint i; + + /* clean up, force EOS if no more info follows */ + gst_adapter_clear (demux->adapter); + demux->offset = 0; + demux->neededbytes = -1; + /* reset flow return, e.g. following seek */ + for (i = 0; i < demux->n_streams; i++) + demux->streams[i]->last_ret = GST_FLOW_OK; break; } case GST_EVENT_EOS: @@ -1239,12 +1253,14 @@ gst_qtdemux_handle_sink_event (GstPad * sinkpad, GstEvent * event) (_("This file contains no playable streams.")), ("no known streams found")); } - /* Fall through */ + break; default: - res = gst_pad_event_default (demux->sinkpad, event); break; } + res = gst_pad_event_default (demux->sinkpad, event); + +drop: return res; }