From f86fb60e0914eeb1d3b159dfa45bd0d55d13a8d5 Mon Sep 17 00:00:00 2001 From: Rene Stadler Date: Thu, 5 Jul 2007 13:57:41 +0000 Subject: [PATCH] gst/: Handle 'gchar**' (GStrv) arguments in a uniform way. Original commit message from CVS: Patch by: Rene Stadler * gst/arg-types.py: * gst/gst.defs: * gst/gst.override: Handle 'gchar**' (GStrv) arguments in a uniform way. Fixes #385841 --- ChangeLog | 9 +++++++++ common | 2 +- gst/arg-types.py | 22 +++++++++++++++++++++- gst/gst.defs | 6 +++--- gst/gst.override | 23 ----------------------- 5 files changed, 34 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 249d188..713f843 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-07-05 Edward Hervey + + Patch by: Rene Stadler + * gst/arg-types.py: + * gst/gst.defs: + * gst/gst.override: + Handle 'gchar**' (GStrv) arguments in a uniform way. + Fixes #385841 + 2007-06-27 Edward Hervey * gst/gstbuffer.override: diff --git a/common b/common index e6a9941..5167bce 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit e6a9941c662289c0743e5d8f4150458a664226f2 +Subproject commit 5167bced491ffe62251c62d6c5e7b9a7541e97e5 diff --git a/gst/arg-types.py b/gst/arg-types.py index c2c4533..5c44d68 100644 --- a/gst/arg-types.py +++ b/gst/arg-types.py @@ -316,7 +316,25 @@ class ConstStringReturn(ReturnType): failure_expression="!PyString_Check(py_retval)", failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be a string");') self.wrapper.write_code("retval = g_strdup(PyString_AsString(py_retval));") - + +class StringArrayArg(ArgType): + """Arg type for NULL-terminated string pointer arrays (GStrv, aka gchar**).""" + def write_return(self, ptype, ownsreturn, info): + if ownsreturn: + raise NotImplementedError () + else: + info.varlist.add("gchar", "**ret") + info.codeafter.append(" if (ret) {\n" + " guint size = g_strv_length(ret);\n" + " PyObject *py_ret = PyTuple_New(size);\n" + " gint i;\n" + " for (i = 0; i < size; i++)\n" + " PyTuple_SetItem(py_ret, i,\n" + " PyString_FromString(ret[i]));\n" + " return py_ret;\n" + " }\n" + " return PyTuple_New (0);\n") + matcher.register('GstClockTime', UInt64Arg()) matcher.register('GstClockTimeDiff', Int64Arg()) matcher.register('xmlNodePtr', XmlNodeArg()) @@ -353,4 +371,6 @@ matcher.register_reverse_ret("GType", IntReturn) matcher.register_reverse("gulong", ULongParam) matcher.register_reverse_ret("gulong", ULongReturn) +matcher.register("GStrv", StringArrayArg()) + del arg diff --git a/gst/gst.defs b/gst/gst.defs index ec45fdb..aa739d5 100644 --- a/gst/gst.defs +++ b/gst/gst.defs @@ -1535,7 +1535,7 @@ (define-method get_uri_protocols (of-object "GstElementFactory") (c-name "gst_element_factory_get_uri_protocols") - (return-type "gchar**") + (return-type "GStrv") ) (define-method create @@ -6421,7 +6421,7 @@ (define-method get_extensions (of-object "GstTypeFindFactory") (c-name "gst_type_find_factory_get_extensions") - (return-type "gchar**") + (return-type "GStrv") ) (define-method get_caps @@ -6525,7 +6525,7 @@ (define-method get_protocols (of-object "GstURIHandler") (c-name "gst_uri_handler_get_protocols") - (return-type "gchar**") + (return-type "GStrv") ) (define-method get_uri diff --git a/gst/gst.override b/gst/gst.override index 77699e6..16f8223 100644 --- a/gst/gst.override +++ b/gst/gst.override @@ -706,29 +706,6 @@ _wrap_gst_g_error_tp_str(PyGObject *self) error->code)); } %% -override gst_uri_handler_get_protocols noargs -static PyObject * -_wrap_gst_uri_handler_get_protocols (PyGObject *self) -{ - gchar **tab; - int i, len; - PyObject *ret; - - tab = gst_uri_handler_get_protocols (GST_URI_HANDLER (self->obj)); - if (!tab) { - Py_INCREF (Py_None); - return Py_None; - } - - len = g_strv_length (tab); - ret = PyList_New(len); - for (i = 0; i < len; i++) { - PyList_SetItem(ret, i, PyString_FromString(tab[i])); - } - - return ret; -} -%% override gst_flow_get_name kwargs static PyObject * _wrap_gst_flow_get_name(PyObject *self, PyObject *args, PyObject *kwargs) -- 2.7.4