opencv text overlay: rename and docuemnt

Rename the element textwrite to opencvtextoverlay. Add proper structuring to
opencv textoverlay element.

Fixes: #640561
This commit is contained in:
Sreerenj Balachandran 2011-03-27 23:50:24 +03:00 committed by Stefan Kost
parent 4a8ba50cb2
commit d6a1eebf37
7 changed files with 89 additions and 85 deletions

View file

@ -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 \

View file

@ -114,7 +114,7 @@
<xi:include href="xml/element-stereo.xml" />
<xi:include href="xml/element-stretch.xml" />
<xi:include href="xml/element-templatematch.xml" />
<xi:include href="xml/element-textwrite.xml" />
<xi:include href="xml/element-opencvtextoverlay.xml" />
<xi:include href="xml/element-tiger.xml" />
<xi:include href="xml/element-timidity.xml" />
<xi:include href="xml/element-trm.xml" />
@ -193,6 +193,7 @@
<xi:include href="xml/plugin-neon.xml" />
<xi:include href="xml/plugin-nsf.xml" />
<xi:include href="xml/plugin-nuvdemux.xml" />
<xi:include href="xml/plugin-opencv.xml" />
<xi:include href="xml/plugin-pcapparse.xml" />
<xi:include href="xml/plugin-qtmux.xml" />
<xi:include href="xml/plugin-rawparse.xml" />

View file

@ -1143,6 +1143,20 @@ GST_TYPE_NUV_DEMUX
gst_nuv_demux_get_type
</SECTION>
<FILE>element-opencvtextoverlay</FILE>
<TITLE>opencvtextoverlay</TITLE>
GstOpencvTextOverlay
<SUBSECTION Standard>
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
</SECTION>
<SECTION>
<FILE>element-pcapparse</FILE>
<TITLE>pcapparse</TITLE>
@ -1493,20 +1507,6 @@ gst_templatematch_get_type
gst_templatematch_plugin_init
</SECTION>
<FILE>element-textwrite</FILE>
<TITLE>textwrite</TITLE>
Gsttextwrite
<SUBSECTION Standard>
GsttextwriteClass
GST_textwrite
GST_textwrite_CLASS
GST_TYPE_textwrite
GST_IS_textwrite
GST_IS_textwrite_CLASS
gst_textwrite_get_type
gst_textwrite_plugin_init
</SECTION>
<SECTION>
<FILE>element-timidity</FILE>
<TITLE>timidity</TITLE>

View file

@ -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

View file

@ -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;

View file

