geometrictransform: port to 1.0
authorThiago Santos <thiago.sousa.santos@collabora.com>
Fri, 13 Apr 2012 13:16:38 +0000 (10:16 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.com>
Fri, 13 Apr 2012 17:13:36 +0000 (14:13 -0300)
Straightforward port of geometrictransform plugin

17 files changed:
configure.ac
gst/geometrictransform/gstbulge.c
gst/geometrictransform/gstcircle.c
gst/geometrictransform/gstdiffuse.c
gst/geometrictransform/gstfisheye.c
gst/geometrictransform/gstgeometrictransform.c
gst/geometrictransform/gstkaleidoscope.c
gst/geometrictransform/gstmarble.c
gst/geometrictransform/gstmirror.c
gst/geometrictransform/gstpinch.c
gst/geometrictransform/gstrotate.c
gst/geometrictransform/gstsphere.c
gst/geometrictransform/gstsquare.c
gst/geometrictransform/gststretch.c
gst/geometrictransform/gsttunnel.c
gst/geometrictransform/gsttwirl.c
gst/geometrictransform/gstwaterripple.c

index 0e24399..6d831b9 100644 (file)
@@ -303,7 +303,7 @@ dnl Make sure you have a space before and after all plugins
 GST_PLUGINS_NONPORTED=" aiff asfmux \
  camerabin cdxaparse coloreffects \
  dccp faceoverlay festival \
- fieldanalysis freeverb freeze frei0r gaudieffects geometrictransform \
+ fieldanalysis freeverb freeze frei0r gaudieffects \
  hdvparse hls id3tag inter interlace ivfparse jpegformat jp2kdecimator \
  kate liveadder legacyresample librfb mpegtsmux \
  mpegpsmux mve mxf mythtv nsf nuvdemux \
index abfc009..674f401 100644 (file)
@@ -62,8 +62,8 @@ enum
 
 #define DEFAULT_ZOOM 3.0
 
-GST_BOILERPLATE (GstBulge, gst_bulge, GstCircleGeometricTransform,
-    GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
+#define gst_bulge_parent_class parent_class
+G_DEFINE_TYPE (GstBulge, gst_bulge, GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_bulge_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -117,20 +117,6 @@ gst_bulge_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_bulge_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "bulge",
-      "Transform/Effect/Video",
-      "Adds a protuberance in the center point",
-      "Filippo Argiolas <filippo.argiolas@gmail.com>");
-}
-
 static gboolean
 bulge_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -181,13 +167,21 @@ static void
 gst_bulge_class_init (GstBulgeClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "bulge",
+      "Transform/Effect/Video",
+      "Adds a protuberance in the center point",
+      "Filippo Argiolas <filippo.argiolas@gmail.com>");
+
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_bulge_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_bulge_get_property);
 
@@ -204,7 +198,7 @@ gst_bulge_class_init (GstBulgeClass * klass)
 }
 
 static void
