remove copyright field from plugins
[platform/upstream/gst-plugins-good.git] / gst / median / gstmedian.c
index 2c6113d..b4d4166 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 #include <string.h>
 #include <gstmedian.h>
+#include <gst/video/video.h>
 
-
+/* elementfactory information */
 static GstElementDetails median_details = {
   "Median effect",
-  "Filter/Effect",
-  "apply a median filter to an image",
-  VERSION,
-  "Wim Taymans <wim.taymans@chello.be>",
-  "(C) 2000",
+  "Filter/Effect/Video",
+  "Apply a median filter to an image",
+  "Wim Taymans <wim.taymans@chello.be>"
 };
 
-GST_PADTEMPLATE_FACTORY (median_src_factory,
+GST_PAD_TEMPLATE_FACTORY (median_src_factory,
   "src",
   GST_PAD_SRC,
   GST_PAD_ALWAYS,
-  GST_CAPS_NEW (
+  gst_caps_new (
    "median_src",
-   "video/raw",
-     "format",   GST_PROPS_FOURCC (GST_STR_FOURCC ("I420"))
+   "video/x-raw-yuv",
+    GST_VIDEO_YUV_PAD_TEMPLATE_PROPS (
+      GST_PROPS_FOURCC (GST_STR_FOURCC ("I420"))
+    )
   )
 )
 
-GST_PADTEMPLATE_FACTORY (median_sink_factory,
+GST_PAD_TEMPLATE_FACTORY (median_sink_factory,
   "sink",
   GST_PAD_SINK,
   GST_PAD_ALWAYS,
-  GST_CAPS_NEW (
-   "median_src",
-   "video/raw",
-     "format",   GST_PROPS_FOURCC (GST_STR_FOURCC ("I420"))
+  gst_caps_new (
+    "median_src",
+    "video/x-raw-yuv",
+    GST_VIDEO_YUV_PAD_TEMPLATE_PROPS (
+      GST_PROPS_FOURCC (GST_STR_FOURCC ("I420"))
+    )
   )
 )
 
@@ -68,11 +74,12 @@ enum {
 
 static GType   gst_median_get_type     (void);
 static void    gst_median_class_init   (GstMedianClass *klass);
+static void    gst_median_base_init    (GstMedianClass *klass);
 static void    gst_median_init         (GstMedian *median);
 
 static void    median_5                (unsigned char *src, unsigned char *dest, int height, int width);
 static void    median_9                (unsigned char *src, unsigned char *dest, int height, int width);
-static void    gst_median_chain        (GstPad *pad, GstBuffer *buf);
+static void    gst_median_chain        (GstPad *pad, GstData *_data);
 
 static void    gst_median_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
 static void    gst_median_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
@@ -87,7 +94,10 @@ gst_median_get_type (void)
 
   if (!median_type) {
     static const GTypeInfo median_info = {
-      sizeof(GstMedianClass),      NULL,      NULL,      (GClassInitFunc)gst_median_class_init,
+      sizeof(GstMedianClass),
+      (GBaseInitFunc)gst_median_base_init,
+      NULL,
+      (GClassInitFunc)gst_median_class_init,
       NULL,
       NULL,
       sizeof(GstMedian),
@@ -100,6 +110,18 @@ gst_median_get_type (void)
 }
 
 static void
+gst_median_base_init (GstMedianClass *klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  gst_element_class_add_pad_template (element_class,
+       GST_PAD_TEMPLATE_GET (median_sink_factory));
+  gst_element_class_add_pad_template (element_class,
+       GST_PAD_TEMPLATE_GET (median_src_factory));
+  gst_element_class_set_details (element_class, &median_details);
+}
+
+static void
 gst_median_class_init (GstMedianClass *klass)
 {
   GObjectClass *gobject_class;
@@ -132,24 +154,25 @@ gst_median_sinkconnect (GstPad *pad, GstCaps *caps)
   filter = GST_MEDIAN (gst_pad_get_parent (pad));
 
   if (!GST_CAPS_IS_FIXED (caps))
-    return GST_PAD_CONNECT_DELAYED;
+    return GST_PAD_LINK_DELAYED;
 
-  filter->width = gst_caps_get_int (caps, "width");
-  filter->height = gst_caps_get_int (caps, "height");
+  gst_caps_get_int (caps, "width", &filter->width);
+  gst_caps_get_int (caps, "height", &filter->height);
 
-  return GST_PAD_CONNECT_OK;
+  /* forward to the next plugin */
+  return gst_pad_try_set_caps(filter->srcpad, gst_caps_copy_1(caps));
 }
 
 void gst_median_init (GstMedian *median)
 {
   median->sinkpad = gst_pad_new_from_template (
-                 GST_PADTEMPLATE_GET (median_sink_factory), "sink");
-  gst_pad_set_connect_function (median->sinkpad, gst_median_sinkconnect);
+                 GST_PAD_TEMPLATE_GET (median_sink_factory), "sink");
+  gst_pad_set_link_function (median->sinkpad, gst_median_sinkconnect);
   gst_pad_set_chain_function (median->sinkpad, gst_median_chain);
   gst_element_add_pad (GST_ELEMENT (median), median->sinkpad);
 
   median->srcpad = gst_pad_new_from_template (
-                 GST_PADTEMPLATE_GET (median_src_factory), "src");
+                 GST_PAD_TEMPLATE_GET (median_src_factory), "src");
   gst_element_add_pad (GST_ELEMENT (median), median->srcpad);
 
   median->filtersize = 5;
@@ -195,10 +218,13 @@ median_5 (unsigned char *src, unsigned char *dest, int width, int height)
       PIX_SORT(p[1],p[2]) ;
       dest[i] = p[2];
     }
-    dest[i] = src[i++];
-    dest[i] = src[i++];
+    dest[i] = src[i];
+    i++;
+    dest[i] = src[i];
+    i++;
   }
-  dest[i] = src[i++];
+  dest[i] = src[i];
+  i++;
 }
 
 static void
@@ -244,15 +270,19 @@ median_9 (unsigned char *src, unsigned char *dest, int width, int height)
       PIX_SORT(p[4], p[2]) ;
       dest[i] = p[4];
     }
-    dest[i] = src[i++];
-    dest[i] = src[i++];
+    dest[i] = src[i];
+    i++;
+    dest[i] = src[i];
+    i++;
   }
