From 7a7a6d1ca98d0e0fef777d7a6b43720b13ab46e9 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Sat, 4 Oct 2003 13:18:56 +0000 Subject: [PATCH] create an Element constructor Original commit message from CVS: create an Element constructor --- gst/Makefile.am | 5 +++-- gst/gstreamer-extra.defs | 14 ++++++++++++++ gst/gstreamer.override | 25 +++++++++++++++++++++++++ gstreamer/Makefile.am | 5 +++-- gstreamer/gstreamer-extra.defs | 14 ++++++++++++++ gstreamer/gstreamer.override | 25 +++++++++++++++++++++++++ 6 files changed, 84 insertions(+), 4 deletions(-) diff --git a/gst/Makefile.am b/gst/Makefile.am index 0bf7bb30c2..09bdfc3e48 100644 --- a/gst/Makefile.am +++ b/gst/Makefile.am @@ -7,6 +7,7 @@ pygstreamer_PYTHON = __init__.py pygstreamerexecdir = $(pyexecdir)/gstreamer # gstreamer binding +OVERRIDES = gstreamer.override pyexec_LTLIBRARIES = _gstreamermodule.la _gstreamermodule_la_SOURCES = gstreamermodule.c gstreamer-fixes.c gstreamer-fixes.h @@ -15,8 +16,8 @@ _gstreamermodule_la_LIBADD = $(GST_LIBS) _gstreamermodule_la_LDFLAGS = -module -avoid-version -export-symbols-regex initgstreamer nodist__gstreamermodule_la_SOURCES = gstreamer.c CLEANFILES = gstreamer.c gstreamer-base.defs gstreamer.defs -EXTRA_DIST = gstreamer-extra.defs gstreamer.override gstreamer-arg-types.py -gstreamer.c: gstreamer.defs gstreamer.override +EXTRA_DIST = gstreamer-extra.defs $(OVERRIDES) gstreamer-arg-types.py +gstreamer.c: gstreamer.defs $(OVERRIDES) GST_EXCLUDE_INCLUDES=\ $(GST_INCLUDEDIR)/gst/gstatomic_impl.h \ diff --git a/gst/gstreamer-extra.defs b/gst/gstreamer-extra.defs index 917c4d3cd3..acb57cb963 100644 --- a/gst/gstreamer-extra.defs +++ b/gst/gstreamer-extra.defs @@ -104,3 +104,17 @@ '("char*" "data") ) ) + +;; +;; Element constructor override; uses a nonexistant make_element +;; which is defined in gstreamer.overrides +;; +(define-function gst_element_factory_make_element + (is-constructor-of "GstElement") + (c-name "gst_element_factory_make_element") + (return-type "GstElement*") + (parameters + '("const-gchar*" "elementname") + '("const-gchar*" "name") + ) +) diff --git a/gst/gstreamer.override b/gst/gstreamer.override index cc23d316dd..b8bb6fda8a 100644 --- a/gst/gstreamer.override +++ b/gst/gstreamer.override @@ -437,6 +437,8 @@ _wrap_gst_props_entry_get_float_range(PyObject *self) %% override gst_props_entry_get_list + + static PyObject * _wrap_gst_props_entry_get_list(PyObject *self) { @@ -491,3 +493,26 @@ _wrap_gst_props_get_list(PyObject *self) } return Py_BuildValue("(bO)", ret, tuple); } + + +%% +override gst_element_factory_make_element + +/* we create this function to serve as a constructor for Element */ +static int +_wrap_gst_element_factory_make_element(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "factoryname", "name", NULL }; + char *factoryname, *name; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ss:GstElement.__init__", kwlist, &factoryname, &name)) + return -1; + self->obj = (GObject *)gst_element_factory_make(factoryname, name); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstElement object"); + return -1; + } + pygobject_register_wrapper((PyObject *)self); + return 0; +} diff --git a/gstreamer/Makefile.am b/gstreamer/Makefile.am index 0bf7bb30c2..09bdfc3e48 100644 --- a/gstreamer/Makefile.am +++ b/gstreamer/Makefile.am @@ -7,6 +7,7 @@ pygstreamer_PYTHON = __init__.py pygstreamerexecdir = $(pyexecdir)/gstreamer # gstreamer binding +OVERRIDES = gstreamer.override pyexec_LTLIBRARIES = _gstreamermodule.la _gstreamermodule_la_SOURCES = gstreamermodule.c gstreamer-fixes.c gstreamer-fixes.h @@ -15,8 +16,8 @@ _gstreamermodule_la_LIBADD = $(GST_LIBS) _gstreamermodule_la_LDFLAGS = -module -avoid-version -export-symbols-regex initgstreamer nodist__gstreamermodule_la_SOURCES = gstreamer.c CLEANFILES = gstreamer.c gstreamer-base.defs gstreamer.defs -EXTRA_DIST = gstreamer-extra.defs gstreamer.override gstreamer-arg-types.py -gstreamer.c: gstreamer.defs gstreamer.override +EXTRA_DIST = gstreamer-extra.defs $(OVERRIDES) gstreamer-arg-types.py +gstreamer.c: gstreamer.defs $(OVERRIDES) GST_EXCLUDE_INCLUDES=\ $(GST_INCLUDEDIR)/gst/gstatomic_impl.h \ diff --git a/gstreamer/gstreamer-extra.defs b/gstreamer/gstreamer-extra.defs index 917c4d3cd3..acb57cb963 100644 --- a/gstreamer/gstreamer-extra.defs +++ b/gstreamer/gstreamer-extra.defs @@ -104,3 +104,17 @@ '("char*" "data") ) ) + +;; +;; Element constructor override; uses a nonexistant make_element +;; which is defined in gstreamer.overrides +;; +(define-function gst_element_factory_make_element + (is-constructor-of "GstElement") + (c-name "gst_element_factory_make_element") + (return-type "GstElement*") + (parameters + '("const-gchar*" "elementname") + '("const-gchar*" "name") + ) +) diff --git a/gstreamer/gstreamer.override b/gstreamer/gstreamer.override index cc23d316dd..b8bb6fda8a 100644 --- a/gstreamer/gstreamer.override +++ b/gstreamer/gstreamer.override @@ -437,6 +437,8 @@ _wrap_gst_props_entry_get_float_range(PyObject *self) %% override gst_props_entry_get_list + + static PyObject * _wrap_gst_props_entry_get_list(PyObject *self) { @@ -491,3 +493,26 @@ _wrap_gst_props_get_list(PyObject *self) } return Py_BuildValue("(bO)", ret, tuple); } + + +%% +override gst_element_factory_make_element + +/* we create this function to serve as a constructor for Element */ +static int +_wrap_gst_element_factory_make_element(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "factoryname", "name", NULL }; + char *factoryname, *name; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ss:GstElement.__init__", kwlist, &factoryname, &name)) + return -1; + self->obj = (GObject *)gst_element_factory_make(factoryname, name); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstElement object"); + return -1; + } + pygobject_register_wrapper((PyObject *)self); + return 0; +}