-gst_bulge_init (GstBulge * filter, GstBulgeClass * gclass)
+gst_bulge_init (GstBulge * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 7cfe67c..72d8bcb 100644 (file)
@@ -74,8 +74,8 @@ enum
 #define DEFAULT_HEIGHT 20
 #define DEFAULT_SPREAD_ANGLE G_PI
 
-GST_BOILERPLATE (GstCircle, gst_circle, GstCircleGeometricTransform,
-    GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
+#define gst_circle_parent_class parent_class
+G_DEFINE_TYPE (GstCircle, gst_circle, GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_circle_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -150,20 +150,6 @@ gst_circle_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_circle_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "circle",
-      "Transform/Effect/Video",
-      "Warps the picture into an arc shaped form",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 static gboolean
 circle_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -196,13 +182,21 @@ static void
 gst_circle_class_init (GstCircleClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "circle",
+      "Transform/Effect/Video",
+      "Warps the picture into an arc shaped form",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_circle_finalize);
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_circle_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_circle_get_property);
@@ -227,7 +221,7 @@ gst_circle_class_init (GstCircleClass * klass)
 }
 
 static void
-gst_circle_init (GstCircle * filter, GstCircleClass * gclass)
+gst_circle_init (GstCircle * filter)
 {
   filter->angle = DEFAULT_ANGLE;
   filter->spread_angle = DEFAULT_SPREAD_ANGLE;
index 5f43a2b..16d2774 100644 (file)
@@ -68,8 +68,8 @@ enum
 
 #define DEFAULT_SCALE 4
 
-GST_BOILERPLATE (GstDiffuse, gst_diffuse, GstGeometricTransform,
-    GST_TYPE_GEOMETRIC_TRANSFORM);
+#define gst_diffuse_parent_class parent_class
+G_DEFINE_TYPE (GstDiffuse, gst_diffuse, GST_TYPE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_diffuse_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -130,18 +130,6 @@ gst_diffuse_finalize (GObject * obj)
 
 /* GObject vmethod implementations */
 
-static void
-gst_diffuse_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "diffuse",
-      "Transform/Effect/Video",
-      "Diffuses the image by moving its pixels in random directions",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 static gboolean
 diffuse_prepare (GstGeometricTransform * trans)
 {
@@ -187,13 +175,21 @@ static void
 gst_diffuse_class_init (GstDiffuseClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "diffuse",
+      "Transform/Effect/Video",
+      "Diffuses the image by moving its pixels in random directions",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_diffuse_finalize);
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_diffuse_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_diffuse_get_property);
@@ -209,7 +205,7 @@ gst_diffuse_class_init (GstDiffuseClass * klass)
 }
 
 static void
-gst_diffuse_init (GstDiffuse * filter, GstDiffuseClass * gclass)
+gst_diffuse_init (GstDiffuse * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 46318b0..2227aab 100644 (file)
 GST_DEBUG_CATEGORY_STATIC (gst_fisheye_debug);
 #define GST_CAT_DEFAULT gst_fisheye_debug
 
-GST_BOILERPLATE (GstFisheye, gst_fisheye, GstGeometricTransform,
-    GST_TYPE_GEOMETRIC_TRANSFORM);
-
-/* GObject vmethod implementations */
-
-static void
-gst_fisheye_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "fisheye",
-      "Transform/Effect/Video",
-      "Split the image into two halves and reflect one over each other",
-      "Filippo Argiolas <filippo.argiolas@gmail.com>");
-}
+#define gst_fisheye_parent_class parent_class
+G_DEFINE_TYPE (GstFisheye, gst_fisheye, GST_TYPE_GEOMETRIC_TRANSFORM);
 
 static gboolean
 fisheye_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
@@ -123,17 +109,24 @@ fisheye_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
 static void
 gst_fisheye_class_init (GstFisheyeClass * klass)
 {
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
+  gst_element_class_set_details_simple (gstelement_class,
+      "fisheye",
+      "Transform/Effect/Video",
+      "Split the image into two halves and reflect one over each other",
+      "Filippo Argiolas <filippo.argiolas@gmail.com>");
 
   gstgt_class->map_func = fisheye_map;
 }
 
 static void
-gst_fisheye_init (GstFisheye * filter, GstFisheyeClass * gclass)
+gst_fisheye_init (GstFisheye * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 4fceaef..a2a3a15 100644 (file)
 
 #include "gstgeometrictransform.h"
 #include "geometricmath.h"
-#include <gst/controller/gstcontroller.h>
 #include <string.h>
 
 GST_DEBUG_CATEGORY_STATIC (geometric_transform_debug);
 #define GST_CAT_DEFAULT geometric_transform_debug
 
 static GstStaticPadTemplate gst_geometric_transform_src_template =
-    GST_STATIC_PAD_TEMPLATE ("src",
+GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_ABGR "; "
-        GST_VIDEO_CAPS_ARGB "; "
-        GST_VIDEO_CAPS_BGR "; "
-        GST_VIDEO_CAPS_BGRA "; "
-        GST_VIDEO_CAPS_BGRx "; "
-        GST_VIDEO_CAPS_RGB "; "
-        GST_VIDEO_CAPS_RGBA "; "
-        GST_VIDEO_CAPS_RGBx "; "
-        GST_VIDEO_CAPS_YUV ("AYUV") "; "
-        GST_VIDEO_CAPS_xBGR "; "
-        GST_VIDEO_CAPS_xRGB "; "
-        GST_VIDEO_CAPS_GRAY8 "; "
-        GST_VIDEO_CAPS_GRAY16 ("BIG_ENDIAN") "; "
-        GST_VIDEO_CAPS_GRAY16 ("LITTLE_ENDIAN")
-    )
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ ARGB, BGR, BGRA, BGRx, RGB, "
+            "RGBA, RGBx, AYUV, xBGR, xRGB, GRAY8, GRAY16_BE, GRAY16_LE }"))
     );
 
 static GstStaticPadTemplate gst_geometric_transform_sink_template =
