diff options
author | Alessandro Decina <alessandro.d@gmail.com> | 2010-08-26 14:45:06 +0200 |
---|---|---|
committer | Alessandro Decina <alessandro.d@gmail.com> | 2010-08-26 14:45:06 +0200 |
commit | 01ce2d2060a3e1c6f41374a89c0c5af834287e30 (patch) | |
tree | 7f9db3217754bf7b44f50500c7dd9b00624f3f2c | |
parent | 31a61551b4a7aac88c6b8bed04509ea812a8a950 (diff) | |
parent | 53e5a77f527f40e4a16e1a00d574fb9f4f1c3c9e (diff) |
Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-python
-rw-r--r-- | plugin/gstpythonplugin.c | 60 |
1 files changed, 36 insertions, 24 deletions
diff --git a/plugin/gstpythonplugin.c b/plugin/gstpythonplugin.c index f8b0d0d..0134f19 100644 --- a/plugin/gstpythonplugin.c +++ b/plugin/gstpythonplugin.c @@ -25,6 +25,7 @@ /* include this first, before NO_IMPORT_PYGOBJECT is defined */ #include <pygobject.h> #include <gst/gst.h> +#include <Python.h> PyTypeObject *_PyGstElement_Type; #define PyGstElement_Type (*_PyGstElement_Type) @@ -40,35 +41,46 @@ static PyObject *element; static inline gboolean np_init_pygobject (void) { - PyObject *gobject = PyImport_ImportModule ("gobject"); - gboolean res = TRUE; - - if (gobject != NULL) { - PyObject *mdict = PyModule_GetDict (gobject); - PyObject *cobject = PyDict_GetItemString (mdict, "_PyGObject_API"); - if (PyCObject_Check (cobject)) { - _PyGObject_API = - (struct _PyGObject_Functions *) PyCObject_AsVoidPtr (cobject); - } else { - PyErr_SetString (PyExc_RuntimeError, - "could not find _PyGObject_API object"); - PyErr_Print (); - res = FALSE; - goto beach; - } - if (!(PyObject_CallMethod (gobject, "threads_init", NULL, NULL))) { - PyErr_SetString (PyExc_RuntimeError, "Could not initialize threads"); - PyErr_Print (); - res = FALSE; - goto beach; - } - } else { + gboolean res = FALSE; + PyObject *gobject = NULL; + PyObject *main_module = NULL; + PyObject *mdict = NULL; + + gobject = PyImport_ImportModule ("gobject"); + if (gobject == NULL) { PyErr_Print (); GST_WARNING ("could not import gobject"); - res = FALSE; + goto beach; + } + + main_module = PyImport_AddModule ("__main__"); + mdict = PyModule_GetDict (gobject); + + PyObject *cobject = PyDict_GetItemString (mdict, "_PyGObject_API"); + if (cobject == NULL) { + GST_WARNING ("could not find _PyGObject_API"); + goto beach; } + _PyGObject_API = + (struct _PyGObject_Functions *) PyCObject_AsVoidPtr (cobject); + if (_PyGObject_API == NULL) { + PyErr_Print (); + GST_WARNING ("_PyGObject_API is not a valid CObject"); + goto beach; + } + + if (!(PyObject_CallMethod (gobject, "threads_init", NULL, NULL))) { + PyErr_Print (); + GST_WARNING ("could not initialize threads"); + goto beach; + } + + res = TRUE; + beach: + Py_XDECREF (gobject); + return res; } |