From e7b3305f706dabc62b2d7128a4480014c89b8727 Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Wed, 7 Dec 2011 17:57:49 +0000 Subject: [PATCH] baseparse: do not use a byte value instead of a time value when bisecting This fixes FLAC seeking on some FLAC files. --- libs/gst/base/gstbaseparse.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c index c49260c743..9da9b49a02 100644 --- a/libs/gst/base/gstbaseparse.c +++ b/libs/gst/base/gstbaseparse.c @@ -3525,6 +3525,9 @@ gst_base_parse_locate_time (GstBaseParse * parse, GstClockTime * _time, g_return_val_if_fail (_time != NULL, GST_FLOW_ERROR); g_return_val_if_fail (_offset != NULL, GST_FLOW_ERROR); + GST_DEBUG_OBJECT (parse, "Bisecting for time %" GST_TIME_FORMAT, + GST_TIME_ARGS (*_time)); + /* TODO also make keyframe aware if useful some day */ time = *_time; @@ -3547,9 +3550,17 @@ gst_base_parse_locate_time (GstBaseParse * parse, GstClockTime * _time, /* need initial positions; start and end */ lpos = parse->priv->first_frame_offset; ltime = parse->priv->first_frame_ts; - htime = parse->priv->duration; + if (!gst_base_parse_get_duration (parse, GST_FORMAT_TIME, &htime)) { + GST_DEBUG_OBJECT (parse, "Unknown time duration, cannot bisect"); + return GST_FLOW_ERROR; + } hpos = parse->priv->upstream_size; + GST_DEBUG_OBJECT (parse, + "Bisection initial bounds: bytes %" G_GINT64_FORMAT " %" G_GINT64_FORMAT + ", times %" GST_TIME_FORMAT " %" GST_TIME_FORMAT, lpos, htime, + GST_TIME_ARGS (ltime), GST_TIME_ARGS (htime)); + /* check preconditions are satisfied; * start and end are needed, except for special case where we scan for * last frame to determine duration */