-    GST_STATIC_PAD_TEMPLATE ("sink",
+GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_ABGR "; "
-        GST_VIDEO_CAPS_ARGB "; "
-        GST_VIDEO_CAPS_BGR "; "
-        GST_VIDEO_CAPS_BGRA "; "
-        GST_VIDEO_CAPS_BGRx "; "
-        GST_VIDEO_CAPS_RGB "; "
-        GST_VIDEO_CAPS_RGBA "; "
-        GST_VIDEO_CAPS_RGBx "; "
-        GST_VIDEO_CAPS_YUV ("AYUV") "; "
-        GST_VIDEO_CAPS_xBGR "; "
-        GST_VIDEO_CAPS_xRGB "; "
-        GST_VIDEO_CAPS_GRAY8 "; "
-        GST_VIDEO_CAPS_GRAY16 ("BIG_ENDIAN") "; "
-        GST_VIDEO_CAPS_GRAY16 ("LITTLE_ENDIAN")
-    )
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ ARGB, BGR, BGRA, BGRx, RGB, "
+            "RGBA, RGBx, AYUV, xBGR, xRGB, GRAY8, GRAY16_BE, GRAY16_LE }"))
     );
 
 static GstVideoFilterClass *parent_class = NULL;
@@ -163,6 +136,7 @@ gst_geometric_transform_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
   gint old_width;
   gint old_height;
   GstGeometricTransformClass *klass;
+  GstVideoInfo vinfo;
 
   gt = GST_GEOMETRIC_TRANSFORM_CAST (btrans);
   klass = GST_GEOMETRIC_TRANSFORM_GET_CLASS (gt);
@@ -170,11 +144,12 @@ gst_geometric_transform_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
   old_width = gt->width;
   old_height = gt->height;
 
-  ret = gst_video_format_parse_caps (incaps, &gt->format, &gt->width,
-      &gt->height);
+  ret = gst_video_info_from_caps (&vinfo, incaps);
   if (ret) {
-    gt->row_stride = gst_video_format_get_row_stride (gt->format, 0, gt->width);
-    gt->pixel_stride = gst_video_format_get_pixel_stride (gt->format, 0);
+    gt->width = vinfo.width;
+    gt->height = vinfo.height;
+    gt->row_stride = vinfo.stride[0];
+    gt->pixel_stride = GST_VIDEO_INFO_COMP_PSTRIDE (&vinfo, 0);
 
     /* regenerate the map */
     GST_OBJECT_LOCK (gt);
@@ -228,10 +203,26 @@ gst_geometric_transform_do_map (GstGeometricTransform * gt, GstBuffer * inbuf,
     /* only set the values if the values are valid */
     if (trunc_x >= 0 && trunc_x < gt->width && trunc_y >= 0 &&
         trunc_y < gt->height) {
+      GstMapInfo in_info;
+      GstMapInfo out_info;
+
+      if (!gst_buffer_map (outbuf, &out_info, GST_MAP_WRITE)) {
+        GST_WARNING_OBJECT (gt, "Failed to map output buffer");
+        return;
+      }
+      if (!gst_buffer_map (inbuf, &in_info, GST_MAP_READ)) {
+        GST_WARNING_OBJECT (gt, "Failed to map input buffer");
+        gst_buffer_unmap (outbuf, &out_info);
+        return;
+      }
+
       in_offset = trunc_y * gt->row_stride + trunc_x * gt->pixel_stride;
 
-      memcpy (GST_BUFFER_DATA (outbuf) + out_offset,
-          GST_BUFFER_DATA (inbuf) + in_offset, gt->pixel_stride);
+      memcpy (out_info.data + out_offset,
+          in_info.data + in_offset, gt->pixel_stride);
+
+      gst_buffer_unmap (outbuf, &out_info);
+      gst_buffer_unmap (inbuf, &in_info);
     }
   }
 }
