From 1cece5bde5a1cdefd06ae9fd21bc95e29d99ac85 Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Wed, 9 Jan 2019 11:39:19 +0100 Subject: [PATCH] overrides: add a set_caps() method to the Pad override The C API provides the gst_pad_set_caps() helper which makes it easier to set caps on pads (see gst/gstcompat.h in gstreamer core). Add such handy helper to the python bindings too. The implementation follows as close as possible the one in gstcompat.h with two changes: 1. the type check on the pad has been removed because self is guaranteed to be a Gst.Pad in python. 2. the null check on the caps has been extended to be a type check. Fixes https://gitlab.freedesktop.org/gstreamer/gst-python/issues/19 --- gi/overrides/Gst.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gi/overrides/Gst.py b/gi/overrides/Gst.py index 2e5189bd59..499e82fdbd 100644 --- a/gi/overrides/Gst.py +++ b/gi/overrides/Gst.py @@ -156,6 +156,22 @@ class Pad(Gst.Pad): def query_caps(self, filter=None): return Gst.Pad.query_caps(self, filter) + def set_caps(self, caps): + if not isinstance(caps, Gst.Caps): + raise TypeError("%s is not a Gst.Caps." % (type(caps))) + + if not caps.is_fixed(): + return False + + event = Gst.Event.new_caps(caps) + + if self.direction == Gst.PadDirection.SRC: + res = self.push_event(event) + else: + res = self.send_event(event) + + return res + def link(self, pad): ret = Gst.Pad.link(self, pad) if ret != Gst.PadLinkReturn.OK: