summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2009-08-11 13:21:35 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-08-11 13:21:35 +0200
commit276a55fd24e2b8f8487616d8e2e981ce8f806312 (patch)
tree8fe56eb9980c3c41e330fc66843d03916718add9
parent868538945b2770d2d719afa608dcc535e39a7b69 (diff)
gstsegment: Actually start==stop==segment_start is inside the segment
Still the old code was wrong as it claimed that start==stop<segment_start would be inside the segment and returned insane clipping differences.
-rw-r--r--gst/gstsegment.c7
-rw-r--r--tests/check/gst/gstsegment.c10
2 files changed, 13 insertions, 4 deletions
diff --git a/gst/gstsegment.c b/gst/gstsegment.c
index 25d92a79d8..c1527c0f00 100644
--- a/gst/gstsegment.c
+++ b/gst/gstsegment.c
@@ -737,8 +737,11 @@ gst_segment_clip (GstSegment * segment, GstFormat format, gint64 start,
return FALSE;
/* if a stop position is given and is before the segment start,
- * we're outside of the segment */
- if (G_UNLIKELY (stop != -1 && stop <= segment->start))
+ * we're outside of the segment. Special case is were start
+ * and stop are equal to the segment start. In that case we
+ * are inside the segment. */
+ if (G_UNLIKELY (stop != -1 && (stop < segment->start || (start != stop
+ && stop == segment->start))))
return FALSE;
if (clip_start) {
diff --git a/tests/check/gst/gstsegment.c b/tests/check/gst/gstsegment.c
index ec370651ab..2c7b42bbcb 100644
--- a/tests/check/gst/gstsegment.c
+++ b/tests/check/gst/gstsegment.c
@@ -73,10 +73,16 @@ GST_START_TEST (segment_seek_nosize)
fail_unless (cstart == 100);
fail_unless (cstop == 150);
- /* special case, 0 duration and touching lower bound */
+ /* special case, 0 duration and outside segment */
+ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 90, 90, &cstart, &cstop);
+ fail_unless (res == FALSE);
+
+ /* special case, 0 duration and touching lower bound, i.e. inside segment */
res = gst_segment_clip (&segment, GST_FORMAT_BYTES,
100, 100, &cstart, &cstop);
- fail_unless (res == FALSE);
+ fail_unless (res == TRUE);
+ fail_unless (cstart == 100);
+ fail_unless (cstop == 100);
/* special case, 0 duration and inside the segment */
res = gst_segment_clip (&segment, GST_FORMAT_BYTES,