@@ -262,19 +253,21 @@ gst_geometric_transform_transform (GstBaseTransform * trans, GstBuffer * buf,
   gint x, y;
   GstFlowReturn ret = GST_FLOW_OK;
   gdouble *ptr;
+  GstMapInfo out_info;
 
   gt = GST_GEOMETRIC_TRANSFORM_CAST (trans);
   klass = GST_GEOMETRIC_TRANSFORM_GET_CLASS (gt);
 
-  memset (GST_BUFFER_DATA (outbuf), 0, GST_BUFFER_SIZE (outbuf));
+  gst_buffer_map (outbuf, &out_info, GST_MAP_WRITE);
+  memset (out_info.data, 0, out_info.size);
 
   GST_OBJECT_LOCK (gt);
   if (gt->precalc_map) {
     if (gt->needs_remap) {
       if (klass->prepare_func)
         if (!klass->prepare_func (gt)) {
-          GST_OBJECT_UNLOCK (gt);
-          return FALSE;
+          ret = FALSE;
+          goto end;
         }
       gst_geometric_transform_generate_map (gt);
     }
@@ -304,6 +297,7 @@ gst_geometric_transform_transform (GstBaseTransform * trans, GstBuffer * buf,
   }
 end:
   GST_OBJECT_UNLOCK (gt);
+  gst_buffer_unmap (outbuf, &out_info);
   return ret;
 }
 
index 384037b..71cdcef 100644 (file)
@@ -73,7 +73,8 @@ enum
 #define DEFAULT_ANGLE2 0
 #define DEFAULT_SIDES 3
 
-GST_BOILERPLATE (GstKaleidoscope, gst_kaleidoscope, GstCircleGeometricTransform,
+#define gst_kaleidoscope_parent_class parent_class
+G_DEFINE_TYPE (GstKaleidoscope, gst_kaleidoscope,
     GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 static void
@@ -149,20 +150,6 @@ gst_kaleidoscope_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_kaleidoscope_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "kaleidoscope",
-      "Transform/Effect/Video",
-      "Applies 'kaleidoscope' geometric transform to the image",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 static gboolean
 kaleidoscope_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -200,13 +187,21 @@ static void
 gst_kaleidoscope_class_init (GstKaleidoscopeClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "kaleidoscope",
+      "Transform/Effect/Video",
+      "Applies 'kaleidoscope' geometric transform to the image",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_kaleidoscope_finalize);
   gobject_class->set_property =
       GST_DEBUG_FUNCPTR (gst_kaleidoscope_set_property);
@@ -233,7 +228,7 @@ gst_kaleidoscope_class_init (GstKaleidoscopeClass * klass)
 }
 
 static void
-gst_kaleidoscope_init (GstKaleidoscope * filter, GstKaleidoscopeClass * gclass)
+gst_kaleidoscope_init (GstKaleidoscope * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 2c2ab64..4efbbfe 100644 (file)
@@ -74,8 +74,8 @@ enum
 #define DEFAULT_AMOUNT 1
 #define DEFAULT_TURBULENCE 1
 
-GST_BOILERPLATE (GstMarble, gst_marble, GstGeometricTransform,
-    GST_TYPE_GEOMETRIC_TRANSFORM);
+#define gst_marble_parent_class parent_class
+G_DEFINE_TYPE (GstMarble, gst_marble, GST_TYPE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_marble_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -165,20 +165,6 @@ gst_marble_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_marble_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "marble",
-      "Transform/Effect/Video",
-      "Applies a marbling effect to the image",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 static gboolean
 marble_prepare (GstGeometricTransform * trans)
 {
@@ -228,13 +214,21 @@ static void
 gst_marble_class_init (GstMarbleClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "marble",
+      "Transform/Effect/Video",
+      "Applies a marbling effect to the image",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_marble_finalize);
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_marble_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_marble_get_property);
@@ -265,7 +259,7 @@ gst_marble_class_init (GstMarbleClass * klass)
 }
 
 static void
-gst_marble_init (GstMarble * filter, GstMarbleClass * gclass)
+gst_marble_init (GstMarble * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index a06adf0..85df121 100644 (file)
@@ -61,8 +61,8 @@ enum
 
 #define DEFAULT_PROP_MODE GST_MIRROR_MODE_LEFT
 
-GST_BOILERPLATE (GstMirror, gst_mirror, GstGeometricTransform,
-    GST_TYPE_GEOMETRIC_TRANSFORM);
+#define gst_mirror_parent_class parent_class
+G_DEFINE_TYPE (GstMirror, gst_mirror, GST_TYPE_GEOMETRIC_TRANSFORM);
 
 #define GST_TYPE_MIRROR_MODE (gst_mirror_mode_get_type())
 static GType
@@ -123,18 +123,6 @@ gst_mirror_get_property (GObject * object, guint prop_id,
   }
 }
 
-static void
-gst_mirror_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "mirror",
-      "Transform/Effect/Video",
-      "Split the image into two halves and reflect one over each other",
-      "Filippo Argiolas <filippo.argiolas@gmail.com>");
-}
-
 static gboolean
 mirror_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -187,11 +175,19 @@ static void
 gst_mirror_class_init (GstMirrorClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "mirror",
+      "Transform/Effect/Video",
+      "Split the image into two halves and reflect one over each other",
+      "Filippo Argiolas <filippo.argiolas@gmail.com>");
+
   gobject_class->set_property = gst_mirror_set_property;
   gobject_class->get_property = gst_mirror_get_property;
 
@@ -207,7 +203,7 @@ gst_mirror_class_init (GstMirrorClass * klass)
 }
 
 static void
