basesrc: retry on not-negotiate if a reconfigure is pending
authorThiago Santos <thiago.sousa.santos@collabora.com>
Sat, 4 Aug 2012 14:48:13 +0000 (11:48 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.com>
Fri, 10 Aug 2012 16:58:02 +0000 (13:58 -0300)
Before erroring out on not-negotiated returns, check if the pad
has the reconfigure flag set and retry.

https://bugzilla.gnome.org/show_bug.cgi?id=681198

libs/gst/base/gstbasesrc.c

index 8714ab9..56fd861 100644 (file)
@@ -2692,6 +2692,9 @@ gst_base_src_loop (GstPad * pad)
 
   ret = gst_pad_push (pad, buf);
   if (G_UNLIKELY (ret != GST_FLOW_OK)) {
+    if (ret == GST_FLOW_NOT_NEGOTIATED) {
+      goto not_negotiated;
+    }
     GST_INFO_OBJECT (src, "pausing after gst_pad_push() = %s",
         gst_flow_get_name (ret));
     goto pause;
@@ -2709,6 +2712,10 @@ done:
   /* special cases */
 not_negotiated:
   {
+    if (gst_pad_needs_reconfigure (pad)) {
+      GST_DEBUG_OBJECT (src, "Retrying to renegotiate");
+      return;
+    }
     GST_DEBUG_OBJECT (src, "Failed to renegotiate");
     ret = GST_FLOW_NOT_NEGOTIATED;
     goto pause;