bin: always recurse into bins when doing state changes
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 12 Jun 2012 15:11:51 +0000 (17:11 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Wed, 13 Jun 2012 09:03:19 +0000 (11:03 +0200)
Never skip the state change of a bin because it needs to update the base time of
its children when needed.

gst/gstbin.c

index 5a0aeab..a9790ab 100644 (file)
@@ -2175,6 +2175,10 @@ gst_bin_element_set_state (GstBin * bin, GstElement * element,
       gst_element_state_get_name (child_pending),
       gst_element_state_get_name (next));
 
+  /* always recurse into bins so that we can set the base time */
+  if (GST_IS_BIN (element))
+    goto do_state;
+
   /* Try not to change the state of elements that are already in the state we're
    * going to */
   if (child_current == next && child_pending == GST_STATE_VOID_PENDING) {
@@ -2238,6 +2242,7 @@ gst_bin_element_set_state (GstBin * bin, GstElement * element,
     }
   }
 
+do_state:
   GST_OBJECT_LOCK (bin);
   /* the element was busy with an upwards async state change, we must wait for
    * an ASYNC_DONE message before we attemp to change the state. */