mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 03:31:05 +00:00
array/list: Make gvalue conversion symmetric
This is needed to support matrix. Otherwise, getting a matrix would remove the rows envelopess, which would make the "cast" fails, since it would not know if the internal rows are ValueArray or ValueList. I think reading, modifying and setting back the matrix is an important use case.
This commit is contained in:
parent
c6dee2c26b
commit
d44975a1fe
3 changed files with 34 additions and 4 deletions
|
@ -323,7 +323,7 @@ fail:
|
|||
static PyObject *
|
||||
gi_gst_array_from_value (const GValue * value)
|
||||
{
|
||||
PyObject *list;
|
||||
PyObject *list, *array_type, *array;
|
||||
gint i;
|
||||
|
||||
list = PyList_New (gst_value_array_get_size (value));
|
||||
|
@ -333,7 +333,12 @@ gi_gst_array_from_value (const GValue * value)
|
|||
PyList_SET_ITEM (list, i, pyg_value_as_pyobject (v, TRUE));
|
||||
}
|
||||
|
||||
return list;
|
||||
array_type = gi_gst_get_type ("ValueArray");
|
||||
array = PyObject_CallFunction (array_type, "N", list);
|
||||
|
||||
Py_DECREF (array_type);
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -382,7 +387,7 @@ fail:
|
|||
static PyObject *
|
||||
gi_gst_list_from_value (const GValue * value)
|
||||
{
|
||||
PyObject *list;
|
||||
PyObject *list, *value_list_type, *value_list;
|
||||
gint i;
|
||||
|
||||
list = PyList_New (gst_value_list_get_size (value));
|
||||
|
@ -392,7 +397,12 @@ gi_gst_list_from_value (const GValue * value)
|
|||
PyList_SET_ITEM (list, i, pyg_value_as_pyobject (v, TRUE));
|
||||
}
|
||||
|
||||
return list;
|
||||
value_list_type = gi_gst_get_type ("ValueList");
|
||||
value_list = PyObject_CallFunction (value_list_type, "N", list);
|
||||
|
||||
Py_DECREF (value_list_type);
|
||||
|
||||
return value_list;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -82,6 +82,18 @@ class TestFraction(TestCase):
|
|||
st = Gst.Structure.new_empty("video/x-raw")
|
||||
st["array"] = A([Gst.Fraction(1, 30), Gst.Fraction(1, 2)])
|
||||
value = st["array"]
|
||||
st["array"] = A(value)
|
||||
|
||||
self.failUnlessEqual(value[0], Gst.Fraction(1, 30))
|
||||
self.failUnlessEqual(value[1], Gst.Fraction(1, 2))
|
||||
|
||||
st["matrix"] = A([A([0, 1]), A([-1, 0])])
|
||||
value = st["matrix"]
|
||||
|
||||
self.failUnlessEqual(value[0][0], 0)
|
||||
self.failUnlessEqual(value[0][1], 1)
|
||||
self.failUnlessEqual(value[1][0], -1)
|
||||
self.failUnlessEqual(value[1][1], 0)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -54,3 +54,11 @@ class TestFraction(TestCase):
|
|||
|
||||
self.failUnlessEqual(value[0], Gst.Fraction(1, 30))
|
||||
self.failUnlessEqual(value[1], Gst.Fraction(1, 2))
|
||||
|
||||
st["matrix"] = L([L([0, 1]), L([-1 ,0])])
|
||||
value = st["matrix"]
|
||||
|
||||
self.failUnlessEqual(value[0][0], 0)
|
||||
self.failUnlessEqual(value[0][1], 1)
|
||||
self.failUnlessEqual(value[1][0], -1)
|
||||
self.failUnlessEqual(value[1][1], 0)
|
||||
|
|
Loading…
Reference in a new issue