Sophie

Sophie

distrib > Mandriva > 2010.1 > i586 > media > main-testing-src > by-pkgid > 863d6bb7085bef9decfd3ec6b01c8cbe > files > 2

gstreamer0.10-plugins-good-0.10.22-1.1.4mdv2010.1.src.rpm

From e69ba0f94f475975cfa33d651a56fc1567c0238b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege@collabora.co.uk>
Date: Thu, 6 May 2010 13:57:01 +0200
Subject: pulsesink: Allocate and free the custom clock in NULL<->READY

---
 ext/pulse/pulsesink.c |   17 ++++++++++-------
 1 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c
index 4b45a2f..e39b672 100644
--- a/ext/pulse/pulsesink.c
+++ b/ext/pulse/pulsesink.c
@@ -1664,13 +1664,6 @@ gst_pulsesink_init (GstPulseSink * pulsesink, GstPulseSinkClass * klass)
   pulsesink->probe = gst_pulseprobe_new (G_OBJECT (pulsesink),
       G_OBJECT_GET_CLASS (pulsesink), PROP_DEVICE, pulsesink->device,
       TRUE, FALSE);
-
-  /* override with a custom clock */
-  if (GST_BASE_AUDIO_SINK (pulsesink)->provided_clock)
-    gst_object_unref (GST_BASE_AUDIO_SINK (pulsesink)->provided_clock);
-  GST_BASE_AUDIO_SINK (pulsesink)->provided_clock =
-      gst_audio_clock_new ("GstPulseSinkClock",
-      (GstAudioClockGetTimeFunc) gst_pulsesink_get_time, pulsesink);
 }
 
 static void
@@ -2275,6 +2268,13 @@ gst_pulsesink_change_state (GstElement * element, GstStateChange transition)
       g_assert (pulsesink->mainloop != NULL);
       res = pa_threaded_mainloop_start (pulsesink->mainloop);
       g_assert (res == 0);
+
+      /* override with a custom clock */
+      if (GST_BASE_AUDIO_SINK (pulsesink)->provided_clock)
+        gst_object_unref (GST_BASE_AUDIO_SINK (pulsesink)->provided_clock);
+      GST_BASE_AUDIO_SINK (pulsesink)->provided_clock =
+          gst_audio_clock_new ("GstPulseSinkClock",
+          (GstAudioClockGetTimeFunc) gst_pulsesink_get_time, pulsesink);
       break;
     default:
       break;
@@ -2284,6 +2284,9 @@ gst_pulsesink_change_state (GstElement * element, GstStateChange transition)
 
   switch (transition) {
     case GST_STATE_CHANGE_READY_TO_NULL:
+      if (GST_BASE_AUDIO_SINK (pulsesink)->provided_clock)
+        gst_object_unref (GST_BASE_AUDIO_SINK (pulsesink)->provided_clock);
+      GST_BASE_AUDIO_SINK (pulsesink)->provided_clock = NULL;
       if (pulsesink->mainloop) {
         pa_threaded_mainloop_stop (pulsesink->mainloop);
         pa_threaded_mainloop_free (pulsesink->mainloop);
-- 
1.7.1