diff options
author | Luis de Bethencourt <luis@debethencourt.com> | 2012-05-08 18:09:09 +0100 |
---|---|---|
committer | Luis de Bethencourt <luis@debethencourt.com> | 2012-05-09 13:18:53 +0100 |
commit | 9602a3513bd9fcad06f8808d6985cf2a06532a25 (patch) | |
tree | b28750d45604faa3f29ff67ce4deec838b800ac7 | |
parent | e78f5817e59f6eab61551dc70ce885f2909d00b8 (diff) | |
download | gstreamer-plugins-bad-9602a3513bd9fcad06f8808d6985cf2a06532a25.tar.gz |
gaudieffects: port exclusion to 0.11
-rw-r--r-- | gst/gaudieffects/gstexclusion.c | 73 | ||||
-rw-r--r-- | gst/gaudieffects/gstexclusion.h | 6 |
2 files changed, 43 insertions, 36 deletions
diff --git a/gst/gaudieffects/gstexclusion.c b/gst/gaudieffects/gstexclusion.c index 9ed04a9c3..460b6242e 100644 --- a/gst/gaudieffects/gstexclusion.c +++ b/gst/gaudieffects/gstexclusion.c @@ -1,7 +1,7 @@ /* * GStreamer - * Copyright (C) 2010 Luis de Bethencourt <luis@debethencourt.com> - * + * Copyright (C) <2010-2012> Luis de Bethencourt <luis@debethencourt.com> + * * Exclusion - color exclusion video effect. * Based on Pete Warden's FreeFrame plugin with the same name. * @@ -73,9 +73,9 @@ GST_DEBUG_CATEGORY_STATIC (gst_exclusion_debug); #define GST_CAT_DEFAULT gst_exclusion_debug #if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define CAPS_STR GST_VIDEO_CAPS_BGRx ";" GST_VIDEO_CAPS_RGBx +#define CAPS_STR GST_VIDEO_CAPS_MAKE ("{ BGRx, RGBx }") #else -#define CAPS_STR GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR +#define CAPS_STR GST_VIDEO_CAPS_MAKE ("{ xBGR, xRGB }") #endif /* Filter signals and args. */ @@ -113,8 +113,7 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_STATIC_CAPS (CAPS_STR) ); -GST_BOILERPLATE (GstExclusion, gst_exclusion, GstVideoFilter, - GST_TYPE_VIDEO_FILTER); +G_DEFINE_TYPE (GstExclusion, gst_exclusion, GST_TYPE_VIDEO_FILTER); static void gst_exclusion_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); @@ -128,29 +127,23 @@ static GstFlowReturn gst_exclusion_transform (GstBaseTransform * btrans, /* GObject vmethod implementations */ +/* Initialize the exclusion's class. */ static void -gst_exclusion_base_init (gpointer gclass) +gst_exclusion_class_init (GstExclusionClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); + GObjectClass *gobject_class = (GObjectClass *) klass; + GstElementClass *gstelement_class = (GstElementClass *) klass; + GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass; - gst_element_class_set_details_simple (element_class, - "Exclusion", + gst_element_class_set_details_simple (gstelement_class, "Exclusion", "Filter/Effect/Video", "Exclusion exclodes the colors in the video signal.", "Luis de Bethencourt <luis@debethencourt.com>"); - gst_element_class_add_pad_template (element_class, + gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_factory)); - gst_element_class_add_pad_template (element_class, + gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); -} - -/* Initialize the exclusion's class. */ -static void -gst_exclusion_class_init (GstExclusionClass * klass) -{ - GObjectClass *gobject_class = (GObjectClass *) klass; - GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass; gobject_class->set_property = gst_exclusion_set_property; gobject_class->get_property = gst_exclusion_get_property; @@ -174,7 +167,7 @@ gst_exclusion_class_init (GstExclusionClass * klass) * initialize instance structure. */ static void -gst_exclusion_init (GstExclusion * filter, GstExclusionClass * gclass) +gst_exclusion_init (GstExclusion * filter) { filter->factor = DEFAULT_FACTOR; filter->silent = FALSE; @@ -226,19 +219,25 @@ static gboolean gst_exclusion_set_caps (GstBaseTransform * btrans, GstCaps * incaps, GstCaps * outcaps) { - GstExclusion *filter = GST_EXCLUSION (btrans); - GstStructure *structure; - gboolean ret = FALSE; + GstExclusion *exclusion = GST_EXCLUSION (btrans); + GstVideoInfo info; - GST_OBJECT_LOCK (filter); - structure = gst_caps_get_structure (incaps, 0); - if (gst_structure_get_int (structure, "width", &filter->width) && - gst_structure_get_int (structure, "height", &filter->height)) { - ret = TRUE; - } - GST_OBJECT_UNLOCK (filter); + if (!gst_video_info_from_caps (&info, incaps)) + goto invalid_caps; + + exclusion->info = info; - return ret; + exclusion->width = GST_VIDEO_INFO_WIDTH (&info); + exclusion->height = GST_VIDEO_INFO_HEIGHT (&info); + + return TRUE; + + /* ERRORS */ +invalid_caps: + { + GST_DEBUG_OBJECT (btrans, "could not parse caps"); + return FALSE; + } } /* Actual processing. */ @@ -248,10 +247,16 @@ gst_exclusion_transform (GstBaseTransform * btrans, { GstExclusion *filter = GST_EXCLUSION (btrans); gint video_size, factor; - guint32 *src = (guint32 *) GST_BUFFER_DATA (in_buf); - guint32 *dest = (guint32 *) GST_BUFFER_DATA (out_buf); + guint32 *src, *dest; GstClockTime timestamp; gint64 stream_time; + GstVideoFrame in_frame, out_frame; + + gst_video_frame_map (&in_frame, &filter->info, in_buf, GST_MAP_READ); + gst_video_frame_map (&out_frame, &filter->info, out_buf, GST_MAP_WRITE); + + src = GST_VIDEO_FRAME_PLANE_DATA (&in_frame, 0); + dest = GST_VIDEO_FRAME_PLANE_DATA (&out_frame, 0); /* GstController: update the properties */ timestamp = GST_BUFFER_TIMESTAMP (in_buf); diff --git a/gst/gaudieffects/gstexclusion.h b/gst/gaudieffects/gstexclusion.h index b47eef1b9..e62899565 100644 --- a/gst/gaudieffects/gstexclusion.h +++ b/gst/gaudieffects/gstexclusion.h @@ -1,7 +1,7 @@ /* * GStreamer - * Copyright (C) 2010 Luis de Bethencourt <luis@debethencourt.com>> - * + * Copyright (C) <2010-2012> Luis de Bethencourt <luis@debethencourt.com>> + * * Exclusion - color exclusion video effect. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -49,6 +49,7 @@ #include <gst/gst.h> #include <gst/video/gstvideofilter.h> +#include <gst/video/video.h> G_BEGIN_DECLS @@ -73,6 +74,7 @@ struct _GstExclusion /* < private > */ + GstVideoInfo info; gint width, height; gint factor; |