From: Sreerenj Balachandran Date: Sun, 27 Mar 2011 20:50:24 +0000 (+0300) Subject: opencv text overlay: rename and docuemnt X-Git-Tag: 1.19.3~507^2~16050^2~422 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d6a1eebf37dbec4ecfcf4b869e716223a5a0137e;p=platform%2Fupstream%2Fgstreamer.git opencv text overlay: rename and docuemnt Rename the element textwrite to opencvtextoverlay. Add proper structuring to opencv textoverlay element. Fixes: #640561 --- diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am index b5dc83a164..1efa6ad002 100644 --- a/docs/plugins/Makefile.am +++ b/docs/plugins/Makefile.am @@ -124,7 +124,7 @@ EXTRA_HFILES = \ $(top_srcdir)/ext/opencv/gstfacedetect.h \ $(top_srcdir)/ext/opencv/gstpyramidsegment.h \ $(top_srcdir)/ext/opencv/gsttemplatematch.h \ - $(top_srcdir)/ext/opencv/gsttextwrite.h \ + $(top_srcdir)/ext/opencv/gsttextoverlay.h \ $(top_srcdir)/ext/rsvg/gstrsvgdec.h \ $(top_srcdir)/ext/rsvg/gstrsvgoverlay.h \ $(top_srcdir)/ext/sdl/sdlaudiosink.h \ diff --git a/docs/plugins/gst-plugins-bad-plugins-docs.sgml b/docs/plugins/gst-plugins-bad-plugins-docs.sgml index f5dc1a32fd..c3e14550c0 100644 --- a/docs/plugins/gst-plugins-bad-plugins-docs.sgml +++ b/docs/plugins/gst-plugins-bad-plugins-docs.sgml @@ -114,7 +114,7 @@ - + @@ -193,6 +193,7 @@ + diff --git a/docs/plugins/gst-plugins-bad-plugins-sections.txt b/docs/plugins/gst-plugins-bad-plugins-sections.txt index 03c050c324..4a2af52ea4 100644 --- a/docs/plugins/gst-plugins-bad-plugins-sections.txt +++ b/docs/plugins/gst-plugins-bad-plugins-sections.txt @@ -1143,6 +1143,20 @@ GST_TYPE_NUV_DEMUX gst_nuv_demux_get_type +element-opencvtextoverlay +opencvtextoverlay +GstOpencvTextOverlay + +GstOpencvTextOverlayClass +GST_OPENCV_TEXT_OVERLAY +GST_OPENCV_TEXT_OVERLAY_CLASS +GST_TYPE_OPENCV_TEXT_OVERLAY +GST_IS_OPENCV_TEXT_OVERLAY +GST_IS_OPENCV_TEXT_OVERLAY_CLASS +gst_opencv_text_overlay_get_type +gst_opencv_text_overlay_plugin_init + +
element-pcapparse pcapparse @@ -1493,20 +1507,6 @@ gst_templatematch_get_type gst_templatematch_plugin_init
-element-textwrite -textwrite -Gsttextwrite - -GsttextwriteClass -GST_textwrite -GST_textwrite_CLASS -GST_TYPE_textwrite -GST_IS_textwrite -GST_IS_textwrite_CLASS -gst_textwrite_get_type -gst_textwrite_plugin_init - -
element-timidity timidity diff --git a/ext/opencv/Makefile.am b/ext/opencv/Makefile.am index 7ddbe05d1a..d5a70edade 100644 --- a/ext/opencv/Makefile.am +++ b/ext/opencv/Makefile.am @@ -16,7 +16,7 @@ libgstopencv_la_SOURCES = gstopencv.c \ gstfacedetect.c \ gstpyramidsegment.c \ gsttemplatematch.c \ - gsttextwrite.c + gsttextoverlay.c # flags used to compile this facedetect # add other _CFLAGS and _LIBS as needed @@ -46,4 +46,4 @@ noinst_HEADERS = gstopencvvideofilter.h gstopencvutils.h \ gstfacedetect.h \ gstpyramidsegment.h \ gsttemplatematch.h \ - gsttextwrite.h + gsttextoverlay.h diff --git a/ext/opencv/gstopencv.c b/ext/opencv/gstopencv.c index 5b25e30726..e12ca78028 100644 --- a/ext/opencv/gstopencv.c +++ b/ext/opencv/gstopencv.c @@ -34,7 +34,7 @@ #include "gstfacedetect.h" #include "gstpyramidsegment.h" #include "gsttemplatematch.h" -#include "gsttextwrite.h" +#include "gsttextoverlay.h" static gboolean plugin_init (GstPlugin * plugin) @@ -72,7 +72,7 @@ plugin_init (GstPlugin * plugin) if (!gst_templatematch_plugin_init (plugin)) return FALSE; - if (!gst_textwrite_plugin_init (plugin)) + if (!gst_opencv_text_overlay_plugin_init (plugin)) return FALSE; return TRUE; diff --git a/ext/opencv/gsttextoverlay.c b/ext/opencv/gsttextoverlay.c new file mode 100644 index 0000000000..92169440fa --- /dev/null +++ b/ext/opencv/gsttextoverlay.c @@ -0,0 +1,413 @@ +/* + * GStreamer + * Copyright (C) 2005 Thomas Vander Stichele + * Copyright (C) 2005 Ronald S. Bultje + * Copyright (C) 2010 Sreerenj Balachandran + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Alternatively, the contents of this file may be used under the + * GNU Lesser General Public License Version 2.1 (the "LGPL"), in + * which case the following provisions apply instead of the ones + * mentioned above: + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/** + * SECTION:element-opencvtextoverlay + * + * opencvtextoverlay renders the text on top of the video frames + * + * + * Example launch line + * |[ + * gst-launch-0.10 videotestsrc ! ffmpegcolorspace ! opencvtextoverlay text="Opencv Text Overlay " ! ffmpegcolorspace ! xvimagesink + * ]| + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#include "gstopencvutils.h" +#include "gsttextoverlay.h" + +GST_DEBUG_CATEGORY_STATIC (gst_opencv_text_overlay_debug); +#define GST_CAT_DEFAULT gst_opencv_opencv_text_overlay_debug + +#define DEFAULT_PROP_TEXT "" +#define DEFAULT_PROP_WIDTH 1 +#define DEFAULT_PROP_HEIGHT 1 +#define DEFAULT_PROP_XPOS 50 +#define DEFAULT_PROP_YPOS 50 +#define DEFAULT_PROP_THICKNESS 2 +#define DEFAULT_PROP_COLOR 0 + + +/* Filter signals and args */ +enum +{ + /* FILL ME */ + LAST_SIGNAL +}; +#define DEFAULT_WIDTH 1.0 +#define DEFAULT_HEIGHT 1.0 +enum +{ + PROP_0, + PROP_XPOS, + PROP_YPOS, + PROP_THICKNESS, + PROP_COLOR_R, + PROP_COLOR_G, + PROP_COLOR_B, + PROP_TEXT, + PROP_HEIGHT, + PROP_WIDTH +}; + +/* the capabilities of the inputs and outputs. + * + * describe the real formats here. + */ +static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB) + ); + +static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB) + ); + +GST_BOILERPLATE (GstOpencvTextOverlay, gst_opencv_text_overlay, GstElement, + GST_TYPE_ELEMENT); + +static void gst_opencv_text_overlay_set_property (GObject * object, + guint prop_id, const GValue * value, GParamSpec * pspec); +static void gst_opencv_text_overlay_get_property (GObject * object, + guint prop_id, GValue * value, GParamSpec * pspec); + +static gboolean gst_opencv_text_overlay_set_caps (GstPad * pad, GstCaps * caps); +static GstFlowReturn gst_opencv_text_overlay_chain (GstPad * pad, + GstBuffer * buf); + + + +/* Clean up */ +static void +gst_opencv_text_overlay_finalize (GObject * obj) +{ + GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (obj); + + if (filter->cvImage) { + cvReleaseImage (&filter->cvImage); + } + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + + + +/* GObject vmethod implementations */ + +static void +gst_opencv_text_overlay_base_init (gpointer gclass) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); + + gst_element_class_set_details_simple (element_class, + "opencvtextoverlay", + "Filter/Effect/Video", + "Write text on the top of video", "sreerenj"); + + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&src_factory)); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&sink_factory)); +} + +/* initialize the opencvtextoverlay's class */ +static void +gst_opencv_text_overlay_class_init (GstOpencvTextOverlayClass * klass) +{ + GObjectClass *gobject_class; + + gobject_class = (GObjectClass *) klass; + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = + GST_DEBUG_FUNCPTR (gst_opencv_text_overlay_finalize); + + gobject_class->set_property = gst_opencv_text_overlay_set_property; + gobject_class->get_property = gst_opencv_text_overlay_get_property; + + + g_object_class_install_property (gobject_class, PROP_TEXT, + g_param_spec_string ("text", "text", + "Text to be display.", DEFAULT_PROP_TEXT, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_XPOS, + g_param_spec_int ("xpos", "horizontal position", + "Sets the Horizontal position", 0, G_MAXINT, + DEFAULT_PROP_XPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_YPOS, + g_param_spec_int ("ypos", "vertical position", + "Sets the Vertical position", 0, G_MAXINT, + DEFAULT_PROP_YPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_THICKNESS, + g_param_spec_int ("thickness", "font thickness", + "Sets the Thickness of Font", 0, G_MAXINT, + DEFAULT_PROP_THICKNESS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_COLOR_R, + g_param_spec_int ("colorR", "color -Red ", + "Sets the color -R", 0, 255, + DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_COLOR_G, + g_param_spec_int ("colorG", "color -Green", + "Sets the color -G", 0, 255, + DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_COLOR_B, + g_param_spec_int ("colorB", "color -Blue", + "Sets the color -B", 0, 255, + DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_HEIGHT, + g_param_spec_double ("height", "Height", + "Sets the height of fonts", 1.0, 5.0, + DEFAULT_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_WIDTH, + g_param_spec_double ("width", "Width", + "Sets the width of fonts", 1.0, 5.0, + DEFAULT_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + +} + +/* initialize the new element + * instantiate pads and add them to element + * set pad calback functions + * initialize instance structure + */ +static void +gst_opencv_text_overlay_init (GstOpencvTextOverlay * filter, + GstOpencvTextOverlayClass * gclass) +{ + filter->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); + gst_pad_set_setcaps_function (filter->sinkpad, + GST_DEBUG_FUNCPTR (gst_opencv_text_overlay_set_caps)); + gst_pad_set_getcaps_function (filter->sinkpad, + GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); + gst_pad_set_chain_function (filter->sinkpad, + GST_DEBUG_FUNCPTR (gst_opencv_text_overlay_chain)); + + filter->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); + gst_pad_set_getcaps_function (filter->srcpad, + GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); + + gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); + gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad); + filter->textbuf = g_strdup (DEFAULT_PROP_TEXT); + filter->width = DEFAULT_PROP_WIDTH; + filter->height = DEFAULT_PROP_HEIGHT; + filter->xpos = DEFAULT_PROP_XPOS; + filter->ypos = DEFAULT_PROP_YPOS; + filter->thickness = DEFAULT_PROP_THICKNESS; + filter->colorR = DEFAULT_PROP_COLOR; + filter->colorG = DEFAULT_PROP_COLOR; + filter->colorB = DEFAULT_PROP_COLOR; + +} + +static void +gst_opencv_text_overlay_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (object); + + switch (prop_id) { + case PROP_TEXT: + g_free (filter->textbuf); + filter->textbuf = g_value_dup_string (value); + break; + case PROP_XPOS: + filter->xpos = g_value_get_int (value); + break; + case PROP_YPOS: + filter->ypos = g_value_get_int (value); + break; + case PROP_THICKNESS: + filter->thickness = g_value_get_int (value); + break; + + case PROP_COLOR_R: + filter->colorR = g_value_get_int (value); + break; + case PROP_COLOR_G: + filter->colorG = g_value_get_int (value); + break; + case PROP_COLOR_B: + filter->colorB = g_value_get_int (value); + break; + + case PROP_HEIGHT: + filter->height = g_value_get_double (value); + break; + case PROP_WIDTH: + filter->width = g_value_get_double (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_opencv_text_overlay_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) +{ + GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (object); + + switch (prop_id) { + case PROP_TEXT: + g_value_set_string (value, filter->textbuf); + break; + case PROP_XPOS: + g_value_set_int (value, filter->xpos); + break; + case PROP_YPOS: + g_value_set_int (value, filter->ypos); + break; + case PROP_THICKNESS: + g_value_set_int (value, filter->thickness); + break; + case PROP_COLOR_R: + g_value_set_int (value, filter->colorR); + break; + case PROP_COLOR_G: + g_value_set_int (value, filter->colorG); + break; + case PROP_COLOR_B: + g_value_set_int (value, filter->colorB); + break; + case PROP_HEIGHT: + g_value_set_double (value, filter->height); + break; + case PROP_WIDTH: + g_value_set_double (value, filter->width); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +/* GstElement vmethod implementations */ + +/* this function handles the link with other elements */ +static gboolean +gst_opencv_text_overlay_set_caps (GstPad * pad, GstCaps * caps) +{ + GstOpencvTextOverlay *filter; + GstPad *otherpad; + + gint width, height; + GstStructure *structure; + + filter = GST_OPENCV_TEXT_OVERLAY (gst_pad_get_parent (pad)); + + structure = gst_caps_get_structure (caps, 0); + gst_structure_get_int (structure, "width", &width); + gst_structure_get_int (structure, "height", &height); + + filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3); + filter->cvStorage = cvCreateMemStorage (0); + + otherpad = (pad == filter->srcpad) ? filter->sinkpad : filter->srcpad; + gst_object_unref (filter); + + return gst_pad_set_caps (otherpad, caps); +} + +/* chain function + * this function does the actual processing + */ +static GstFlowReturn +gst_opencv_text_overlay_chain (GstPad * pad, GstBuffer * buf) +{ + GstOpencvTextOverlay *filter; + + filter = GST_OPENCV_TEXT_OVERLAY (GST_OBJECT_PARENT (pad)); + + filter->cvImage->imageData = (char *) GST_BUFFER_DATA (buf); + + cvInitFont (&(filter->font), CV_FONT_VECTOR0, filter->width, filter->height, + 0, filter->thickness, 0); + + buf = gst_buffer_make_writable (buf); + cvPutText (filter->cvImage, filter->textbuf, cvPoint (filter->xpos, + filter->ypos), &(filter->font), cvScalar (filter->colorR, + filter->colorG, filter->colorB, 0)); + + return gst_pad_push (filter->srcpad, buf); +} + + +/* entry point to initialize the plug-in + * initialize the plug-in itself + * register the element factories and other features + */ +gboolean +gst_opencv_text_overlay_plugin_init (GstPlugin * plugin) +{ + /* debug category for fltering log messages + * + * exchange the string 'Template opencvtextoverlay' with your description + */ + GST_DEBUG_CATEGORY_INIT (gst_opencv_text_overlay_debug, "opencvtextoverlay", + 0, "Template opencvtextoverlay"); + + return gst_element_register (plugin, "opencvtextoverlay", GST_RANK_NONE, + GST_TYPE_OPENCV_TEXT_OVERLAY); +} diff --git a/ext/opencv/gsttextoverlay.h b/ext/opencv/gsttextoverlay.h new file mode 100644 index 0000000000..e870cf5257 --- /dev/null +++ b/ext/opencv/gsttextoverlay.h @@ -0,0 +1,101 @@ +/* + * GStreamer + * Copyright (C) 2005 Thomas Vander Stichele + * Copyright (C) 2005 Ronald S. Bultje + * Copyright (C) 2010 Sreerenj Balachandran + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Alternatively, the contents of this file may be used under the + * GNU Lesser General Public License Version 2.1 (the "LGPL"), in + * which case the following provisions apply instead of the ones + * mentioned above: + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GST_OPENCV_TEXT_OVERLAY_H__ +#define __GST_OPENCV_TEXT_OVERLAY_H__ + +#include +#include +#include +#include + +G_BEGIN_DECLS + +/* #defines don't like whitespacey bits */ +#define GST_TYPE_OPENCV_TEXT_OVERLAY \ + (gst_opencv_text_overlay_get_type()) +#define GST_OPENCV_TEXT_OVERLAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPENCV_TEXT_OVERLAY,GstOpencvTextOverlay)) +#define GST_OPECV_TEXT_OVERLAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPECV_TEXT_OVERLAY,GstOpencvTextOverlayClass)) +#define GST_IS_OPENCV_TEXT_OVERLAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OPENCV_TEXT_OVERLAY)) +#define GST_IS_OPENCV_TEXT_OVERLAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OPENCV_TEXT_OVERLAY)) + +typedef struct _GstOpencvTextOverlay GstOpencvTextOverlay; +typedef struct _GstOpencvTextOverlayClass GstOpencvTextOverlayClass; + +struct _GstOpencvTextOverlay +{ + GstElement element; + + GstPad *sinkpad, *srcpad; + + IplImage *cvImage; + CvMemStorage *cvStorage; + CvFont font; + + gint xpos; + gint ypos; + gint thickness; + gint colorR,colorG,colorB; + gdouble height; + gdouble width; + gchar *textbuf; + +}; + +struct _GstOpencvTextOverlayClass +{ + GstElementClass parent_class; +}; + +GType gst_opencv_text_overlay_get_type (void); +gboolean gst_opencv_text_overlay_plugin_init (GstPlugin * plugin); + +G_END_DECLS + +#endif /* __GST_OPENCV_TEXT_OVERLAY_H__ */ diff --git a/ext/opencv/gsttextwrite.c b/ext/opencv/gsttextwrite.c deleted file mode 100644 index 612e20a432..0000000000 --- a/ext/opencv/gsttextwrite.c +++ /dev/null @@ -1,410 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2005 Thomas Vander Stichele - * Copyright (C) 2005 Ronald S. Bultje - * Copyright (C) 2010 Sreerenj Balachandran - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Alternatively, the contents of this file may be used under the - * GNU Lesser General Public License Version 2.1 (the "LGPL"), in - * which case the following provisions apply instead of the ones - * mentioned above: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/** - * SECTION:element-textwrite - * - * FIXME:Describe textwrite here. - * - * - * Example launch line - * |[ - * gst-launch -v -m fakesrc ! textwrite ! fakesink silent=TRUE - * ]| - * - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#include "gstopencvutils.h" -#include "gsttextwrite.h" - -GST_DEBUG_CATEGORY_STATIC (gst_textwrite_debug); -#define GST_CAT_DEFAULT gst_textwrite_debug -#define DEFAULT_PROP_TEXT "" -#define DEFAULT_PROP_WIDTH 1 -#define DEFAULT_PROP_HEIGHT 1 -#define DEFAULT_PROP_XPOS 50 -#define DEFAULT_PROP_YPOS 50 -#define DEFAULT_PROP_THICKNESS 2 -#define DEFAULT_PROP_COLOR 0 - - -/* Filter signals and args */ -enum -{ - /* FILL ME */ - LAST_SIGNAL -}; -#define DEFAULT_WIDTH 1.0 -#define DEFAULT_HEIGHT 1.0 -enum -{ - PROP_0, - PROP_XPOS, - PROP_YPOS, - PROP_THICKNESS, - PROP_COLOR_R, - PROP_COLOR_G, - PROP_COLOR_B, - PROP_TEXT, - PROP_HEIGHT, - PROP_WIDTH -}; - -/* the capabilities of the inputs and outputs. - * - * describe the real formats here. - */ -static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB) - ); - -static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB) - ); - -GST_BOILERPLATE (Gsttextwrite, gst_textwrite, GstElement, GST_TYPE_ELEMENT); - -static void gst_textwrite_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_textwrite_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static gboolean gst_textwrite_set_caps (GstPad * pad, GstCaps * caps); -static GstFlowReturn gst_textwrite_chain (GstPad * pad, GstBuffer * buf); - - - -/* Clean up */ -static void -gst_textwrite_finalize (GObject * obj) -{ - Gsttextwrite *filter = GST_textwrite (obj); - - if (filter->cvImage) { - cvReleaseImage (&filter->cvImage); - } - - G_OBJECT_CLASS (parent_class)->finalize (obj); -} - - - -/* GObject vmethod implementations */ - -static void -gst_textwrite_base_init (gpointer gclass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - - gst_element_class_set_details_simple (element_class, - "textwrite", - "Filter/Effect/Video", - "Performs text writing to the video", "sreerenj"); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&src_factory)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&sink_factory)); -} - -/* initialize the textwrite's class */ -static void -gst_textwrite_class_init (GsttextwriteClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - - parent_class = g_type_class_peek_parent (klass); - gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_textwrite_finalize); - - gobject_class->set_property = gst_textwrite_set_property; - gobject_class->get_property = gst_textwrite_get_property; - - - g_object_class_install_property (gobject_class, PROP_TEXT, - g_param_spec_string ("text", "text", - "Text to be display.", DEFAULT_PROP_TEXT, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_XPOS, - g_param_spec_int ("xpos", "horizontal position", - "Sets the Horizontal position", 0, G_MAXINT, - DEFAULT_PROP_XPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_YPOS, - g_param_spec_int ("ypos", "vertical position", - "Sets the Vertical position", 0, G_MAXINT, - DEFAULT_PROP_YPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_THICKNESS, - g_param_spec_int ("thickness", "font thickness", - "Sets the Thickness of Font", 0, G_MAXINT, - DEFAULT_PROP_THICKNESS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_COLOR_R, - g_param_spec_int ("colorR", "color -Red ", - "Sets the color -R", 0, 255, - DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_COLOR_G, - g_param_spec_int ("colorG", "color -Green", - "Sets the color -G", 0, 255, - DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_COLOR_B, - g_param_spec_int ("colorB", "color -Blue", - "Sets the color -B", 0, 255, - DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - - - g_object_class_install_property (gobject_class, PROP_HEIGHT, - g_param_spec_double ("height", "Height", - "Sets the height of fonts", 1.0, 5.0, - DEFAULT_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_WIDTH, - g_param_spec_double ("width", "Width", - "Sets the width of fonts", 1.0, 5.0, - DEFAULT_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - -} - -/* initialize the new element - * instantiate pads and add them to element - * set pad calback functions - * initialize instance structure - */ -static void -gst_textwrite_init (Gsttextwrite * filter, GsttextwriteClass * gclass) -{ - filter->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); - gst_pad_set_setcaps_function (filter->sinkpad, - GST_DEBUG_FUNCPTR (gst_textwrite_set_caps)); - gst_pad_set_getcaps_function (filter->sinkpad, - GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); - gst_pad_set_chain_function (filter->sinkpad, - GST_DEBUG_FUNCPTR (gst_textwrite_chain)); - - filter->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); - gst_pad_set_getcaps_function (filter->srcpad, - GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); - - gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); - gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad); - filter->textbuf = g_strdup (DEFAULT_PROP_TEXT); - filter->width = DEFAULT_PROP_WIDTH; - filter->height = DEFAULT_PROP_HEIGHT; - filter->xpos = DEFAULT_PROP_XPOS; - filter->ypos = DEFAULT_PROP_YPOS; - filter->thickness = DEFAULT_PROP_THICKNESS; - filter->colorR = DEFAULT_PROP_COLOR; - filter->colorG = DEFAULT_PROP_COLOR; - filter->colorB = DEFAULT_PROP_COLOR; - -} - -static void -gst_textwrite_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - Gsttextwrite *filter = GST_textwrite (object); - - switch (prop_id) { - case PROP_TEXT: - g_free (filter->textbuf); - filter->textbuf = g_value_dup_string (value); - break; - case PROP_XPOS: - filter->xpos = g_value_get_int (value); - break; - case PROP_YPOS: - filter->ypos = g_value_get_int (value); - break; - case PROP_THICKNESS: - filter->thickness = g_value_get_int (value); - break; - - case PROP_COLOR_R: - filter->colorR = g_value_get_int (value); - break; - case PROP_COLOR_G: - filter->colorG = g_value_get_int (value); - break; - case PROP_COLOR_B: - filter->colorB = g_value_get_int (value); - break; - - case PROP_HEIGHT: - filter->height = g_value_get_double (value); - break; - case PROP_WIDTH: - filter->width = g_value_get_double (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_textwrite_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - Gsttextwrite *filter = GST_textwrite (object); - - switch (prop_id) { - case PROP_TEXT: - g_value_set_string (value, filter->textbuf); - break; - case PROP_XPOS: - g_value_set_int (value, filter->xpos); - break; - case PROP_YPOS: - g_value_set_int (value, filter->ypos); - break; - case PROP_THICKNESS: - g_value_set_int (value, filter->thickness); - break; - case PROP_COLOR_R: - g_value_set_int (value, filter->colorR); - break; - case PROP_COLOR_G: - g_value_set_int (value, filter->colorG); - break; - case PROP_COLOR_B: - g_value_set_int (value, filter->colorB); - break; - case PROP_HEIGHT: - g_value_set_double (value, filter->height); - break; - case PROP_WIDTH: - g_value_set_double (value, filter->width); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -/* GstElement vmethod implementations */ - -/* this function handles the link with other elements */ -static gboolean -gst_textwrite_set_caps (GstPad * pad, GstCaps * caps) -{ - Gsttextwrite *filter; - GstPad *otherpad; - - gint width, height; - GstStructure *structure; - - filter = GST_textwrite (gst_pad_get_parent (pad)); - - structure = gst_caps_get_structure (caps, 0); - gst_structure_get_int (structure, "width", &width); - gst_structure_get_int (structure, "height", &height); - - filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3); - filter->cvStorage = cvCreateMemStorage (0); - - otherpad = (pad == filter->srcpad) ? filter->sinkpad : filter->srcpad; - gst_object_unref (filter); - - return gst_pad_set_caps (otherpad, caps); -} - -/* chain function - * this function does the actual processing - */ -static GstFlowReturn -gst_textwrite_chain (GstPad * pad, GstBuffer * buf) -{ - Gsttextwrite *filter; - - filter = GST_textwrite (GST_OBJECT_PARENT (pad)); - - filter->cvImage->imageData = (char *) GST_BUFFER_DATA (buf); - - cvInitFont (&(filter->font), CV_FONT_VECTOR0, filter->width, filter->height, - 0, filter->thickness, 0); - - buf = gst_buffer_make_writable (buf); - cvPutText (filter->cvImage, filter->textbuf, cvPoint (filter->xpos, - filter->ypos), &(filter->font), cvScalar (filter->colorR, - filter->colorG, filter->colorB, 0)); - - return gst_pad_push (filter->srcpad, buf); -} - - -/* entry point to initialize the plug-in - * initialize the plug-in itself - * register the element factories and other features - */ -gboolean -gst_textwrite_plugin_init (GstPlugin * plugin) -{ - /* debug category for fltering log messages - * - * exchange the string 'Template textwrite' with your description - */ - GST_DEBUG_CATEGORY_INIT (gst_textwrite_debug, "textwrite", - 0, "Template textwrite"); - - return gst_element_register (plugin, "textwrite", GST_RANK_NONE, - GST_TYPE_textwrite); -} diff --git a/ext/opencv/gsttextwrite.h b/ext/opencv/gsttextwrite.h deleted file mode 100644 index 442519a61b..0000000000 --- a/ext/opencv/gsttextwrite.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2005 Thomas Vander Stichele - * Copyright (C) 2005 Ronald S. Bultje - * Copyright (C) 2010 root <>m - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Alternatively, the contents of this file may be used under the - * GNU Lesser General Public License Version 2.1 (the "LGPL"), in - * which case the following provisions apply instead of the ones - * mentioned above: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_textwrite_H__ -#define __GST_textwrite_H__ - -#include -#include -#include -#include -G_BEGIN_DECLS - -/* #defines don't like whitespacey bits */ -#define GST_TYPE_textwrite \ - (gst_textwrite_get_type()) -#define GST_textwrite(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_textwrite,Gsttextwrite)) -#define GST_textwrite_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_textwrite,GsttextwriteClass)) -#define GST_IS_textwrite(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_textwrite)) -#define GST_IS_textwrite_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_textwrite)) - -typedef struct _Gsttextwrite Gsttextwrite; -typedef struct _GsttextwriteClass GsttextwriteClass; - -struct _Gsttextwrite -{ - GstElement element; - - GstPad *sinkpad, *srcpad; - - - IplImage *cvImage; - CvMemStorage *cvStorage; - CvFont font; - - gint xpos; - gint ypos; - gint thickness; - gint colorR,colorG,colorB; - gdouble height; - gdouble width; - gchar *textbuf; - -}; - -struct _GsttextwriteClass -{ - GstElementClass parent_class; -}; - -GType gst_textwrite_get_type (void); -gboolean gst_textwrite_plugin_init (GstPlugin * plugin); - -G_END_DECLS - -#endif /* __GST_textwrite_H__ */