examples: Port the sink example to GstBaseSink
authorThibault Saunier <tsaunier@gnome.org>
Tue, 27 Oct 2015 21:19:19 +0000 (22:19 +0100)
committerThibault Saunier <tsaunier@gnome.org>
Wed, 28 Oct 2015 14:27:42 +0000 (15:27 +0100)
Also we now need to explicitly call Gst.init() from python bindings.

examples/plugins/python/sinkelement.py

index 639d9b8..2ec3608 100644 (file)
 # in 20 lines in python and place into the gstreamer registry
 # so it can be autoplugged or used from parse_launch.
 #
-# Run this script with GST_DEBUG=python:5 to see the debug
-# messages
+# You can run the example from the source doing from gst-python/:
+#
+#  $ export GST_PLUGIN_PATH=$GST_PLUGIN_PATH:$PWD/plugin:$PWD/examples/plugins
+#  $ GST_DEBUG=python:4 gst-launch-1.0 fakesrc num-buffers=10 ! mysink
 
-from gi.repository import Gst, GObject
+from gi.repository import Gst, GObject, GstBase
+Gst.init(None)
 
 #
 # Simple Sink element created entirely in python
 #
-class MySink(Gst.Element):
+class MySink(GstBase.BaseSink):
     __gstmetadata__ = ('CustomSink','Sink', \
                       'Custom test sink element', 'Edward Hervey')
 
-    __gsttemplates__ = Gst.PadTemplate.new ("sinkpadtemplate",
-                                            Gst.PadDirection.SINK,
-                                            Gst.PadPresence.ALWAYS,
-                                            Gst.Caps.new_any())
-
-    def __init__(self):
-        Gst.Element.__init__(self)
-        Gst.info('creating sinkpad')
-        self.sinkpad = Gst.Pad.new_from_template(self.__gsttemplates__, "sink")
-        Gst.info('adding sinkpad to self')
-        self.add_pad(self.sinkpad)
+    __gsttemplates__ = Gst.PadTemplate.new("sink",
+                                           Gst.PadDirection.SINK,
+                                           Gst.PadPresence.ALWAYS,
+                                           Gst.Caps.new_any())
 
-        Gst.info('setting chain/event functions')
-        self.sinkpad.set_chain_function(self.chainfunc)
-        self.sinkpad.set_event_function(self.eventfunc)
-        st = Gst.Structure.from_string("yes,fps=1/2")[0]
-
-    def chainfunc(self, pad, buffer):
-        Gst.info("%s timestamp(buffer):%d" % (pad, buffer.pts))
+    def do_render(self, buffer):
+        Gst.info("timestamp(buffer):%s" % (Gst.TIME_ARGS(buffer.pts)))
         return Gst.FlowReturn.OK
 
-    def eventfunc(self, pad, event):
-        Gst.info("%s event:%r" % (pad, event.type))
-        return True
-
 GObject.type_register(MySink)
 __gstelementfactory__ = ("mysink", Gst.Rank.NONE, MySink)