diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2010-03-23 17:47:48 +0100 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2010-03-26 11:45:47 +0100 |
commit | b1f3e4d0cfcd9a5940955232a38b6be35e31c89f (patch) | |
tree | 7be37add0a36e093ce3475fa9f31b47974a9f938 | |
parent | 9157c262ba14678be1b39e1cbc52fd88cab7d111 (diff) |
matroskademux: only seek when in proper state
... and data structures can be thread-safely accessed.
See #601617.
-rw-r--r-- | gst/matroska/matroska-demux.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index 9375717ed..d7d69e960 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -2090,7 +2090,6 @@ gst_matroska_demux_send_event (GstMatroskaDemux * demux, GstEvent * event) is_newsegment = (GST_EVENT_TYPE (event) == GST_EVENT_NEWSEGMENT); - /* FIXME: access to demux->src is not thread-safe here */ g_assert (demux->src->len == demux->num_streams); for (i = 0; i < demux->src->len; i++) { GstMatroskaTrackContext *stream; @@ -2153,7 +2152,6 @@ gst_matroska_demux_get_seek_track (GstMatroskaDemux * demux, if (track && track->type == GST_MATROSKA_TRACK_TYPE_VIDEO) return track; - /* FIXME thread safety */ for (i = 0; i < demux->src->len; i++) { GstMatroskaTrackContext *stream; @@ -2231,6 +2229,12 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux, GstSegment seeksegment = { 0, }; gboolean update; + /* no seeking until we are (safely) ready */ + if (demux->state != GST_MATROSKA_DEMUX_STATE_DATA) { + GST_DEBUG_OBJECT (demux, "not ready for seeking yet"); + return FALSE; + } + if (pad) track = gst_pad_get_element_private (pad); |