diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/element-templates/basesrc | 16 | ||||
-rw-r--r-- | tools/element-templates/element | 12 | ||||
-rw-r--r-- | tools/element-templates/sinkpad-template | 19 | ||||
-rw-r--r-- | tools/element-templates/sinkpad-template-video | 33 | ||||
-rw-r--r-- | tools/element-templates/srcpad-template | 19 | ||||
-rw-r--r-- | tools/element-templates/srcpad-template-video | 33 | ||||
-rw-r--r-- | tools/element-templates/videofilter | 78 |
7 files changed, 207 insertions, 3 deletions
diff --git a/tools/element-templates/basesrc b/tools/element-templates/basesrc index 0b7e56fc1..1be325a22 100644 --- a/tools/element-templates/basesrc +++ b/tools/element-templates/basesrc @@ -161,10 +161,16 @@ static gboolean gst_replace_event (GstBaseSrc * src, GstEvent * event) { GstReplace *replace = GST_REPLACE (src); + gboolean ret; GST_DEBUG_OBJECT (replace, "event"); - return TRUE; + switch (GST_EVENT_TYPE (event)) { + default: + ret = GST_BASE_SRC_CLASS (parent_class)->event (src, event); + } + + return ret; } static GstFlowReturn @@ -192,10 +198,16 @@ static gboolean gst_replace_query (GstBaseSrc * src, GstQuery * query) { GstReplace *replace = GST_REPLACE (src); + gboolean ret; GST_DEBUG_OBJECT (replace, "query"); - return TRUE; + switch (GST_QUERY_TYPE (query)) { + default: + ret = GST_BASE_SRC_CLASS (parent_class)->query (src, query); + } + + return ret; } static gboolean diff --git a/tools/element-templates/element b/tools/element-templates/element index 001f48762..38ab6e4da 100644 --- a/tools/element-templates/element +++ b/tools/element-templates/element @@ -123,7 +123,17 @@ gst_replace_send_event (GstElement * element, GstEvent * event) static gboolean gst_replace_query (GstElement * element, GstQuery * query) { + GstReplace *replace = GST_REPLACE (element); + gboolean ret; - return FALSE; + GST_DEBUG_OBJECT (replace, "query"); + + switch (GST_QUERY_TYPE (query)) { + default: + ret = GST_ELEMENT_CLASS (parent_class)->query (element, query); + break; + } + + return ret; } % end diff --git a/tools/element-templates/sinkpad-template b/tools/element-templates/sinkpad-template new file mode 100644 index 000000000..b06b346b1 --- /dev/null +++ b/tools/element-templates/sinkpad-template @@ -0,0 +1,19 @@ +/* vim: set filetype=c: */ + +% instance-members +% prototypes +% pad-template +static GstStaticPadTemplate gst_replace_sink_template = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("application/unknown") + ); + +% base-init + gst_element_class_add_static_pad_template (element_class, + &gst_replace_sink_template); +% instance-init +% methods +% end + diff --git a/tools/element-templates/sinkpad-template-video b/tools/element-templates/sinkpad-template-video new file mode 100644 index 000000000..b317c6fd7 --- /dev/null +++ b/tools/element-templates/sinkpad-template-video @@ -0,0 +1,33 @@ +/* vim: set filetype=c: */ + +% instance-members +% prototypes +% pad-template +/* FIXME: add/remove formats you can handle */ +#define VIDEO_SINK_CAPS \ + GST_VIDEO_CAPS_RGBA "; " \ + GST_VIDEO_CAPS_ARGB "; " \ + GST_VIDEO_CAPS_BGRA "; " \ + GST_VIDEO_CAPS_ABGR "; " \ + GST_VIDEO_CAPS_RGBx "; " \ + GST_VIDEO_CAPS_xRGB "; " \ + GST_VIDEO_CAPS_BGRx "; " \ + GST_VIDEO_CAPS_xBGR "; " \ + GST_VIDEO_CAPS_RGB "; " \ + GST_VIDEO_CAPS_BGR "; " \ + GST_VIDEO_CAPS_YUV("{ AYUV }") + +static GstStaticPadTemplate gst_replace_sink_template = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (VIDEO_SINK_CAPS) + ); + +% base-init + gst_element_class_add_static_pad_template (element_class, + &gst_replace_sink_template); +% instance-init +% methods +% end + diff --git a/tools/element-templates/srcpad-template b/tools/element-templates/srcpad-template new file mode 100644 index 000000000..dd0842bbd --- /dev/null +++ b/tools/element-templates/srcpad-template @@ -0,0 +1,19 @@ +/* vim: set filetype=c: */ + +% instance-members +% prototypes +% pad-template +static GstStaticPadTemplate gst_replace_src_template = +GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("application/unknown") + ); + +% base-init + gst_element_class_add_static_pad_template (element_class, + &gst_replace_src_template); +% instance-init +% methods +% end + diff --git a/tools/element-templates/srcpad-template-video b/tools/element-templates/srcpad-template-video new file mode 100644 index 000000000..4f3932086 --- /dev/null +++ b/tools/element-templates/srcpad-template-video @@ -0,0 +1,33 @@ +/* vim: set filetype=c: */ + +% instance-members +% prototypes +% pad-template +/* FIXME: add/remove formats you can handle */ +#define VIDEO_SRC_CAPS \ + GST_VIDEO_CAPS_RGBA "; " \ + GST_VIDEO_CAPS_ARGB "; " \ + GST_VIDEO_CAPS_BGRA "; " \ + GST_VIDEO_CAPS_ABGR "; " \ + GST_VIDEO_CAPS_RGBx "; " \ + GST_VIDEO_CAPS_xRGB "; " \ + GST_VIDEO_CAPS_BGRx "; " \ + GST_VIDEO_CAPS_xBGR "; " \ + GST_VIDEO_CAPS_RGB "; " \ + GST_VIDEO_CAPS_BGR "; " \ + GST_VIDEO_CAPS_YUV("{ AYUV }") + +static GstStaticPadTemplate gst_replace_src_template = +GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (VIDEO_SRC_CAPS) + ); + +% base-init + gst_element_class_add_static_pad_template (element_class, + &gst_replace_src_template); +% instance-init +% methods +% end + diff --git a/tools/element-templates/videofilter b/tools/element-templates/videofilter new file mode 100644 index 000000000..3a94b0838 --- /dev/null +++ b/tools/element-templates/videofilter @@ -0,0 +1,78 @@ +/* vim: set filetype=c: */ +% ClassName +GstVideoFilter +% TYPE_CLASS_NAME +GST_TYPE_VIDEO_FILTER +% pads +sinkpad-template-video srcpad-template-video +% pkg-config +gstreamer-video-0.10 +% includes +#include <gst/video/video.h> +#include <gst/video/gstvideofilter.h> +% prototypes +static gboolean +gst_replace_start (GstBaseTransform * trans); +static gboolean +gst_replace_stop (GstBaseTransform * trans); +static GstFlowReturn +gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf); +static gboolean +gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps, + GstCaps * outcaps); +% declare-class + GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); +% set-methods + base_transform_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); + base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); + base_transform_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); + base_transform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_ip); +% methods + +static gboolean +gst_replace_start (GstBaseTransform * trans) +{ + /* GstReplace *replace = GST_REPLACE (trans); */ + + /* initialize processing */ + return TRUE; +} + +static gboolean +gst_replace_stop (GstBaseTransform * trans) +{ + /* GstReplace *replace = GST_REPLACE (trans); */ + + /* finalize processing */ + return TRUE; +} + +static gboolean +gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps, + GstCaps * outcaps) +{ + /* GstReplace *replace = GST_REPLACE (trans); */ + GstVideoFormat video_format; + int w, h; + + /* parse input caps, output caps are the same so we ignore them */ + if (!gst_video_format_parse_caps (incaps, &video_format, &w, &h)) + return FALSE; + + /* You'll need to add those fields to the instance struct first */ + /* replace->video_format = video_format; */ + /* replace->width = w; */ + /* replace->height = h; */ + return TRUE; +} + +static GstFlowReturn +gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf) +{ + /* GstReplace *replace = GST_REPLACE (trans); */ + + /* process the video data in the buffer in-place */ + return GST_FLOW_OK; +} + +% end |