basesink: clamp reported position based on direction
authorEdward Hervey <bilboed@bilboed.com>
Tue, 7 Oct 2014 14:44:45 +0000 (16:44 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Mon, 1 Dec 2014 09:46:42 +0000 (10:46 +0100)
When using a negative rate (rate being segment.rate * segment.applied_rate),
we will end up reporting decreasing positions, therefore adjust the clamping
against last reported value accordingly.

Fixes positions getting properly reported with applied_rate < 0.0

https://bugzilla.gnome.org/show_bug.cgi?id=738092

libs/gst/base/gstbasesink.c

index 60aaa3a..ef95850 100644 (file)
@@ -4581,8 +4581,12 @@ gst_base_sink_get_position (GstBaseSink * basesink, GstFormat format,
     *cur = time + gst_guint64_to_gdouble (now - base_time) * rate;
 
     /* never report more than last seen position */
-    if (last != -1)
-      *cur = MIN (last, *cur);
+    if (last != -1) {
+      if (rate > 0.0)
+        *cur = MIN (last, *cur);
+      else
+        *cur = MAX (last, *cur);
+    }
 
     GST_DEBUG_OBJECT (basesink,
         "now %" GST_TIME_FORMAT " - base_time %" GST_TIME_FORMAT " - base %"