summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Nauwelaerts <manauw@skynet.be>2008-04-14 13:38:32 +0000
committerJan Schmidt <thaytan@mad.scientist.com>2008-04-14 13:38:32 +0000
commit8f2a1c0b5ff915538fe914f98e43f95ca96abb75 (patch)
treeab5d1cb6200ddffd506832723fc29cc28a0d940a
parent2bdd92b2be79ad8edb57cbdfe12ae2ac1c915b6c (diff)
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 <manauw skynet be> Fixes: #526557
-rw-r--r--ChangeLog8
m---------common0
-rw-r--r--gst/matroska/matroska-demux.c19
3 files changed, 19 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 311f396d..127c6038 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-04-14 Jan Schmidt <Jan.Schmidt@sun.com>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_handle_seek_event):
+ Fix open-ended seeks in matroskademux
+ Patch by: Mark Nauwelaerts <manauw skynet be>
+ Fixes: #526557
+
2008-04-14 Jan Schmidt <jan.schmidt@sun.com>
* tests/check/Makefile.am:
diff --git a/common b/common
-Subproject bdc5172b0ba183be6d92e58cb51782c23e9f212
+Subproject f88ff852da7631ad2d0be835763da6d551a6388
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);