audioclock: add a function to invalidate the clock
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 7 Sep 2010 16:06:27 +0000 (18:06 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Tue, 7 Sep 2010 16:12:38 +0000 (18:12 +0200)
Add a function to invalidate the time function of a clock. Useful for when the
function becomes invalid.

docs/libs/gst-plugins-base-libs-sections.txt
gst-libs/gst/audio/gstaudioclock.c
gst-libs/gst/audio/gstaudioclock.h

index d55a43a..f9d0990 100644 (file)
@@ -111,6 +111,7 @@ gst_audio_clock_new_full
 gst_audio_clock_adjust
 gst_audio_clock_get_time
 gst_audio_clock_reset
+gst_audio_clock_invalidate
 <SUBSECTION Standard>
 GstAudioClockClass
 GST_AUDIO_CLOCK
index 5b324d6..95a8a0d 100644 (file)
@@ -202,6 +202,12 @@ gst_audio_clock_reset (GstAudioClock * clock, GstClockTime time)
 }
 
 static GstClockTime
+gst_audio_clock_func_invalid (GstClock * clock, gpointer user_data)
+{
+  return GST_CLOCK_TIME_NONE;
+}
+
+static GstClockTime
 gst_audio_clock_get_internal_time (GstClock * clock)
 {
   GstAudioClock *aclock;
@@ -283,3 +289,26 @@ gst_audio_clock_adjust (GstClock * clock, GstClockTime time)
 
   return result;
 }
+
+/**
+ * gst_audio_clock_invalidate:
+ * @clock: a #GstAudioClock
+ *
+ * Invalidate the clock function. Call this function when the provided
+ * #GstAudioClockGetTimeFunc cannot be called anymore, for example, when the
+ * user_data becomes invalid.
+ *
+ * After calling this function, @clock will return the last returned time for
+ * the rest of its lifetime.
+ *
+ * Since: 0.10.31
+ */
+void
+gst_audio_clock_invalidate (GstClock * clock)
+{
+  GstAudioClock *aclock;
+
+  aclock = GST_AUDIO_CLOCK_CAST (clock);
+
+  aclock->func = gst_audio_clock_func_invalid;
+}
index cdbe474..fb50bcf 100644 (file)
@@ -101,6 +101,8 @@ void            gst_audio_clock_reset           (GstAudioClock *clock, GstClockT
 GstClockTime    gst_audio_clock_get_time        (GstClock * clock);
 GstClockTime    gst_audio_clock_adjust          (GstClock * clock, GstClockTime time);
 
+void            gst_audio_clock_invalidate      (GstClock * clock);
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_CLOCK_H__ */