-gst_mirror_init (GstMirror * filter, GstMirrorClass * gclass)
+gst_mirror_init (GstMirror * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 9a6ae9c..537997d 100644 (file)
@@ -68,8 +68,8 @@ enum
 
 #define DEFAULT_INTENSITY 0.5
 
-GST_BOILERPLATE (GstPinch, gst_pinch, GstCircleGeometricTransform,
-    GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
+#define gst_pinch_parent_class parent_class
+G_DEFINE_TYPE (GstPinch, gst_pinch, GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_pinch_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -123,20 +123,6 @@ gst_pinch_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_pinch_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "pinch",
-      "Transform/Effect/Video",
-      "Applies 'pinch' geometric transform to the image",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 static gboolean
 pinch_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -182,13 +168,21 @@ static void
 gst_pinch_class_init (GstPinchClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "pinch",
+      "Transform/Effect/Video",
+      "Applies 'pinch' geometric transform to the image",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_pinch_finalize);
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_pinch_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_pinch_get_property);
@@ -204,7 +198,7 @@ gst_pinch_class_init (GstPinchClass * klass)
 }
 
 static void
-gst_pinch_init (GstPinch * filter, GstPinchClass * gclass)
+gst_pinch_init (GstPinch * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 764feb5..cf4cf0e 100644 (file)
@@ -69,8 +69,8 @@ enum
 
 #define DEFAULT_ANGLE 0
 
-GST_BOILERPLATE (GstRotate, gst_rotate, GstGeometricTransform,
-    GST_TYPE_GEOMETRIC_TRANSFORM);
+#define gst_rotate_parent_class parent_class
+G_DEFINE_TYPE (GstRotate, gst_rotate, GST_TYPE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_rotate_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -124,20 +124,6 @@ gst_rotate_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_rotate_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "rotate",
-      "Transform/Effect/Video",
-      "Rotates the picture by an arbitrary angle",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 static gboolean
 rotate_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -190,13 +176,21 @@ static void
 gst_rotate_class_init (GstRotateClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "rotate",
+      "Transform/Effect/Video",
+      "Rotates the picture by an arbitrary angle",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_rotate_finalize);
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_rotate_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_rotate_get_property);
@@ -211,7 +205,7 @@ gst_rotate_class_init (GstRotateClass * klass)
 }
 
 static void
-gst_rotate_init (GstRotate * filter, GstRotateClass * gclass)
+gst_rotate_init (GstRotate * filter)
 {
   filter->angle = DEFAULT_ANGLE;
 }
index b398e6d..7d5d5e6 100644 (file)
@@ -68,8 +68,8 @@ enum
 
 #define DEFAULT_REFRACTION 1.5
 
-GST_BOILERPLATE (GstSphere, gst_sphere, GstCircleGeometricTransform,
-    GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
+#define gst_sphere_parent_class parent_class
+G_DEFINE_TYPE (GstSphere, gst_sphere, GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_sphere_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -123,20 +123,6 @@ gst_sphere_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_sphere_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "sphere",
-      "Transform/Effect/Video",
-      "Applies 'sphere' geometric transform to the image",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 /* TODO we could have horizontal and vertical 'radius' */
 static gboolean
 sphere_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
@@ -194,13 +180,21 @@ static void
 gst_sphere_class_init (GstSphereClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "sphere",
+      "Transform/Effect/Video",
+      "Applies 'sphere' geometric transform to the image",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_sphere_finalize);
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_sphere_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_sphere_get_property);
@@ -215,7 +209,7 @@ gst_sphere_class_init (GstSphereClass * klass)
 }
 
 static void
-gst_sphere_init (GstSphere * filter, GstSphereClass * gclass)
+gst_sphere_init (GstSphere * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index a7b2fc5..86ecf58 100644 (file)
@@ -65,8 +65,8 @@ enum
 #define DEFAULT_HEIGHT 0.5
 #define DEFAULT_ZOOM 2.0
 
-GST_BOILERPLATE (GstSquare, gst_square, GstGeometricTransform,
-    GST_TYPE_GEOMETRIC_TRANSFORM);
+#define gst_square_parent_class parent_class
+G_DEFINE_TYPE (GstSquare, gst_square, GST_TYPE_GEOMETRIC_TRANSFORM);
 
 /* GObject vmethod implementations */
 
@@ -137,18 +137,6 @@ gst_square_get_property (GObject * object, guint prop_id,
   }
 }
 
-static void
-gst_square_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "square",
-      "Transform/Effect/Video",
-      "Distort center part of the image into a square",
-      "Filippo Argiolas <filippo.argiolas@gmail.com>");
-}
-
 static gboolean
 square_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -190,12 +178,21 @@ static void
 gst_square_class_init (GstSquareClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "square",
+      "Transform/Effect/Video",
+      "Distort center part of the image into a square",
+      "Filippo Argiolas <filippo.argiolas@gmail.com>");
+
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_square_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_square_get_property);
 
