videofilter: take care of in_place transform
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 3 Feb 2012 16:10:12 +0000 (17:10 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 6 Feb 2012 12:23:25 +0000 (13:23 +0100)
If the subclass doesn't implement a transform_frame function we need to force
the baseclass into in_place transform.

gst-libs/gst/video/gstvideofilter.c

index af363c9..7b5c9d3 100644 (file)
@@ -186,6 +186,8 @@ gst_video_filter_set_caps (GstBaseTransform * trans, GstCaps * incaps,
   if (res) {
     filter->in_info = in_info;
     filter->out_info = out_info;
+    if (fclass->transform_frame == NULL)
+      gst_base_transform_set_in_place (trans, TRUE);
   }
   filter->negotiated = res;
 
@@ -226,8 +228,10 @@ gst_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf,
 
     gst_video_frame_unmap (&out_frame);
     gst_video_frame_unmap (&in_frame);
-  } else
+  } else {
+    GST_DEBUG_OBJECT (trans, "no transform_frame vmethod");
     res = GST_FLOW_OK;
+  }
 
   return res;
 
@@ -266,8 +270,10 @@ gst_video_filter_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
     res = fclass->transform_frame_ip (filter, &frame);
 
     gst_video_frame_unmap (&frame);
-  } else
+  } else {
+    GST_DEBUG_OBJECT (trans, "no transform_frame_ip vmethod");
     res = GST_FLOW_OK;
+  }
 
   return res;