element-maker: Update somewhat for 1.0

Only converted basetransform for the moment.  It's probably easier
to write templates from scratch from the documentation.
This commit is contained in:
David Schleef 2013-02-06 12:35:36 -08:00
parent 250555a7de
commit f790fcbfa6
5 changed files with 160 additions and 92 deletions

View file

@ -6,79 +6,144 @@ GST_TYPE_BASE_TRANSFORM
% pads % pads
sinkpad-simple srcpad-simple sinkpad-simple srcpad-simple
% pkg-config % pkg-config
gstreamer-base-0.10 gstreamer-base-1.0
% pads % pads
sinkpad-simple srcpad-simple sinkpad-simple srcpad-simple
% includes % includes
#include <gst/base/gstbasetransform.h> #include <gst/base/gstbasetransform.h>
% prototypes % prototypes
static GstCaps *gst_replace_transform_caps (GstBaseTransform * trans, static GstCaps *gst_replace_transform_caps (GstBaseTransform *trans,
GstPadDirection direction, GstCaps * caps); GstPadDirection direction, GstCaps *caps, GstCaps *filter);
static void static GstCaps *
gst_replace_fixate_caps (GstBaseTransform * trans, gst_replace_fixate_caps (GstBaseTransform * trans,
GstPadDirection direction, GstCaps * caps, GstCaps * othercaps); GstPadDirection direction, GstCaps * caps, GstCaps * othercaps);
static gboolean static gboolean gst_replace_accept_caps (GstBaseTransform *trans,
gst_replace_transform_size (GstBaseTransform * trans, GstPadDirection direction, GstCaps *caps);
static gboolean gst_replace_set_caps (GstBaseTransform *trans, GstCaps *incaps,
GstCaps *outcaps);
static gboolean gst_replace_query (GstBaseTransform *trans, GstPadDirection direction,
GstQuery *query);
static gboolean gst_replace_decide_allocation (GstBaseTransform *trans,
GstQuery *query);
static gboolean gst_replace_filter_meta (GstBaseTransform *trans, GstQuery *query,
GType api, const GstStructure *params);
static gboolean gst_replace_propose_allocation (GstBaseTransform *trans,
GstQuery *decide_query, GstQuery *query);
static gboolean gst_replace_transform_size (GstBaseTransform * trans,
GstPadDirection direction, GstPadDirection direction,
GstCaps * caps, guint size, GstCaps * othercaps, guint * othersize); GstCaps * caps, gsize size, GstCaps * othercaps, gsize * othersize);
static gboolean static gboolean gst_replace_get_unit_size (GstBaseTransform * trans,
gst_replace_get_unit_size (GstBaseTransform * trans, GstCaps * caps, GstCaps * caps, gsize * size);
guint * size);
static gboolean
gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps,
GstCaps * outcaps);
static gboolean gst_replace_start (GstBaseTransform * trans); static gboolean gst_replace_start (GstBaseTransform * trans);
static gboolean gst_replace_stop (GstBaseTransform * trans); static gboolean gst_replace_stop (GstBaseTransform * trans);
static gboolean gst_replace_event (GstBaseTransform * trans, GstEvent * event); static gboolean gst_replace_sink_event (GstBaseTransform * trans,
GstEvent * event);
static gboolean gst_replace_src_event (GstBaseTransform * trans,
GstEvent * event);
static GstFlowReturn gst_replace_prepare_output_buffer (
GstBaseTransform * trans, GstBuffer *input, GstBuffer **outbuf);
static gboolean gst_replace_copy_metadata (GstBaseTransform *trans,
GstBuffer *input, GstBuffer *outbuf);
static gboolean gst_replace_transform_meta (GstBaseTransform *trans,
GstBuffer *outbuf, GstMeta *meta, GstBuffer *inbuf);
static void
gst_replace_before_transform (GstBaseTransform * trans, GstBuffer * buffer);
static GstFlowReturn static GstFlowReturn
gst_replace_transform (GstBaseTransform * trans, GstBuffer * inbuf, gst_replace_transform (GstBaseTransform * trans, GstBuffer * inbuf,
GstBuffer * outbuf); GstBuffer * outbuf);
static GstFlowReturn static GstFlowReturn
gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf); gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf);
static GstFlowReturn
gst_replace_prepare_output_buffer (GstBaseTransform * trans,
GstBuffer * input, gint size, GstCaps * caps, GstBuffer ** buf);
static gboolean
gst_replace_src_event (GstBaseTransform * trans, GstEvent * event);
static void
gst_replace_before_transform (GstBaseTransform * trans, GstBuffer * buffer);
% declare-class % declare-class
GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass);
% set-methods % set-methods
base_transform_class->transform_caps = GST_DEBUG_FUNCPTR (gst_replace_transform_caps); base_transform_class->transform_caps = GST_DEBUG_FUNCPTR (gst_replace_transform_caps);
base_transform_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_replace_fixate_caps); base_transform_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_replace_fixate_caps);
base_transform_class->accept_caps = GST_DEBUG_FUNCPTR (gst_replace_accept_caps);
base_transform_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps);
base_transform_class->query = GST_DEBUG_FUNCPTR (gst_replace_query);
base_transform_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_replace_decide_allocation);
base_transform_class->filter_meta = GST_DEBUG_FUNCPTR (gst_replace_filter_meta);
base_transform_class->propose_allocation = GST_DEBUG_FUNCPTR (gst_replace_propose_allocation);
base_transform_class->transform_size = GST_DEBUG_FUNCPTR (gst_replace_transform_size); base_transform_class->transform_size = GST_DEBUG_FUNCPTR (gst_replace_transform_size);
base_transform_class->get_unit_size = GST_DEBUG_FUNCPTR (gst_replace_get_unit_size); base_transform_class->get_unit_size = GST_DEBUG_FUNCPTR (gst_replace_get_unit_size);
base_transform_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps);
base_transform_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); base_transform_class->start = GST_DEBUG_FUNCPTR (gst_replace_start);
base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop);
base_transform_class->event = GST_DEBUG_FUNCPTR (gst_replace_event); base_transform_class->sink_event = GST_DEBUG_FUNCPTR (gst_replace_sink_event);
base_transform_class->src_event = GST_DEBUG_FUNCPTR (gst_replace_src_event);
base_transform_class->prepare_output_buffer = GST_DEBUG_FUNCPTR (gst_replace_prepare_output_buffer);
base_transform_class->copy_metadata = GST_DEBUG_FUNCPTR (gst_replace_copy_metadata);
base_transform_class->transform_meta = GST_DEBUG_FUNCPTR (gst_replace_transform_meta);
base_transform_class->before_transform = GST_DEBUG_FUNCPTR (gst_replace_before_transform);
base_transform_class->transform = GST_DEBUG_FUNCPTR (gst_replace_transform); base_transform_class->transform = GST_DEBUG_FUNCPTR (gst_replace_transform);
base_transform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_ip); base_transform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_ip);
base_transform_class->prepare_output_buffer = GST_DEBUG_FUNCPTR (gst_replace_prepare_output_buffer);
base_transform_class->src_event = GST_DEBUG_FUNCPTR (gst_replace_src_event);
base_transform_class->before_transform = GST_DEBUG_FUNCPTR (gst_replace_before_transform);
% methods % methods
static GstCaps * static GstCaps *
gst_replace_transform_caps (GstBaseTransform * trans, gst_replace_transform_caps (GstBaseTransform *trans,
GstPadDirection direction, GstCaps * caps) GstPadDirection direction, GstCaps *caps, GstCaps *filter)
{ {
return NULL; return NULL;
} }
static void static GstCaps *
gst_replace_fixate_caps (GstBaseTransform * trans, gst_replace_fixate_caps (GstBaseTransform * trans,
GstPadDirection direction, GstCaps * caps, GstCaps * othercaps) GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
{ {
return NULL;
}
static gboolean
gst_replace_accept_caps (GstBaseTransform *trans,
GstPadDirection direction, GstCaps *caps)
{
return TRUE;
}
static gboolean
gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps,
GstCaps * outcaps)
{
return FALSE;
}
static gboolean
gst_replace_query (GstBaseTransform *trans, GstPadDirection direction,
GstQuery *query)
{
return TRUE;
}
static gboolean
gst_replace_decide_allocation (GstBaseTransform *trans, GstQuery *query)
{
return TRUE;
}
static gboolean
gst_replace_filter_meta (GstBaseTransform *trans, GstQuery *query,
GType api, const GstStructure *params)
{
return TRUE;
}
static gboolean
gst_replace_propose_allocation (GstBaseTransform *trans,
GstQuery *decide_query, GstQuery *query)
{
return TRUE;
} }
static gboolean static gboolean
gst_replace_transform_size (GstBaseTransform * trans, gst_replace_transform_size (GstBaseTransform * trans,
GstPadDirection direction, GstPadDirection direction,
GstCaps * caps, guint size, GstCaps * othercaps, guint * othersize) GstCaps * caps, gsize size, GstCaps * othercaps, gsize * othersize)
{ {
return FALSE; return FALSE;
@ -86,15 +151,7 @@ gst_replace_transform_size (GstBaseTransform * trans,
static gboolean static gboolean
gst_replace_get_unit_size (GstBaseTransform * trans, GstCaps * caps, gst_replace_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
guint * size) gsize * size)
{
return FALSE;
}
static gboolean
gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps,
GstCaps * outcaps)
{ {
return FALSE; return FALSE;
@ -115,12 +172,49 @@ gst_replace_stop (GstBaseTransform * trans)
} }
static gboolean static gboolean
gst_replace_event (GstBaseTransform * trans, GstEvent * event) gst_replace_sink_event (GstBaseTransform * trans, GstEvent * event)
{ {
return FALSE; return FALSE;
} }
static gboolean
gst_replace_src_event (GstBaseTransform * trans, GstEvent * event)
{
return FALSE;
}
static GstFlowReturn
gst_replace_prepare_output_buffer (GstBaseTransform * trans,
GstBuffer * input, GstBuffer ** buf)
{
return GST_FLOW_ERROR;
}
static gboolean
gst_replace_copy_metadata (GstBaseTransform *trans,
GstBuffer *input, GstBuffer *outbuf)
{
return TRUE;
}
static gboolean
gst_replace_transform_meta (GstBaseTransform *trans,
GstBuffer *outbuf, GstMeta *meta, GstBuffer *inbuf)
{
return TRUE;
}
static void
gst_replace_before_transform (GstBaseTransform * trans, GstBuffer * buffer)
{
}
static GstFlowReturn static GstFlowReturn
gst_replace_transform (GstBaseTransform * trans, GstBuffer * inbuf, gst_replace_transform (GstBaseTransform * trans, GstBuffer * inbuf,
GstBuffer * outbuf) GstBuffer * outbuf)
@ -136,24 +230,4 @@ gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }
static GstFlowReturn
gst_replace_prepare_output_buffer (GstBaseTransform * trans,
GstBuffer * input, gint size, GstCaps * caps, GstBuffer ** buf)
{
return GST_FLOW_ERROR;
}
static gboolean
gst_replace_src_event (GstBaseTransform * trans, GstEvent * event)
{
return FALSE;
}
static void
gst_replace_before_transform (GstBaseTransform * trans, GstBuffer * buffer)
{
}
% end % end