@@ -219,7 +216,7 @@ gst_square_class_init (GstSquareClass * klass)
 }
 
 static void
-gst_square_init (GstSquare * filter, GstSquareClass * gclass)
+gst_square_init (GstSquare * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index cc92c78..e9c1f9d 100644 (file)
@@ -63,8 +63,8 @@ enum
 #define DEFAULT_INTENSITY 0.5
 #define MAX_SHRINK_AMOUNT 3.0
 
-GST_BOILERPLATE (GstStretch, gst_stretch, GstCircleGeometricTransform,
-    GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
+#define gst_stretch_parent_class parent_class
+G_DEFINE_TYPE (GstStretch, gst_stretch, GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_stretch_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -118,20 +118,6 @@ gst_stretch_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_stretch_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "stretch",
-      "Transform/Effect/Video",
-      "Stretch the image in a circle around the center point",
-      "Filippo Argiolas <filippo.argiolas@gmail.com>");
-}
-
 static gboolean
 stretch_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -183,13 +169,21 @@ static void
 gst_stretch_class_init (GstStretchClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "stretch",
+      "Transform/Effect/Video",
+      "Stretch the image in a circle around the center point",
+      "Filippo Argiolas <filippo.argiolas@gmail.com>");
+
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_stretch_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_stretch_get_property);
 
@@ -206,7 +200,7 @@ gst_stretch_class_init (GstStretchClass * klass)
 }
 
 static void
