diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2009-03-24 15:44:42 +0100 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2009-03-24 15:48:26 +0100 |
commit | cfb39dbb1b9d88dba45bbd85057fda5d0c06ae66 (patch) | |
tree | 095170555263d246cc8eec567a50f6267ef17e0a /gst/qtdemux | |
parent | b0c5c7f19b5b697f74b216175c6acc88ddd29067 (diff) |
qtdemux: handle FLUSH_STOP event
Clean up some state (most notably pad flow returns) to resume
proper streaming following flushing seek.
Diffstat (limited to 'gst/qtdemux')
-rw-r--r-- | gst/qtdemux/qtdemux.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index ae69e3f3..6619c43d 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; } |