mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
gstmodule: Factor out gst type creation
This reduces a lot the boiler plate all over. At the same time, use N instead of O when passing PyObject to fix the objects leaks.
This commit is contained in:
parent
7279ae40b6
commit
c6dee2c26b
1 changed files with 20 additions and 59 deletions
|
@ -66,13 +66,9 @@ GST_DEBUG_CATEGORY_STATIC (pygst_debug);
|
||||||
#define GST_CAT_DEFAULT pygst_debug
|
#define GST_CAT_DEFAULT pygst_debug
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
gi_gst_fraction_from_value (const GValue * value)
|
gi_gst_get_type (const gchar * type_name)
|
||||||
{
|
{
|
||||||
PyObject *module, *dict, *fraction_type, *args, *fraction;
|
PyObject *module, *dict;
|
||||||
gint numerator, denominator;
|
|
||||||
|
|
||||||
numerator = gst_value_get_fraction_numerator (value);
|
|
||||||
denominator = gst_value_get_fraction_denominator (value);
|
|
||||||
|
|
||||||
module = PyImport_ImportModule ("gi.repository.Gst");
|
module = PyImport_ImportModule ("gi.repository.Gst");
|
||||||
|
|
||||||
|
@ -94,13 +90,23 @@ gi_gst_fraction_from_value (const GValue * value)
|
||||||
}
|
}
|
||||||
|
|
||||||
dict = PyModule_GetDict (module);
|
dict = PyModule_GetDict (module);
|
||||||
fraction_type = PyMapping_GetItemString (dict, "Fraction");
|
return PyMapping_GetItemString (dict, type_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
gi_gst_fraction_from_value (const GValue * value)
|
||||||
|
{
|
||||||
|
PyObject *fraction_type, *args, *fraction;
|
||||||
|
gint numerator, denominator;
|
||||||
|
|
||||||
|
numerator = gst_value_get_fraction_numerator (value);
|
||||||
|
denominator = gst_value_get_fraction_denominator (value);
|
||||||
|
|
||||||
|
fraction_type = gi_gst_get_type ("Fraction");
|
||||||
|
|
||||||
args = Py_BuildValue ("(ii)", numerator, denominator);
|
args = Py_BuildValue ("(ii)", numerator, denominator);
|
||||||
fraction = PyObject_Call (fraction_type, args, NULL);
|
fraction = PyObject_Call (fraction_type, args, NULL);
|
||||||
Py_DECREF (args);
|
Py_DECREF (args);
|
||||||
Py_DECREF (fraction_type);
|
|
||||||
Py_DECREF (module);
|
|
||||||
|
|
||||||
return fraction;
|
return fraction;
|
||||||
}
|
}
|
||||||
|
@ -220,38 +226,16 @@ fail:
|
||||||
static PyObject *
|
static PyObject *
|
||||||
gi_gst_double_range_from_value (const GValue * value)
|
gi_gst_double_range_from_value (const GValue * value)
|
||||||
{
|
{
|
||||||
PyObject *module, *dict, *double_range_type, *double_range;
|
PyObject *double_range_type, *double_range;
|
||||||
gdouble min, max;
|
gdouble min, max;
|
||||||
|
|
||||||
min = gst_value_get_double_range_min (value);
|
min = gst_value_get_double_range_min (value);
|
||||||
max = gst_value_get_double_range_max (value);
|
max = gst_value_get_double_range_max (value);
|
||||||
|
|
||||||
module = PyImport_ImportModule ("gi.repository.Gst");
|
double_range_type = gi_gst_get_type ("DoubleRange");
|
||||||
|
|
||||||
if (module == NULL) {
|
|
||||||
PyErr_SetString (PyExc_KeyError,
|
|
||||||
"Could not get module for gi.repository.Gst");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
dict = PyModule_GetDict (module);
|
|
||||||
Py_DECREF (module);
|
|
||||||
|
|
||||||
/* For some reson we need this intermediary step */
|
|
||||||
module = PyMapping_GetItemString (dict, "_overrides_module");
|
|
||||||
if (module == NULL) {
|
|
||||||
PyErr_SetString (PyExc_KeyError,
|
|
||||||
"Could not get module for _overrides_module");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
dict = PyModule_GetDict (module);
|
|
||||||
double_range_type = PyMapping_GetItemString (dict, "DoubleRange");
|
|
||||||
|
|
||||||
double_range = PyObject_CallFunction (double_range_type, "dd", min, max);
|
double_range = PyObject_CallFunction (double_range_type, "dd", min, max);
|
||||||
|
|
||||||
Py_DECREF (double_range_type);
|
Py_DECREF (double_range_type);
|
||||||
Py_DECREF (module);
|
|
||||||
|
|
||||||
return double_range;
|
return double_range;
|
||||||
}
|
}
|
||||||
|
@ -283,7 +267,7 @@ fail:
|
||||||
static PyObject *
|
static PyObject *
|
||||||
gi_gst_fraction_range_from_value (const GValue * value)
|
gi_gst_fraction_range_from_value (const GValue * value)
|
||||||
{
|
{
|
||||||
PyObject *module, *min, *max, *dict, *fraction_range_type, *fraction_range;
|
PyObject *min, *max, *fraction_range_type, *fraction_range;
|
||||||
const GValue *fraction;
|
const GValue *fraction;
|
||||||
|
|
||||||
fraction = gst_value_get_fraction_range_min (value);
|
fraction = gst_value_get_fraction_range_min (value);
|
||||||
|
@ -292,33 +276,10 @@ gi_gst_fraction_range_from_value (const GValue * value)
|
||||||
fraction = gst_value_get_fraction_range_max (value);
|
fraction = gst_value_get_fraction_range_max (value);
|
||||||
max = gi_gst_fraction_from_value (fraction);
|
max = gi_gst_fraction_from_value (fraction);
|
||||||
|
|
||||||
|
fraction_range_type = gi_gst_get_type ("FractionRange");
|
||||||
module = PyImport_ImportModule ("gi.repository.Gst");
|
fraction_range = PyObject_CallFunction (fraction_range_type, "NN", min, max);
|
||||||
|
|
||||||
if (module == NULL) {
|
|
||||||
PyErr_SetString (PyExc_KeyError,
|
|
||||||
"Could not get module for gi.repository.Gst");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
dict = PyModule_GetDict (module);
|
|
||||||
Py_DECREF (module);
|
|
||||||
|
|
||||||
/* For some reson we need this intermediary step */
|
|
||||||
module = PyMapping_GetItemString (dict, "_overrides_module");
|
|
||||||
if (module == NULL) {
|
|
||||||
PyErr_SetString (PyExc_KeyError,
|
|
||||||
"Could not get module for _overrides_module");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
dict = PyModule_GetDict (module);
|
|
||||||
fraction_range_type = PyMapping_GetItemString (dict, "FractionRange");
|
|
||||||
|
|
||||||
fraction_range = PyObject_CallFunction (fraction_range_type, "OO", min, max);
|
|
||||||
|
|
||||||
Py_DECREF (fraction_range_type);
|
Py_DECREF (fraction_range_type);
|
||||||
Py_DECREF (module);
|
|
||||||
|
|
||||||
return fraction_range;
|
return fraction_range;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue