From bf88eeddbbeb1a15fcc84c7ec94c7511ffdebc86 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Fri, 4 Nov 2005 13:14:59 +0000 Subject: [PATCH] gst/gstpad.override: Use proper GValue <-> MiniObject conversion function Original commit message from CVS: * gst/gstpad.override: Use proper GValue <-> MiniObject conversion function * examples/Makefile.am: * examples/sinkelement.py: New example showing how to create a sink element in python. --- ChangeLog | 8 ++++++ examples/Makefile.am | 3 +- examples/sinkelement.py | 63 +++++++++++++++++++++++++++++++++++++++++ gst/gstpad.override | 2 +- 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 examples/sinkelement.py diff --git a/ChangeLog b/ChangeLog index fb662396da..6f4ec15296 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-11-04 Edward Hervey + + * gst/gstpad.override: + Use proper GValue <-> MiniObject conversion function + * examples/Makefile.am: + * examples/sinkelement.py: + New example showing how to create a sink element in python. + 2005-11-04 Edward Hervey * examples/play.py: diff --git a/examples/Makefile.am b/examples/Makefile.am index 454c578b8e..f7d0ca8445 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -13,6 +13,7 @@ examples_DATA = \ audioconcat.py \ pipeline-tester \ vumeter.py \ - fvumeter.py + fvumeter.py \ + sinkelement.py EXTRA_DIST = $(examples_DATA) diff --git a/examples/sinkelement.py b/examples/sinkelement.py new file mode 100644 index 0000000000..acfa8d0b9c --- /dev/null +++ b/examples/sinkelement.py @@ -0,0 +1,63 @@ +# sinkelement.py +# (c) 2005 Edward Hervey +# Licensed under LGPL +# +# Small test application to show how to write a sink element +# in 20 lines in python +# +# Run this script with GST_DEBUG=python:5 to see the debug +# messages + +import pygst +pygst.require('0.9') +import gst +import gobject + +# +# Simple Sink element created entirely in python +# + +class MySink(gst.Element): + + _sinkpadtemplate = gst.PadTemplate ("sinkpadtemplate", + gst.PAD_SINK, + gst.PAD_ALWAYS, + gst.caps_new_any()) + + def __init__(self): + gst.Element.__init__(self) + gst.info('creating sinkpad') + self.sinkpad = gst.Pad(self._sinkpadtemplate, "sink") + gst.info('adding sinkpad to self') + self.add_pad(self.sinkpad) + + gst.info('setting chain/event functions') + self.sinkpad.set_chain_function(self.chainfunc) + self.sinkpad.set_event_function(self.eventfunc) + + def chainfunc(self, pad, buffer): + self.info("%s timestamp(buffer):%d" % (pad, buffer.timestamp)) + return gst.FLOW_OK + + def eventfunc(self, pad, event): + self.info("%s event:%r" % (pad, event.type)) + return True + +gobject.type_register(MySink) + +# +# Code to test the MySink class +# + +src = gst.element_factory_make('fakesrc') +gst.info('About to create MySink') +sink = MySink() + +pipeline = gst.Pipeline() +pipeline.add(src, sink) + +src.link(sink) + +pipeline.set_state(gst.STATE_PLAYING) + +gobject.MainLoop().run() diff --git a/gst/gstpad.override b/gst/gstpad.override index ff89a08330..6de6220d65 100644 --- a/gst/gstpad.override +++ b/gst/gstpad.override @@ -322,7 +322,7 @@ call_event_function (GstPad *pad, GstEvent *event) g_value_init (&args[0], GST_TYPE_PAD); g_value_init (&args[1], GST_TYPE_EVENT); g_value_set_object (&args[0], pad); - g_value_set_boxed (&args[1], event); + gst_value_set_mini_object (&args[1], GST_MINI_OBJECT (event)); closure = pad_private(pad)->event_function; g_closure_invoke (closure, &ret, 2, args, NULL);