From 8f2a1c0b5ff915538fe914f98e43f95ca96abb75 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Mon, 14 Apr 2008 13:38:32 +0000 Subject: gst/matroska/matroska-demux.c: Fix open-ended seeks in matroskademux Original commit message from CVS: * gst/matroska/matroska-demux.c: (gst_matroska_demux_handle_seek_event): Fix open-ended seeks in matroskademux Patch by: Mark Nauwelaerts Fixes: #526557 --- gst/matroska/matroska-demux.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'gst') diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index b67d78c4..2b0ea032 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -1397,24 +1397,27 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux, GST_OBJECT_LOCK (demux); /* if nothing configured, play complete file */ - if (cur == GST_CLOCK_TIME_NONE) + if (!GST_CLOCK_TIME_IS_VALID (cur)) cur = 0; - if (stop == GST_CLOCK_TIME_NONE) + if (!GST_CLOCK_TIME_IS_VALID (stop)) stop = demux->segment.duration; + /* prevent some calculations and comparisons involving INVALID */ + segment_start = demux->segment.start; + segment_stop = demux->segment.stop; + if (!GST_CLOCK_TIME_IS_VALID (segment_start)) + segment_start = 0; + if (!GST_CLOCK_TIME_IS_VALID (segment_stop)) + segment_stop = demux->segment.duration; if (cur_type == GST_SEEK_TYPE_SET) segment_start = cur; else if (cur_type == GST_SEEK_TYPE_CUR) - segment_start = demux->segment.start + cur; - else - segment_start = demux->segment.start; + segment_start += cur; if (stop_type == GST_SEEK_TYPE_SET) segment_stop = stop; else if (stop_type == GST_SEEK_TYPE_CUR) - segment_stop = demux->segment.stop + stop; - else - segment_stop = demux->segment.stop; + segment_stop += stop; segment_start = CLAMP (segment_start, 0, demux->segment.duration); segment_stop = CLAMP (segment_stop, 0, demux->segment.duration); -- cgit