From f65a1d384e7529d61cb9f5d78d980c199aba5182 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Tue, 19 Dec 2006 12:38:00 +0000 Subject: [PATCH] gst/gstsegment.c: Fine tune the cases where the segment start/stop values are really updated. Original commit message from CVS: * gst/gstsegment.c: (gst_segment_set_seek): Fine tune the cases where the segment start/stop values are really updated. * tests/check/gst/gstsegment.c: (GST_START_TEST): Add tests for the return values of gst_segment_set_seek(). --- ChangeLog | 8 ++++++++ gst/gstsegment.c | 20 ++++++++++++++++---- tests/check/gst/gstsegment.c | 15 +++++++++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index c7aec3b..e7a532c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-12-19 Edward Hervey + + * gst/gstsegment.c: (gst_segment_set_seek): + Fine tune the cases where the segment start/stop values are really + updated. + * tests/check/gst/gstsegment.c: (GST_START_TEST): + Add tests for the return values of gst_segment_set_seek(). + 2006-12-19 Tim-Philipp Müller * gst/gst.c: diff --git a/gst/gstsegment.c b/gst/gstsegment.c index 05b0d07..450b2b9 100644 --- a/gst/gstsegment.c +++ b/gst/gstsegment.c @@ -285,14 +285,20 @@ gst_segment_set_seek (GstSegment * segment, gdouble rate, /* start holds desired position, map -1 to the start */ if (start == -1) start = 0; + if (start == segment->start) + update_start = FALSE; break; case GST_SEEK_TYPE_CUR: /* add start to currently configure segment */ + if (start == 0) + update_start = FALSE; start = segment->start + start; break; case GST_SEEK_TYPE_END: if (segment->duration != -1) { /* add start to total length */ + if (start == 0) + update_start = FALSE; start = segment->duration + start; } else { /* no update if duration unknown */ @@ -317,15 +323,21 @@ gst_segment_set_seek (GstSegment * segment, gdouble rate, /* stop holds required value */ break; case GST_SEEK_TYPE_CUR: - if (segment->stop != -1) + if (segment->stop != -1) { + if (stop == 0) + update_stop = FALSE; stop = segment->stop + stop; - else + } else { stop = -1; + update_stop = FALSE; + } break; case GST_SEEK_TYPE_END: - if (segment->duration != -1) + if (segment->duration != -1) { + if (stop == 0) + update_stop = FALSE; stop = segment->duration + stop; - else { + } else { stop = segment->stop; update_stop = FALSE; } diff --git a/tests/check/gst/gstsegment.c b/tests/check/gst/gstsegment.c index 7dcec33..0b7a246 100644 --- a/tests/check/gst/gstsegment.c +++ b/tests/check/gst/gstsegment.c @@ -38,6 +38,7 @@ GST_START_TEST (segment_seek_nosize) GST_SEEK_TYPE_SET, 100, GST_SEEK_TYPE_NONE, -1, &update); fail_unless (segment.start == 100); fail_unless (segment.stop == -1); + fail_unless (update == TRUE); /* configure segment to stop relative, should not do anything since * size is unknown. */ @@ -47,6 +48,7 @@ GST_START_TEST (segment_seek_nosize) GST_SEEK_TYPE_NONE, 200, GST_SEEK_TYPE_CUR, -100, &update); fail_unless (segment.start == 100); fail_unless (segment.stop == -1); + fail_unless (update == FALSE); /* do some clipping on the open range */ /* completely outside */ @@ -113,7 +115,9 @@ GST_START_TEST (segment_seek_nosize) GST_SEEK_TYPE_CUR, 100, GST_SEEK_TYPE_SET, 300, &update); fail_unless (segment.start == 200); fail_unless (segment.stop == 300); + fail_unless (update == TRUE); + update = FALSE; /* add 100 to start (to 300), set stop to 200, this is not allowed. * nothing should be updated in the segment. A g_warning is * emited. */ @@ -123,7 +127,10 @@ GST_START_TEST (segment_seek_nosize) GST_SEEK_TYPE_CUR, 100, GST_SEEK_TYPE_SET, 200, &update)); fail_unless (segment.start == 200); fail_unless (segment.stop == 300); + /* update didn't change */ + fail_unless (update == FALSE); + update = TRUE; /* seek relative to end, should not do anything since size is * unknown. */ gst_segment_set_seek (&segment, 1.0, @@ -132,6 +139,7 @@ GST_START_TEST (segment_seek_nosize) GST_SEEK_TYPE_END, -300, GST_SEEK_TYPE_END, -100, &update); fail_unless (segment.start == 200); fail_unless (segment.stop == 300); + fail_unless (update == FALSE); /* completely outside */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 0, 50, &cstart, &cstop); @@ -219,6 +227,7 @@ GST_START_TEST (segment_seek_size) GST_SEEK_TYPE_SET, 100, GST_SEEK_TYPE_NONE, -1, &update); fail_unless (segment.start == 100); fail_unless (segment.stop == -1); + fail_unless (update == TRUE); /* configure segment to stop relative, does not update stop * since we did not set it before. */ @@ -228,6 +237,7 @@ GST_START_TEST (segment_seek_size) GST_SEEK_TYPE_NONE, 200, GST_SEEK_TYPE_CUR, -100, &update); fail_unless (segment.start == 100); fail_unless (segment.stop == -1); + fail_unless (update == FALSE); /* do some clipping on the open range */ /* completely outside */ @@ -303,6 +313,7 @@ GST_START_TEST (segment_seek_size) GST_SEEK_TYPE_CUR, 100, GST_SEEK_TYPE_SET, 200, &update); fail_unless (segment.start == 200); fail_unless (segment.stop == 200); + fail_unless (update == TRUE); /* seek relative to end */ gst_segment_set_seek (&segment, 1.0, @@ -311,6 +322,7 @@ GST_START_TEST (segment_seek_size) GST_SEEK_TYPE_END, -100, GST_SEEK_TYPE_END, -20, &update); fail_unless (segment.start == 100); fail_unless (segment.stop == 180); + fail_unless (update == TRUE); /* completely outside */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 0, 50, &cstart, &cstop); @@ -397,6 +409,7 @@ GST_START_TEST (segment_seek_reverse) fail_unless (segment.stop == 100); fail_unless (segment.time == 0); fail_unless (segment.last_stop == 100); + fail_unless (update == TRUE); /* update */ gst_segment_set_seek (&segment, -1.0, @@ -407,6 +420,7 @@ GST_START_TEST (segment_seek_reverse) fail_unless (segment.stop == 80); fail_unless (segment.time == 10); fail_unless (segment.last_stop == 80); + fail_unless (update == TRUE); gst_segment_set_seek (&segment, -1.0, GST_FORMAT_BYTES, @@ -416,6 +430,7 @@ GST_START_TEST (segment_seek_reverse) fail_unless (segment.stop == 80); fail_unless (segment.time == 20); fail_unless (segment.last_stop == 80); + fail_unless (update == TRUE); } GST_END_TEST; -- 2.7.4