View file

@ -55,7 +55,7 @@ gst_replace_dispose (GObject * object)
/* clean up as possible. may be called multiple times */ /* clean up as possible. may be called multiple times */
G_OBJECT_CLASS (parent_class)->dispose (object); G_OBJECT_CLASS (gst_replace_parent_class)->dispose (object);
} }
void void
@ -65,7 +65,7 @@ gst_replace_finalize (GObject * object)
/* clean up object here */ /* clean up object here */
G_OBJECT_CLASS (parent_class)->finalize (object); G_OBJECT_CLASS (gst_replace_parent_class)->finalize (object);
} }
% end % end

View file

@ -12,7 +12,7 @@ GST_STATIC_PAD_TEMPLATE ("sink",
); );
% base-init % base-init
gst_element_class_add_pad_template (element_class, gst_element_class_add_pad_template (GST_ELEMENT_CLASS(klass),
gst_static_pad_template_get (&gst_replace_sink_template)); gst_static_pad_template_get (&gst_replace_sink_template));
% instance-init % instance-init

View file

@ -12,7 +12,7 @@ GST_STATIC_PAD_TEMPLATE ("src",
); );
% base-init % base-init
gst_element_class_add_pad_template (element_class, gst_element_class_add_pad_template (GST_ELEMENT_CLASS(klass),
gst_static_pad_template_get (&gst_replace_src_template)); gst_static_pad_template_get (&gst_replace_src_template));
% instance-init % instance-init

