From ba536c23078b8508d43fb1432521d5ec077c5336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 13 Jun 2016 18:33:27 +0200 Subject: [PATCH] basesink: Update start time when losing state only if we were in PLAYING If we were in PAUSED, the current clock time and base time don't have much to do with the running time anymore as the clock might have advanced while we were PAUSED. The system clock does that for example, audio clocks often don't. Updating the start time in PAUSED will cause a) the wrong position to be reported, b) step events to step not just the requested amount but the amount of time we spent in PAUSED. The start time should only ever be updated when going from PLAYING to PAUSED to remember the current running time (to be able to compensate later when going to PLAYING for the clock time advancing while PAUSED), not when we are already in PAUSED. Based on a patch by Kishore Arepalli The updating of the start time when the state is lost was added in commit ba943a82c0bbfd17c9ee9f5068d44c9d9274fd13 to fix the position reporting when the state is lost. This still works correctly after this change. https://bugzilla.gnome.org/show_bug.cgi?id=739289 --- libs/gst/base/gstbasesink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index 035895101e..f0d8c40c6a 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -2925,7 +2925,8 @@ gst_base_sink_update_start_time (GstBaseSink * basesink) GstClock *clock; GST_OBJECT_LOCK (basesink); - if ((clock = GST_ELEMENT_CLOCK (basesink))) { + if (GST_STATE (basesink) == GST_STATE_PLAYING + && (clock = GST_ELEMENT_CLOCK (basesink))) { GstClockTime now; gst_object_ref (clock);