summaryrefslogtreecommitdiff
path: root/voctocore/experiments/startuptest/startuptest.py
diff options
context:
space:
mode:
Diffstat (limited to 'voctocore/experiments/startuptest/startuptest.py')
-rwxr-xr-xvoctocore/experiments/startuptest/startuptest.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/voctocore/experiments/startuptest/startuptest.py b/voctocore/experiments/startuptest/startuptest.py
new file mode 100755
index 0000000..6e1802e
--- /dev/null
+++ b/voctocore/experiments/startuptest/startuptest.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python3
+
+# Example for the startup-problem
+#
+# The Pipeline will start but the test-image will be still, as long as no
+# ShmSink at /tmp/grabber-v is present (run ../test-grabber-src.sh in another shell)
+#
+# Even though the ShmSrc is not linked to anything and logically not required for
+# the videotestsrc or the ximagesink, the whole pipeline won't startup when this element
+# fails to start.
+#
+# once the pipeline is running, it does not matter what happens to the ShmSink on the
+# other end, because the TestBin filters all EOS and ERROR Messages coming from the ShmSrc,
+# but somehow this is not enough to make the pipeline start in an error-condition..
+#
+
+import gi
+
+# import GStreamer and GTK-Helper classes
+gi.require_version('Gst', '1.0')
+from gi.repository import GLib, Gst, GObject
+
+# init GObject before importing local classes
+GObject.threads_init()
+Gst.init(None)
+
+from testbin import TestBin
+
+class Example:
+ def __init__(self):
+ self.mainloop = GObject.MainLoop()
+ self.pipeline = Gst.Pipeline()
+
+ self.src = Gst.ElementFactory.make('videotestsrc', None)
+ self.sink = Gst.ElementFactory.make('ximagesink', None)
+
+ self.testbin = TestBin()
+
+ # Add elements to pipeline
+ self.pipeline.add(self.testbin)
+ self.pipeline.add(self.src)
+ self.pipeline.add(self.sink)
+
+ self.src.link(self.sink)
+
+ def run(self):
+ self.pipeline.set_state(Gst.State.PLAYING)
+ self.mainloop.run()
+
+ def kill(self):
+ self.pipeline.set_state(Gst.State.NULL)
+ self.mainloop.quit()
+
+ def on_eos(self, bus, msg):
+ print('on_eos()')
+ #self.kill()
+
+ def on_error(self, bus, msg):
+ print('on_error():', msg.parse_error())
+ #self.kill()
+
+example = Example()
+example.run()