From 48934764e786351fa6185b9f0ac8f080ed4bce79 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 7 Jun 2010 18:32:16 +0200 Subject: [PATCH] flvdemux: Don't handle non-TIME seeks Don't send them upstream because for upstream a BYTES seek might make sense but is completely wrong because upstream can't seek to a byte position of the audio or video stream. Also don't build the index in push mode for non-TIME seeks, things will go wrong here otherwise. --- gst/flv/gstflvdemux.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c index 492877a52..27796ea68 100644 --- a/gst/flv/gstflvdemux.c +++ b/gst/flv/gstflvdemux.c @@ -2409,13 +2409,24 @@ flv_demux_handle_seek_push (GstFlvDemux * demux, GstEvent * event) wrong_format: { GST_WARNING_OBJECT (demux, "we only support seeking in TIME format"); - return gst_pad_push_event (demux->sinkpad, event); + gst_event_unref (event); + return FALSE; } } static gboolean gst_flv_demux_handle_seek_push (GstFlvDemux * demux, GstEvent * event) { + GstFormat format; + + gst_event_parse_seek (event, NULL, &format, NULL, NULL, NULL, NULL, NULL); + + if (format != GST_FORMAT_TIME) { + GST_WARNING_OBJECT (demux, "we only support seeking in TIME format"); + gst_event_unref (event); + return FALSE; + } + /* First try upstream */ if (gst_pad_push_event (demux->sinkpad, gst_event_ref (event))) { GST_DEBUG_OBJECT (demux, "Upstream successfully seeked"); @@ -2871,8 +2882,10 @@ gst_flv_demux_query (GstPad * pad, GstQuery * query) case GST_QUERY_SEEKING:{ GstFormat fmt; + gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL); + /* First ask upstream */ - if (gst_pad_peer_query (demux->sinkpad, query)) { + if (fmt == GST_FORMAT_TIME && gst_pad_peer_query (demux->sinkpad, query)) { gboolean seekable; gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL); @@ -2881,8 +2894,6 @@ gst_flv_demux_query (GstPad * pad, GstQuery * query) break; } } - - gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL); res = TRUE; if (fmt != GST_FORMAT_TIME || !demux->index) { gst_query_set_seeking (query, fmt, FALSE, -1, -1); -- 2.34.1