-  dest[i] = src[i++];
+  dest[i] = src[i];
+  i++;
 }
 
 static void
-gst_median_chain (GstPad *pad, GstBuffer *buf)
+gst_median_chain (GstPad *pad, GstData *_data)
 {
+  GstBuffer *buf = GST_BUFFER (_data);
   GstMedian *median;
   guchar *data;
   gulong size;
@@ -267,14 +297,14 @@ gst_median_chain (GstPad *pad, GstBuffer *buf)
   median = GST_MEDIAN (GST_OBJECT_PARENT (pad));
 
   if (!median->active) {
-    gst_pad_push(median->srcpad,buf);
+    gst_pad_push(median->srcpad,GST_DATA (buf));
     return;
   }
 
   data = GST_BUFFER_DATA(buf);
   size = GST_BUFFER_SIZE(buf);
 
-  GST_DEBUG (0,"median: have buffer of %d", GST_BUFFER_SIZE(buf));
+  GST_DEBUG ("median: have buffer of %d", GST_BUFFER_SIZE(buf));
 
   outbuf = gst_buffer_new();
   GST_BUFFER_DATA(outbuf) = g_malloc(GST_BUFFER_SIZE(buf));
@@ -307,7 +337,7 @@ gst_median_chain (GstPad *pad, GstBuffer *buf)
 
   gst_buffer_unref(buf);
 
-  gst_pad_push(median->srcpad,outbuf);
+  gst_pad_push(median->srcpad,GST_DATA (outbuf));
 }
 
 static void
@@ -368,26 +398,20 @@ gst_median_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
 
 
 static gboolean
-plugin_init (GModule *module, GstPlugin *plugin)
+plugin_init (GstPlugin *plugin)
 {
-  GstElementFactory *factory;
-
-  factory = gst_elementfactory_new("median",GST_TYPE_MEDIAN,
-                                   &median_details);
-  g_return_val_if_fail(factory != NULL, FALSE);
-
-  gst_elementfactory_add_padtemplate (factory, GST_PADTEMPLATE_GET (median_sink_factory));
-  gst_elementfactory_add_padtemplate (factory, GST_PADTEMPLATE_GET (median_src_factory));
-
-  gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory));
-
-  return TRUE;
+  return gst_element_register (plugin, "median",
+                              GST_RANK_NONE, GST_TYPE_MEDIAN);
 }
 
-GstPluginDesc plugin_desc = {
+GST_PLUGIN_DEFINE (
   GST_VERSION_MAJOR,
   GST_VERSION_MINOR,
   "median",
-  plugin_init
-};
-
+  "Video median filter",
+  plugin_init,
+  VERSION,
+  GST_LICENSE,
+  GST_PACKAGE,
+  GST_ORIGIN
+)