summaryrefslogtreecommitdiff
path: root/gi
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu@centricular.com>2019-04-11 00:42:49 +0200
committerMathieu Duponchelle <mduponchelle1@gmail.com>2019-05-03 15:12:02 +0000
commit2e91b713f1098b6bf1438a72dcacd597e21b25c5 (patch)
tree6f9abf32e6c218f2e6c02cca17efe97c088a954d /gi
parent6e51428cbda01b27b13e7e76866ae80daea27a54 (diff)
Gst.py: add high-level helpers
Diffstat (limited to 'gi')
-rw-r--r--gi/overrides/Gst.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/gi/overrides/Gst.py b/gi/overrides/Gst.py
index 075366b..83b087c 100644
--- a/gi/overrides/Gst.py
+++ b/gi/overrides/Gst.py
@@ -26,6 +26,7 @@
import sys
import inspect
+import itertools
from ..overrides import override
from ..module import get_introspection_module
@@ -64,6 +65,18 @@ class Bin(Gst.Bin):
if not Gst.Bin.add(self, arg):
raise AddError(arg)
+ def make_and_add(self, factory_name, instance_name=None):
+ '''
+ @raises: Gst.AddError
+ '''
+ elem = Gst.ElementFactory.make(factory_name, instance_name)
+ if not elem:
+ raise AddError(
+ 'No such element: {}'.format(factory_name))
+ self.add(elem)
+ return elem
+
+
Bin = override(Bin)
__all__.append('Bin')
@@ -571,6 +584,29 @@ class ValueList(Gst.ValueList):
ValueList = override(ValueList)
__all__.append('ValueList')
+# From https://docs.python.org/3/library/itertools.html
+
+
+def pairwise(iterable):
+ a, b = itertools.tee(iterable)
+ next(b, None)
+ return zip(a, b)
+
+
+class Element(Gst.Element):
+ @staticmethod
+ def link_many(*args):
+ '''
+ @raises: Gst.LinkError
+ '''
+ for pair in pairwise(args):
+ if not pair[0].link(pair[1]):
+ raise LinkError(
+ 'Failed to link {} and {}'.format(pair[0], pair[1]))
+
+Element = override(Element)
+__all__.append('Element')
+
def TIME_ARGS(time):
if time == Gst.CLOCK_TIME_NONE: