diff --git a/libs/gst/base/gstbasetransform.c b/libs/gst/base/gstbasetransform.c
index 8bb7fb8..b606bf3 100644
--- a/libs/gst/base/gstbasetransform.c
+++ b/libs/gst/base/gstbasetransform.c
@@ -480,8 +480,13 @@ gst_base_transform_transform_caps (GstBaseTransform * trans,
     GstCaps *temp;
     gint i;
 
-    /* start with empty caps */
-    ret = gst_caps_new_empty ();
+    if (klass->allow_passthrough.b) {
+      ret = gst_caps_copy (caps);
+      GST_ERROR_OBJECT (trans, "passthrough %" GST_PTR_FORMAT, ret);
+    } else {
+      /* start with empty caps */
+      ret = gst_caps_new_empty ();
+    }
     GST_DEBUG_OBJECT (trans, "transform caps (direction = %d)", direction);
 
     if (gst_caps_is_any (caps)) {
diff --git a/libs/gst/base/gstbasetransform.h b/libs/gst/base/gstbasetransform.h
index 33f971b..e5df49e 100644
--- a/libs/gst/base/gstbasetransform.h
+++ b/libs/gst/base/gstbasetransform.h
@@ -243,8 +243,13 @@ struct _GstBaseTransformClass {
   gboolean      (*accept_caps)  (GstBaseTransform *trans, GstPadDirection direction,
                                          GstCaps *caps);
 
+  union {
+    gpointer p;
+    gboolean b;
+  } allow_passthrough;
+
   /*< private >*/
-  gpointer       _gst_reserved[GST_PADDING_LARGE - 3];
+  gpointer       _gst_reserved[GST_PADDING_LARGE - 4];
 };
 
 GType           gst_base_transform_get_type         (void);
