playbin2: Set sinks to READY before checking if it accept caps
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 16 Mar 2011 14:56:34 +0000 (15:56 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 23 Mar 2011 13:33:17 +0000 (14:33 +0100)
Fixes bug #642732.

gst/playback/gstplaybin2.c

index 2bf07de..1cd9d5b 100644 (file)
@@ -2967,6 +2967,12 @@ autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps,
   if (sinkpad) {
     GstCaps *sinkcaps;
 
+    /* Ignore errors here, if a custom sink fails to go
+     * to READY things are wrong and will error out later
+     */
+    if (GST_STATE (sink) < GST_STATE_READY)
+      gst_element_set_state (sink, GST_STATE_READY);
+
     sinkcaps = gst_pad_get_caps_reffed (sinkpad);
     if (!gst_caps_is_any (sinkcaps))
       ret = !gst_pad_accept_caps (sinkpad, caps);
@@ -2993,6 +2999,12 @@ autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps,
     if (sinkpad) {
       GstCaps *sinkcaps;
 
+      /* Ignore errors here, if a custom sink fails to go
+       * to READY things are wrong and will error out later
+       */
+      if (GST_STATE (sink) < GST_STATE_READY)
+        gst_element_set_state (sink, GST_STATE_READY);
+
       sinkcaps = gst_pad_get_caps_reffed (sinkpad);
       if (!gst_caps_is_any (sinkcaps))
         ret = !gst_pad_accept_caps (sinkpad, caps);
@@ -3008,6 +3020,12 @@ autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps,
     if (sinkpad) {
       GstCaps *sinkcaps;
 
+      /* Ignore errors here, if a custom sink fails to go
+       * to READY things are wrong and will error out later
+       */
+      if (GST_STATE (sink) < GST_STATE_READY)
+        gst_element_set_state (sink, GST_STATE_READY);
+
       sinkcaps = gst_pad_get_caps_reffed (sinkpad);
       if (!gst_caps_is_any (sinkcaps))
         ret = !gst_pad_accept_caps (sinkpad, caps);