From 80015d69a778333166f1d45de7341019e2180557 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Thu, 20 Sep 2018 23:17:52 +1000 Subject: [PATCH] segment: Allow stop == -1 in gst_segment_to_running_time() and rate < 0 If a segment has stop == -1, then gst_segment_to_running_time() would refuse to calculate a running time for negative rates, but gst_segment_do_seek() allows this scenario and uses a valid duration for calculations. Make the 2 functions consistent by using any configured duration to calculate a running time too in that case. https://bugzilla.gnome.org/show_bug.cgi?id=796559 --- gst/gstsegment.c | 3 +++ tests/check/gst/gstsegment.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gst/gstsegment.c b/gst/gstsegment.c index 6aa1ce228e..958b39f737 100644 --- a/gst/gstsegment.c +++ b/gst/gstsegment.c @@ -758,6 +758,9 @@ gst_segment_to_running_time_full (const GstSegment * segment, GstFormat format, } else { stop = segment->stop; + if (stop == -1 && segment->duration != -1) + stop = segment->start + segment->duration; + /* cannot continue if no stop position set or invalid offset */ g_return_val_if_fail (stop != -1, 0); g_return_val_if_fail (stop >= offset, 0); diff --git a/tests/check/gst/gstsegment.c b/tests/check/gst/gstsegment.c index 751469d765..ac46b7d52a 100644 --- a/tests/check/gst/gstsegment.c +++ b/tests/check/gst/gstsegment.c @@ -977,6 +977,21 @@ GST_START_TEST (segment_full) fail_unless (gst_segment_position_from_running_time_full (&segment, GST_FORMAT_TIME, 75, &pos) == -1); fail_unless (pos == 300); /* Actually -300 */ + + /* Test for running time conversion with stop == -1, where + * calculations should use the duration instead */ + segment.rate = -2.0; + segment.start = 100; + segment.offset = 0; + segment.stop = -1; + segment.duration = 200; + segment.position = 40; + segment.base = 100; + segment.time = 10000; + + fail_unless (gst_segment_to_running_time_full (&segment, GST_FORMAT_TIME, + 150, &rt) == 1); + fail_unless (rt == 175); } GST_END_TEST;