* 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_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"))
+ )
)
)
"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"))
+ )
)
)
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);
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),
}
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;
filter = GST_MEDIAN (gst_pad_get_parent (pad));
if (!GST_CAPS_IS_FIXED (caps))
- return GST_PAD_CONNECT_DELAYED;
+ return GST_PAD_LINK_DELAYED;
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_PAD_TEMPLATE_GET (median_sink_factory), "sink");
- gst_pad_set_connect_function (median->sinkpad, gst_median_sinkconnect);
+ 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);
}
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;
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));
gst_buffer_unref(buf);
- gst_pad_push(median->srcpad,outbuf);
+ gst_pad_push(median->srcpad,GST_DATA (outbuf));
}
static void
static gboolean
-plugin_init (GModule *module, GstPlugin *plugin)
+plugin_init (GstPlugin *plugin)
{
- GstElementFactory *factory;
-
- factory = gst_element_factory_new("median",GST_TYPE_MEDIAN,
- &median_details);
- g_return_val_if_fail(factory != NULL, FALSE);
-
- gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (median_sink_factory));
- gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_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
+)