gst/: Fix internal data flow errors. Fixes #338711.
authorWim Taymans <wim.taymans@gmail.com>
Sat, 22 Apr 2006 21:34:23 +0000 (21:34 +0000)
committerThomas Vander Stichele <thomas@apestaart.org>
Sat, 22 Apr 2006 21:34:23 +0000 (21:34 +0000)
Original commit message from CVS:

patch by: Wim Taymans

* gst/gstpad.c: (gst_pad_init), (gst_pad_configure_sink),
(gst_pad_configure_src), (gst_pad_push):
* gst/gstpipeline.c: (gst_pipeline_init):
Fix internal data flow errors.  Fixes #338711.

ChangeLog
gst/gstpad.c
gst/gstpipeline.c

index f7eb15f..9004cdb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-04-22  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Wim Taymans
+
+       * gst/gstpad.c: (gst_pad_init), (gst_pad_configure_sink),
+       (gst_pad_configure_src), (gst_pad_push):
+       * gst/gstpipeline.c: (gst_pipeline_init):
+         Fix internal data flow errors.  Fixes #338711.
+
 2006-04-12  Wim Taymans  <wim@fluendo.com>
 
        * tests/check/gst/gstelement.c: (GST_START_TEST):
index 34f604b..2d5ae08 100644 (file)
@@ -341,7 +341,9 @@ gst_pad_init (GstPad * pad)
   pad->querytypefunc = GST_DEBUG_FUNCPTR (gst_pad_get_query_types_default);
   pad->queryfunc = GST_DEBUG_FUNCPTR (gst_pad_query_default);
   pad->intlinkfunc = GST_DEBUG_FUNCPTR (gst_pad_get_internal_links_default);
+#if 0
   GST_PAD_ACCEPTCAPSFUNC (pad) = GST_DEBUG_FUNCPTR (gst_pad_acceptcaps_default);
+#endif
 
   pad->do_buffer_signals = 0;
   pad->do_event_signals = 0;
@@ -1335,7 +1337,9 @@ gst_pad_set_getcaps_function (GstPad * pad, GstPadGetCapsFunction getcaps)
  * @acceptcaps: the #GstPadAcceptCapsFunction to set.
  *
  * Sets the given acceptcaps function for the pad.  The acceptcaps function
- * will be called to check if the pad can accept the given caps. Setting the
+ * will be called to check if the pad can accept the given caps.
+ */
+/* Setting the
  * acceptcaps function to NULL restores the default behaviour of allowing 
  * any caps that matches the caps from gst_pad_get_caps.
  */
@@ -2262,15 +2266,17 @@ could_not_set:
 static gboolean
 gst_pad_configure_sink (GstPad * pad, GstCaps * caps)
 {
+  GstPadAcceptCapsFunction acceptcaps;
   GstPadSetCapsFunction setcaps;
   gboolean res;
 
+  acceptcaps = GST_PAD_ACCEPTCAPSFUNC (pad);
   setcaps = GST_PAD_SETCAPSFUNC (pad);
 
   /* See if pad accepts the caps - only needed if 
    * no setcaps function */
-  if (setcaps == NULL)
-    if (!gst_pad_accept_caps (pad, caps))
+  if (setcaps == NULL && acceptcaps != NULL)
+    if (!acceptcaps (pad, caps))
       goto not_accepted;
 
   /* set caps on pad if call succeeds */
@@ -2291,15 +2297,17 @@ not_accepted:
 static gboolean
 gst_pad_configure_src (GstPad * pad, GstCaps * caps, gboolean dosetcaps)
 {
+  GstPadAcceptCapsFunction acceptcaps;
   GstPadSetCapsFunction setcaps;
   gboolean res;
 
+  acceptcaps = GST_PAD_ACCEPTCAPSFUNC (pad);
   setcaps = GST_PAD_SETCAPSFUNC (pad);
 
   /* See if pad accepts the caps - only needed if 
    * no setcaps function */
-  if (setcaps == NULL)
-    if (!gst_pad_accept_caps (pad, caps))
+  if (setcaps == NULL && acceptcaps != NULL)
+    if (!acceptcaps (pad, caps))
       goto not_accepted;
 
   if (dosetcaps)
@@ -3286,8 +3294,11 @@ gst_pad_push (GstPad * pad, GstBuffer * buffer)
 {
   GstPad *peer;
   GstFlowReturn ret;
+
+#if 0
   GstCaps *caps;
   gboolean caps_changed;
+#endif
 
   g_return_val_if_fail (GST_IS_PAD (pad), GST_FLOW_ERROR);
   g_return_val_if_fail (GST_PAD_DIRECTION (pad) == GST_PAD_SRC, GST_FLOW_ERROR);
@@ -3320,19 +3331,25 @@ gst_pad_push (GstPad * pad, GstBuffer * buffer)
     goto not_linked;
   gst_object_ref (peer);
 
+#if 0
+  /* FIXME, disabled for 0.10.5 release because it caused to much
+   * regressions */
   /* Before pushing the buffer to the peer pad, ensure that caps 
    * are set on this pad */
   caps = GST_BUFFER_CAPS (buffer);
   caps_changed = caps && caps != GST_PAD_CAPS (pad);
+#endif
 
   GST_OBJECT_UNLOCK (pad);
 
+#if 0
   /* we got a new datatype from the pad, it had better handle it */
   if (G_UNLIKELY (caps_changed)) {
     GST_DEBUG_OBJECT (pad, "caps changed to %" GST_PTR_FORMAT, caps);
     if (G_UNLIKELY (!gst_pad_configure_src (pad, caps, TRUE)))
       goto not_negotiated;
   }
+#endif
 
   ret = gst_pad_chain (peer, buffer);
 
@@ -3362,6 +3379,7 @@ not_linked:
     GST_OBJECT_UNLOCK (pad);
     return GST_FLOW_NOT_LINKED;
   }
+#if 0
 not_negotiated:
   {
     gst_buffer_unref (buffer);
@@ -3370,6 +3388,7 @@ not_negotiated:
         "element pushed buffer then refused to accept the caps");
     return GST_FLOW_NOT_NEGOTIATED;
   }
+#endif
 }
 
 /**
index aa7c479..ccb4dc8 100644 (file)
@@ -248,9 +248,12 @@ gst_pipeline_init (GTypeInstance * instance, gpointer g_class)
 
   /* create and set a default bus */
   bus = gst_bus_new ();
+#if 0
+  /* FIXME, disabled for 0.10.5 release as it caused to many regressions */
   /* Start our bus in flushing if appropriate */
   if (pipeline->priv->auto_flush_bus)
     gst_bus_set_flushing (bus, TRUE);
+#endif
 
   gst_element_set_bus (GST_ELEMENT_CAST (pipeline), bus);
   GST_DEBUG_OBJECT (pipeline, "set bus %" GST_PTR_FORMAT " on pipeline", bus);