From: Sebastian Dröge Date: Fri, 20 May 2011 11:03:51 +0000 (+0200) Subject: basesink: Only reinit the cached GstClockID if it is for the same clock X-Git-Tag: RELEASE-0.10.36~285 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1d57e46dbd967e3e509e7d190a52c1fcfe0afd8e;p=platform%2Fupstream%2Fgstreamer.git basesink: Only reinit the cached GstClockID if it is for the same clock The clock might have changed since the clock ID was created and in that case we have to request a new one. --- diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index 7740a77..c342d3c 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -2186,14 +2186,21 @@ gst_base_sink_wait_clock (GstBaseSink * sink, GstClockTime time, time += base_time; /* Re-use existing clockid if available */ - if (G_LIKELY (sink->priv->cached_clock_id != NULL)) { + /* FIXME: Casting to GstClockEntry only works because the types + * are the same */ + if (G_LIKELY (sink->priv->cached_clock_id != NULL + && GST_CLOCK_ENTRY_CLOCK ((GstClockEntry *) sink-> + priv->cached_clock_id) == clock)) { if (!gst_clock_single_shot_id_reinit (clock, sink->priv->cached_clock_id, time)) { gst_clock_id_unref (sink->priv->cached_clock_id); sink->priv->cached_clock_id = gst_clock_new_single_shot_id (clock, time); } - } else + } else { + if (sink->priv->cached_clock_id != NULL) + gst_clock_id_unref (sink->priv->cached_clock_id); sink->priv->cached_clock_id = gst_clock_new_single_shot_id (clock, time); + } GST_OBJECT_UNLOCK (sink); /* A blocking wait is performed on the clock. We save the ClockID