pipeline: If the currently used clock gets lost update it the next time when going...
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 8 Jul 2010 05:48:07 +0000 (07:48 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 16 Jul 2010 15:27:04 +0000 (17:27 +0200)
Fixes bug #623806.

gst/gstpipeline.c

index 73c8f99..8f5d381 100644 (file)
@@ -401,7 +401,7 @@ gst_pipeline_change_state (GstElement * element, GstStateChange transition)
 
       /* running time changed, either with a PAUSED or a flush, we need to check
        * if there is a new clock & update the base time */
-      if (last_start_time != start_time) {
+      if (update_clock || last_start_time != start_time) {
         GST_DEBUG_OBJECT (pipeline, "Need to update start_time");
 
         /* when going to PLAYING, select a clock when needed. If we just got
@@ -560,6 +560,20 @@ gst_pipeline_handle_message (GstBin * bin, GstMessage * message)
 
       break;
     }
+    case GST_MESSAGE_CLOCK_LOST:
+    {
+      GstClock *clock;
+
+      gst_message_parse_clock_lost (message, &clock);
+
+      GST_OBJECT_LOCK (bin);
+      if (clock == GST_ELEMENT_CAST (bin)->clock) {
+        GST_DEBUG_OBJECT (bin, "Used clock '%s' got lost",
+            GST_OBJECT_NAME (clock));
+        pipeline->priv->update_clock = TRUE;
+      }
+      GST_OBJECT_UNLOCK (bin);
+    }
     default:
       break;
   }