basesrc: handle renegotiation correctly
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 29 Jan 2013 08:45:23 +0000 (09:45 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Tue, 29 Jan 2013 08:52:16 +0000 (09:52 +0100)
Don't retry to negotiate when we fail to negotiate but instead produce a
NOT_NEGOTIATED error. We only want to retry negotiation if the result from
gst_pad_push() returned NOT_NEGOTIATED.

libs/gst/base/gstbasesrc.c

index b83762c..2e2e780 100644 (file)
@@ -2579,7 +2579,7 @@ gst_base_src_loop (GstPad * pad)
   if (gst_pad_check_reconfigure (pad)) {
     if (!gst_base_src_negotiate (src)) {
       gst_pad_mark_reconfigure (pad);
-      goto not_negotiated;
+      goto negotiate_failed;
     }
   }
 
@@ -2746,7 +2746,12 @@ not_negotiated:
       GST_DEBUG_OBJECT (src, "Retrying to renegotiate");
       return;
     }
-    GST_DEBUG_OBJECT (src, "Failed to renegotiate");
+    /* fallthrough when push returns NOT_NEGOTIATED and we don't have
+     * a pending negotiation request on our srcpad */
+  }
+negotiate_failed:
+  {
+    GST_DEBUG_OBJECT (src, "Not negotiated");
     ret = GST_FLOW_NOT_NEGOTIATED;
     goto pause;
   }