-gst_stretch_init (GstStretch * filter, GstStretchClass * gclass)
+gst_stretch_init (GstStretch * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 3bda98a..27ea1b8 100644 (file)
@@ -54,8 +54,8 @@
 GST_DEBUG_CATEGORY_STATIC (gst_tunnel_debug);
 #define GST_CAT_DEFAULT gst_tunnel_debug
 
-GST_BOILERPLATE (GstTunnel, gst_tunnel, GstCircleGeometricTransform,
-    GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
+#define gst_tunnel_parent_class parent_class
+G_DEFINE_TYPE (GstTunnel, gst_tunnel, GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 /* Clean up */
 static void
@@ -64,19 +64,6 @@ gst_tunnel_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_tunnel_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "tunnel",
-      "Transform/Effect/Video",
-      "Light tunnel effect", "Filippo Argiolas <filippo.argiolas@gmail.com>");
-}
-
 static gboolean
 tunnel_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -120,20 +107,27 @@ static void
 gst_tunnel_class_init (GstTunnelClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "tunnel",
+      "Transform/Effect/Video",
+      "Light tunnel effect", "Filippo Argiolas <filippo.argiolas@gmail.com>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_tunnel_finalize);
 
   gstgt_class->map_func = tunnel_map;
 }
 
 static void
-gst_tunnel_init (GstTunnel * filter, GstTunnelClass * gclass)
+gst_tunnel_init (GstTunnel * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 8d31d8e..f41da66 100644 (file)
@@ -68,8 +68,8 @@ enum
 
 #define DEFAULT_ANGLE (G_PI)
 
-GST_BOILERPLATE (GstTwirl, gst_twirl, GstCircleGeometricTransform,
-    GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
+#define gst_twirl_parent_class parent_class
+G_DEFINE_TYPE (GstTwirl, gst_twirl, GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 static void
 gst_twirl_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -123,20 +123,6 @@ gst_twirl_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_twirl_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "twirl",
-      "Transform/Effect/Video",
-      "Twists the image from the center out",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 static gboolean
 twirl_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -172,13 +158,21 @@ static void
 gst_twirl_class_init (GstTwirlClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "twirl",
+      "Transform/Effect/Video",
+      "Twists the image from the center out",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_twirl_finalize);
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_twirl_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_twirl_get_property);
@@ -194,7 +188,7 @@ gst_twirl_class_init (GstTwirlClass * klass)
 }
 
 static void
-gst_twirl_init (GstTwirl * filter, GstTwirlClass * gclass)
+gst_twirl_init (GstTwirl * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);
 
index 7e911df..a8d694c 100644 (file)
@@ -72,7 +72,8 @@ enum
 #define DEFAULT_PHASE 0.0
 #define DEFAULT_WAVELENGTH 16.0
 
-GST_BOILERPLATE (GstWaterRipple, gst_water_ripple, GstCircleGeometricTransform,
+#define gst_water_ripple_parent_class parent_class
+G_DEFINE_TYPE (GstWaterRipple, gst_water_ripple,
     GST_TYPE_CIRCLE_GEOMETRIC_TRANSFORM);
 
 static void
@@ -147,20 +148,6 @@ gst_water_ripple_finalize (GObject * obj)
   G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
-/* GObject vmethod implementations */
-
-static void
-gst_water_ripple_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_details_simple (element_class,
-      "waterripple",
-      "Transform/Effect/Video",
-      "Creates a water ripple effect on the image",
-      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
-}
-
 static gboolean
 water_ripple_map (GstGeometricTransform * gt, gint x, gint y, gdouble * in_x,
     gdouble * in_y)
@@ -201,13 +188,21 @@ static void
 gst_water_ripple_class_init (GstWaterRippleClass * klass)
 {
   GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
   GstGeometricTransformClass *gstgt_class;
 
   gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
   gstgt_class = (GstGeometricTransformClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
+  gst_element_class_set_details_simple (gstelement_class,
+      "waterripple",
+      "Transform/Effect/Video",
+      "Creates a water ripple effect on the image",
+      "Thiago Santos<thiago.sousa.santos@collabora.co.uk>");
+
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_water_ripple_finalize);
   gobject_class->set_property =
       GST_DEBUG_FUNCPTR (gst_water_ripple_set_property);
@@ -231,7 +226,7 @@ gst_water_ripple_class_init (GstWaterRippleClass * klass)
 }
 
 static void
-gst_water_ripple_init (GstWaterRipple * filter, GstWaterRippleClass * gclass)
+gst_water_ripple_init (GstWaterRipple * filter)
 {
   GstGeometricTransform *gt = GST_GEOMETRIC_TRANSFORM (filter);