View file

@ -168,30 +168,9 @@ cat <<EOF
/* class initialization */ /* class initialization */
#define DEBUG_INIT(bla) \\ G_DEFINE_TYPE_WITH_CODE (GstReplace, gst_replace, GST_TYPE_BASE_REPLACE,
GST_DEBUG_CATEGORY_INIT (gst_replace_debug_category, "replace", 0, \\ GST_DEBUG_CATEGORY_INIT (gst_replace_debug_category, "replace", 0,
"debug category for replace element"); "debug category for replace element"));
GST_BOILERPLATE_FULL (GstReplace, gst_replace, GstBaseReplace,
GST_TYPE_BASE_REPLACE, DEBUG_INIT);
static void
gst_replace_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
EOF
for each in $pads
do
grep -A 10000 '^% base-init' $templatedir/$each | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
done
cat <<EOF
gst_element_class_set_static_metadata (element_class, "FIXME Long name",
"Generic", "FIXME Description", "$REAL_NAME <$EMAIL_ADDRESS>");
}
static void static void
gst_replace_class_init (GstReplaceClass * klass) gst_replace_class_init (GstReplaceClass * klass)
@ -200,7 +179,22 @@ EOF
grep -A 10000 '^% declare-class' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 grep -A 10000 '^% declare-class' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
grep -A 10000 '^% declare-class' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 grep -A 10000 '^% declare-class' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
echo cat <<EOF
/* Setting up pads and setting metadata should be moved to
base_class_init if you intend to subclass this class. */
EOF
for each in $pads
do
grep -A 10000 '^% base-init' $templatedir/$each | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
done
cat <<EOF
gst_element_class_set_static_metadata (GST_ELEMENT_CLASS(klass),
"FIXME Long name", "Generic", "FIXME Description",
"$REAL_NAME <$EMAIL_ADDRESS>");
EOF
grep -A 10000 '^% set-methods' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 grep -A 10000 '^% set-methods' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
grep -A 10000 '^% set-methods' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 grep -A 10000 '^% set-methods' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
@ -210,7 +204,7 @@ cat <<EOF
} }
static void static void
gst_replace_init (GstReplace * replace, GstReplaceClass * replace_class) gst_replace_init (GstReplace *replace)
{ {
EOF EOF
@ -377,12 +371,12 @@ gst-indent $gstreplace.c
echo pkg is $pkg echo pkg is $pkg
gcc -Wall -fPIC $CPPFLAGS $(pkg-config --cflags gstreamer-0.10 $pkg) -c -o $gstreplace.o $gstreplace.c gcc -Wall -fPIC $CPPFLAGS $(pkg-config --cflags gstreamer-1.0 $pkg) -c -o $gstreplace.o $gstreplace.c
if test $? -ne 0; then if test $? -ne 0; then
exit 1 exit 1
fi fi
gcc -shared -o $gstreplace.so $gstreplace.o $(pkg-config --libs gstreamer-0.10 $pkg) gcc -shared -o $gstreplace.so $gstreplace.o $(pkg-config --libs gstreamer-1.0 $pkg)
if test $? -ne 0; then if test $? -ne 0; then
exit 1 exit 1
fi fi