summaryrefslogtreecommitdiffstats
path: root/gst/qtdemux
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-03-24 15:44:42 +0100
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-03-24 15:48:26 +0100
commitcfb39dbb1b9d88dba45bbd85057fda5d0c06ae66 (patch)
tree095170555263d246cc8eec567a50f6267ef17e0a /gst/qtdemux
parentb0c5c7f19b5b697f74b216175c6acc88ddd29067 (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.c20
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;
}