From afc9d66fbff532c31a1093d1e515235783f0e1e6 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 26 May 2008 13:51:38 +0000 Subject: [PATCH] gst/qtdemux/qtdemux.c: Unbreak segment activation again. Fixes #531672. Original commit message from CVS: * gst/qtdemux/qtdemux.c: (gst_qtdemux_find_segment), (gst_qtdemux_activate_segment): Unbreak segment activation again. Fixes #531672. --- ChangeLog | 6 ++++++ gst/qtdemux/qtdemux.c | 26 +++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index ad659a5c7a..ff27c4e595 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-05-26 Wim Taymans + + * gst/qtdemux/qtdemux.c: (gst_qtdemux_find_segment), + (gst_qtdemux_activate_segment): + Unbreak segment activation again. Fixes #531672. + 2008-05-25 Sebastian Dröge * ext/flac/Makefile.am: diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 655024db13..b521a573e1 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -559,13 +559,21 @@ gst_qtdemux_find_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, gint i; guint32 seg_idx; + GST_LOG_OBJECT (qtdemux, "finding segment for %" GST_TIME_FORMAT, + GST_TIME_ARGS (time_position)); + /* find segment corresponding to time_position if we are looking * for a segment. */ seg_idx = -1; for (i = 0; i < stream->n_segments; i++) { QtDemuxSegment *segment = &stream->segments[i]; - if (segment->time <= time_position && time_position <= segment->stop_time) { + GST_LOG_OBJECT (qtdemux, + "looking at segment %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT, + GST_TIME_ARGS (segment->time), GST_TIME_ARGS (segment->stop_time)); + + if (segment->time <= time_position && time_position < segment->stop_time) { + GST_LOG_OBJECT (qtdemux, "segment %d matches", i); seg_idx = i; break; } @@ -1200,20 +1208,32 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, guint64 start, stop, time; gdouble rate; + GST_LOG_OBJECT (qtdemux, "activate segment %d, offset %" G_GUINT64_FORMAT, + seg_idx, offset); + /* update the current segment */ stream->segment_index = seg_idx; /* get the segment */ segment = &stream->segments[seg_idx]; - if (offset < segment->time) + if (offset < segment->time) { + GST_WARNING_OBJECT (qtdemux, "offset < segment->time %" G_GUINT64_FORMAT, + segment->time); return FALSE; + } /* get time in this segment */ seg_time = offset - segment->time; - if (seg_time > segment->duration) + GST_LOG_OBJECT (qtdemux, "seg_time %" GST_TIME_FORMAT, + GST_TIME_ARGS (seg_time)); + + if (seg_time > segment->duration) { + GST_LOG_OBJECT (qtdemux, "seg_time > segment->duration %" GST_TIME_FORMAT, + GST_TIME_ARGS (segment->duration)); return FALSE; + } /* calc media start/stop */ if (qtdemux->segment.stop == -1)