Index: libs/gst/base/gstbasetransform.c
===================================================================
RCS file: /cvs/gstreamer/gstreamer/libs/gst/base/gstbasetransform.c,v
retrieving revision 1.85
diff -u -p -r1.85 gstbasetransform.c
--- libs/gst/base/gstbasetransform.c	9 Aug 2006 11:01:20 -0000	1.85
+++ libs/gst/base/gstbasetransform.c	17 Aug 2006 08:53:03 -0000
@@ -1152,9 +1152,14 @@ not_configured:
     /* let the default allocator handle it... */
     GST_DEBUG_OBJECT (trans, "not configured");
     gst_buffer_replace (buf, NULL);
-    /* ...by calling alloc_buffer without setting caps on the src pad, which
-     * will force negotiation in the chain function. */
-    res = gst_pad_alloc_buffer (trans->srcpad, offset, size, caps, buf);
+    if (trans->passthrough || trans->always_in_place) {
+      /* ...by calling alloc_buffer without setting caps on the src pad, which
+       * will force negotiation in the chain function. */
+      res = gst_pad_alloc_buffer (trans->srcpad, offset, size, caps, buf);
+    } else {
+      /* ...by letting the default handler create a buffer */
+      res = GST_FLOW_OK;
+    }
     goto done;
   }
 unknown_size:
@@ -1162,9 +1167,14 @@ unknown_size:
     /* let the default allocator handle it... */
     GST_DEBUG_OBJECT (trans, "unknown size");
     gst_buffer_replace (buf, NULL);
-    /* ...by calling alloc_buffer without setting caps on the src pad, which
-     * will force negotiation in the chain function. */
-    res = gst_pad_alloc_buffer (trans->srcpad, offset, size, caps, buf);
+    if (trans->passthrough || trans->always_in_place) {
+      /* ...by calling alloc_buffer without setting caps on the src pad, which
+       * will force negotiation in the chain function. */
+      res = gst_pad_alloc_buffer (trans->srcpad, offset, size, caps, buf);
+    } else {
+      /* ...by letting the default handler create a buffer */
+      res = GST_FLOW_OK;
+    }
     goto done;
   }
 }