@ -44,14 +44,14 @@
*/
/**
* SECTION:element-textwrite
* SECTION:element-opencvtextoverlay
*
* FIXME:Describe textwrite here.
* opencvtextoverlay renders the text on top of the video frames
*
* <refsect2>
* <title>Example launch line</title>
* |[
* gst-launch -v -m fakesrc ! textwrite ! fakesink silent=TRUE
* gst-launch-0.10 videotestsrc ! ffmpegcolorspace ! opencvtextoverlay text="Opencv Text Overlay " ! ffmpegcolorspace ! xvimagesink
* ]|
* </refsect2>
*/
@ -63,10 +63,11 @@
#include <gst/gst.h>
#include "gstopencvutils.h"
#include "gsttextwrite.h"
#include "gsttextoverlay.h"
GST_DEBUG_CATEGORY_STATIC (gst_opencv_text_overlay_debug);
#define GST_CAT_DEFAULT gst_opencv_opencv_text_overlay_debug
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
@ -114,23 +115,25 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB)
);
GST_BOILERPLATE (Gsttextwrite, gst_textwrite, GstElement, GST_TYPE_ELEMENT);
GST_BOILERPLATE (GstOpencvTextOverlay, gst_opencv_text_overlay, 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 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_textwrite_set_caps (GstPad * pad, GstCaps * caps);
static GstFlowReturn gst_textwrite_chain (GstPad * pad, GstBuffer * buf);
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_textwrite_finalize (GObject * obj)
gst_opencv_text_overlay_finalize (GObject * obj)
{
Gsttextwrite *filter = GST_textwrite (obj);
GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (obj);
if (filter->cvImage) {
cvReleaseImage (&filter->cvImage);
@ -144,14 +147,14 @@ gst_textwrite_finalize (GObject * obj)
/* GObject vmethod implementations */
static void
gst_textwrite_base_init (gpointer gclass)
gst_opencv_text_overlay_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
gst_element_class_set_details_simple (element_class,
"textwrite",
"opencvtextoverlay",
"Filter/Effect/Video",
"Performs text writing to the video", "sreerenj<bsreerenj@gmail.com>");
"Write text on the top of video", "sreerenj<bsreerenj@gmail.com>");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_factory));
@ -159,19 +162,20 @@ gst_textwrite_base_init (gpointer gclass)
gst_static_pad_template_get (&sink_factory));
}
/* initialize the textwrite's class */
/* initialize the opencvtextoverlay's class */
static void
gst_textwrite_class_init (GsttextwriteClass * klass)
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_textwrite_finalize);
gobject_class->finalize =
GST_DEBUG_FUNCPTR (gst_opencv_text_overlay_finalize);
gobject_class->set_property = gst_textwrite_set_property;
gobject_class->get_property = gst_textwrite_get_property;
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,
@ -209,8 +213,6 @@ gst_textwrite_class_init (GsttextwriteClass * klass)
"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,
@ -229,15 +231,16 @@ gst_textwrite_class_init (GsttextwriteClass * klass)
* initialize instance structure
*/
static void
gst_textwrite_init (Gsttextwrite * filter, GsttextwriteClass * gclass)
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_textwrite_set_caps));
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_textwrite_chain));
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,
@ -258,10 +261,10 @@ gst_textwrite_init (Gsttextwrite * filter, GsttextwriteClass * gclass)
}
static void
gst_textwrite_set_property (GObject * object, guint prop_id,
gst_opencv_text_overlay_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
Gsttextwrite *filter = GST_textwrite (object);
GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (object);
switch (prop_id) {
case PROP_TEXT:
@ -301,10 +304,10 @@ gst_textwrite_set_property (GObject * object, guint prop_id,
}
static void
gst_textwrite_get_property (GObject * object, guint prop_id,
gst_opencv_text_overlay_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
Gsttextwrite *filter = GST_textwrite (object);
GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (object);
switch (prop_id) {
case PROP_TEXT:
@ -344,15 +347,15 @@ gst_textwrite_get_property (GObject * object, guint prop_id,
/* this function handles the link with other elements */
static gboolean
gst_textwrite_set_caps (GstPad * pad, GstCaps * caps)
gst_opencv_text_overlay_set_caps (GstPad * pad, GstCaps * caps)
{
Gsttextwrite *filter;
GstOpencvTextOverlay *filter;
GstPad *otherpad;
gint width, height;
GstStructure *structure;
filter = GST_textwrite (gst_pad_get_parent (pad));
filter = GST_OPENCV_TEXT_OVERLAY (gst_pad_get_parent (pad));
structure = gst_caps_get_structure (caps, 0);
gst_structure_get_int (structure, "width", &width);
@ -371,11 +374,11 @@ gst_textwrite_set_caps (GstPad * pad, GstCaps * caps)
* this function does the actual processing
*/
static GstFlowReturn
gst_textwrite_chain (GstPad * pad, GstBuffer * buf)
gst_opencv_text_overlay_chain (GstPad * pad, GstBuffer * buf)
{
Gsttextwrite *filter;
GstOpencvTextOverlay *filter;
filter = GST_textwrite (GST_OBJECT_PARENT (pad));
filter = GST_OPENCV_TEXT_OVERLAY (GST_OBJECT_PARENT (pad));
filter->cvImage->imageData = (char *) GST_BUFFER_DATA (buf);
@ -396,15 +399,15 @@ gst_textwrite_chain (GstPad * pad, GstBuffer * buf)
* register the element factories and other features
*/
gboolean
gst_textwrite_plugin_init (GstPlugin * plugin)
gst_opencv_text_overlay_plugin_init (GstPlugin * plugin)
{
/* debug category for fltering log messages
*
* exchange the string 'Template textwrite' with your description
* exchange the string 'Template opencvtextoverlay' with your description
*/
GST_DEBUG_CATEGORY_INIT (gst_textwrite_debug, "textwrite",
0, "Template textwrite");
GST_DEBUG_CATEGORY_INIT (gst_opencv_text_overlay_debug, "opencvtextoverlay",
0, "Template opencvtextoverlay");
return gst_element_register (plugin, "textwrite", GST_RANK_NONE,
GST_TYPE_textwrite);
return gst_element_register (plugin, "opencvtextoverlay", GST_RANK_NONE,
GST_TYPE_OPENCV_TEXT_OVERLAY);
}

View file

@ -2,7 +2,7 @@
* GStreamer
* Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
* Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* Copyright (C) 2010 root <<user@hostname.org>>m
* Copyright (C) 2010 Sreerenj Balachandran <bsreerenj@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@ -43,37 +43,37 @@
* Boston, MA 02111-1307, USA.
*/
#ifndef __GST_textwrite_H__
#define __GST_textwrite_H__
#ifndef __GST_OPENCV_TEXT_OVERLAY_H__
#define __GST_OPENCV_TEXT_OVERLAY_H__
#include <gst/gst.h>
#include <cv.h>
#include <cvaux.h>
#include <highgui.h>
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))
#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 _Gsttextwrite Gsttextwrite;
typedef struct _GsttextwriteClass GsttextwriteClass;
typedef struct _GstOpencvTextOverlay GstOpencvTextOverlay;
typedef struct _GstOpencvTextOverlayClass GstOpencvTextOverlayClass;
struct _Gsttextwrite
struct _GstOpencvTextOverlay
{
GstElement element;
GstPad *sinkpad, *srcpad;
IplImage *cvImage;
CvMemStorage *cvStorage;
CvFont font;
@ -88,14 +88,14 @@ struct _Gsttextwrite
};
struct _GsttextwriteClass
struct _GstOpencvTextOverlayClass
{
GstElementClass parent_class;
};
GType gst_textwrite_get_type (void);
gboolean gst_textwrite_plugin_init (GstPlugin * plugin);
GType gst_opencv_text_overlay_get_type (void);
gboolean gst_opencv_text_overlay_plugin_init (GstPlugin * plugin);
G_END_DECLS
#endif /* __GST_textwrite_H__ */
#endif /* __GST_OPENCV_TEXT_OVERLAY_H__ */