mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-31 03:29:50 +00:00
a4566ffbc8
This patch adds overrides to support IntRange, Int64Range, DoubleRange, FractionRange, Array and List. For integer ranges, it maps this to python 'range'. Gst.IntRange() and Gst.Int64Range() are simple cast to let the underlying code know which GType to use. To set such range in python you will do: structure["range"] = Gst.IntRange(range(0,10,2))) Same for the 64 bit variant. And when you do: r = structure.get_value("range") A range will be returned directly, without the wrapper. For DoubleRange and FractionRange, there is no native support in python. So the usage will be: structure["range"] = Gst.DoubleRange(0,10.0) structure["range"] = Gst.FractionRange(Gst.Fraction(1/30), Gst.Fraction(1/5) When getting this value, Gst.DoubleRange and Gst.FractionRange class are returned. They both have start/stop members. The naming was taken from range type. For Array and List, both uses the native list type, though they can be constructed from any python sequence. So again, the class is just like a cast, to let it pick the right GType and python list are being returned. structure["list"] = Gst.ValueList([1,2,3,4]) structure["array"] = Gst.ValueArray([1,2,3,4) Using string and tuple could also work. Since Gst.ValueList/Array are sequence, you can convert one to the other with: list = Gst.ValueList([1,2,3,4]) array = Gst.ValueArray (list) https://bugzilla.gnome.org/show_bug.cgi?id=753754
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
# -*- Mode: Python -*-
|
|
# vi:si:et:sw=4:sts=4:ts=4
|
|
#
|
|
# gst-python - Python bindings for GStreamer
|
|
# Copyright (C) 2007 Johan Dahlin
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
import overrides_hack
|
|
overrides_hack
|
|
|
|
from common import TestCase
|
|
|
|
import gi
|
|
gi.require_version("Gst", "1.0")
|
|
from gi.repository import Gst
|
|
Gst.init(None)
|
|
|
|
R = Gst.Int64Range
|
|
|
|
class TestInt64Range(TestCase):
|
|
def testConstructor(self):
|
|
Gst.init(None)
|
|
|
|
r = R(range(0, 10, 2))
|
|
self.assertEquals(r.range, range(0, 10, 2))
|
|
self.assertRaises(TypeError, R, range(1, 10, 2))
|
|
self.assertRaises(TypeError, R, range(0, 9, 2))
|
|
self.assertRaises(TypeError, R, range(10, 0))
|
|
self.assertRaises(TypeError, R, 1)
|
|
self.assertRaises(TypeError, R)
|
|
|
|
def testRepr(self):
|
|
Gst.init(None)
|
|
|
|
self.assertEquals(repr(R(range(0, 10, 2))), '<Gst.Int64Range [0,10,2]>')
|
|
|
|
def testGetValue(self):
|
|
Gst.init(None)
|
|
|
|
st = Gst.Structure.new_empty("video/x-raw")
|
|
st["range"] = R(range(0, 10, 2))
|
|
value = st["range"]
|
|
|
|
self.failUnlessEqual(value, range(0, 10, 2))
|