diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-08-11 13:21:35 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-08-11 13:21:35 +0200 |
commit | 276a55fd24e2b8f8487616d8e2e981ce8f806312 (patch) | |
tree | 8fe56eb9980c3c41e330fc66843d03916718add9 | |
parent | 868538945b2770d2d719afa608dcc535e39a7b69 (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.c | 7 | ||||
-rw-r--r-- | tests/check/gst/gstsegment.c | 10 |
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, |