%header{ #include <gst/gst.h> #include "gst-identity2.h" #include "gst-identity2-private.h" %} class Gst:Identity2 from Gst:Element { /* plugin init */ private gboolean plugin_init (GModule *module, GstPlugin *plugin) { static GstElementDetails identity2_details = { "GOB Identity", "Filter/Effect", "Does nothing", "1.0", "Wim Taymans <wim.taymans@chello.be>", "(C) 2001", }; GstElementFactory *factory; factory = gst_elementfactory_new ("identity2", TYPE_SELF, &identity2_details); g_return_val_if_fail (factory != NULL, FALSE); gst_plugin_add_feature (plugin, &(factory->feature)); return TRUE; } /* pads FIXME gob oculd be improved here */ private GstPad *sinkpad = { gst_pad_new ("sink", GST_PAD_SINK); gst_element_add_pad (GST_ELEMENT (o), o->_priv->sinkpad); gst_pad_set_chain_function (o->_priv->sinkpad, chain); gst_pad_set_bufferpool_function (o->_priv->sinkpad, get_bufferpool); //gst_pad_set_negotiate_function (o->_priv->sinkpad, negotiate_sink); }; private GstPad *srcpad = { gst_pad_new ("src", GST_PAD_SRC); gst_element_add_pad (GST_ELEMENT (o), o->_priv->srcpad); //gst_pad_set_negotiate_function (o->_priv->srcpad, negotiate_src); }; /* arguments */ /* private gboolean loop_based = FALSE; argument BOOL loop_based get { ARG = self->_priv->loop_based; } set { self->_priv->loop_based = ARG; if (self->_priv->loop_based) { gst_element_set_loop_function (GST_ELEMENT (self), loop); gst_pad_set_chain_function (self->_priv->sinkpad, NULL); } else { gst_pad_set_chain_function (self->_priv->sinkpad, chain); gst_element_set_loop_function (GST_ELEMENT (self), NULL); } };*/ private guint sleep_time = 0; argument UINT sleep_time link; private gboolean silent = FALSE; argument BOOL silent link; /* signals */ private signal last NONE(NONE) void handoff(self); /* core code here */ private GstBufferPool* get_bufferpool (GstPad *pad (check null)) { Self *self = SELF (gst_pad_get_parent (pad)); return gst_pad_get_bufferpool (self->_priv->srcpad); } /* private GstPadNegotiateReturn negotiate_src (GstPad *pad, GstCaps **caps, gpointer *data) { Self *self = SELF (gst_pad_get_parent (pad)); return gst_pad_negotiate_proxy (pad, self->_priv->sinkpad, caps); } private GstPadNegotiateReturn negotiate_sink (GstPad *pad, GstCaps **caps, gpointer *data) { Self *self = SELF (gst_pad_get_parent (pad)); return gst_pad_negotiate_proxy (pad, self->_priv->srcpad, caps); } */ private void chain (GstPad *pad (check null), GstBuffer *buf (check null)) { Self *self; self = SELF (gst_pad_get_parent (pad)); if (!self->_priv->silent) g_print("identity2: chain ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad)); handoff (self); gst_pad_push (self->_priv->srcpad, buf); if (self->_priv->sleep_time) usleep (self->_priv->sleep_time); } /*private void loop (GstElement *element (check null)) { Self *self = SELF (element); GstBuffer *buf; do { buf = gst_pad_pull (self->_priv->sinkpad); g_print("identity2: loop ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(self->_priv->sinkpad)); handoff (self); gst_pad_push (self->_priv->srcpad, buf); if (self->_priv->sleep_time) usleep (self->_priv->sleep_time); } while (!GST_ELEMENT_IS_COTHREAD_STOPPING(element)); }*/ } %{ GstPluginDesc plugin_desc = { GST_VERSION_MAJOR, GST_VERSION_MINOR, "identity2", gst_identity2_plugin_init }; %}