gstreamer/subprojects/gst-python/examples/plugins/python/sinkelement.py
Thibault Saunier fab64c0b3a python: Add a Gst.init_python function to be called from plugins
Plugins know that they will be initialized after Gst was initialized
so they can call the initialization function dedicated for the python
bindings

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2675>
2022-07-08 14:37:14 +00:00

58 lines
1.8 KiB
Python

#!/usr/bin/env python
# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4
# sinkelement.py
# (c) 2005 Edward Hervey <edward@fluendo.com>
# (c) 2007 Jan Schmidt <jan@fluendo.com>
# Licensed under LGPL
#
# Small test application to show how to write a sink element
# in 20 lines in python and place into the gstreamer registry
# so it can be autoplugged or used from parse_launch.
#
# 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
#
# Since this implements the `mypysink://` protocol you can also do:
#
# $ gst-launch-1.0 videotestsrc ! pymysink://
from gi.repository import Gst, GObject, GstBase
Gst.init_python()
#
# Simple Sink element created entirely in python
#
class MySink(GstBase.BaseSink, Gst.URIHandler):
__gstmetadata__ = ('CustomSink','Sink', \
'Custom test sink element', 'Edward Hervey')
__gsttemplates__ = Gst.PadTemplate.new("sink",
Gst.PadDirection.SINK,
Gst.PadPresence.ALWAYS,
Gst.Caps.new_any())
__protocols__ = ("pymysink",)
__uritype__ = Gst.URIType.SINK
def __init__(self):
super().__init__()
# Working around https://gitlab.gnome.org/GNOME/pygobject/-/merge_requests/129
self.__dontkillme = self
def do_render(self, buffer):
Gst.info("timestamp(buffer):%s" % (Gst.TIME_ARGS(buffer.pts)))
return Gst.FlowReturn.OK
def do_get_uri(self, uri):
return "pymysink://"
def do_set_uri(self, uri):
return True
GObject.type_register(MySink)
__gstelementfactory__ = ("mysink", Gst.Rank.NONE, MySink)