+2004-05-24 Johan Dahlin <johan@gnome.org>
+
+ * testsuite/interface.py (Availability.testXOverlay): Extend to
+ test method calling on interfaces
+
+ * testsuite/common.py: call pygtk.require first
+
+ * gst/gstbin.override (_wrap_gst_bin_get_by_name): Add a
+ keyword argument recurse and remove
+ _wrap_gst_bin_get_by_name_recurse_up.
+
+ * gst/gst.override (_wrap_gst_element_get_pad_list): Split out bin
+ functions to ...
+
+ * gst/gstbin.override: .. this file
+
+ * gst/gst.defs (bin_new): allow NULL for first argument.
+ (child_state_change): Remove, it's private.
+
2004-05-04 Johan Dahlin <johan@gnome.org>
* gst/gst-types.defs (Buffer): Add some fields
(is-constructor-of "GstBin")
(return-type "GstElement*")
(parameters
- '("const-gchar*" "name")
+ '("const-gchar*" "name" (null-ok) (default "NULL"))
)
)
(return-type "GstElementStateReturn")
)
-(define-method child_state_change
- (of-object "GstBin")
- (c-name "gst_bin_child_state_change")
- (return-type "none")
- (parameters
- '("GstElementState" "oldstate")
- '("GstElementState" "newstate")
- '("GstElement*" "child")
- )
-)
-
(define-method set_pre_iterate_function
(of-object "GstBin")
(c-name "gst_bin_set_pre_iterate_function")
/* -*- Mode: C; ; c-file-style: "python" -*- */
-/* gst-python
+so/* gst-python
* Copyright (C) 2002 David I. Lehn
* Copyright (C) 2004 Johan Dahlin
*
%%
include
+ gstbin.override
gstbuffer.override
gstpad-handlers.override
%%
gst_tag_list_copy_value
gst_trace_read_tsc
%%
-override gst_bin_iterate
-static PyObject *
-_wrap_gst_bin_iterate(PyGObject *self)
-{
- int ret;
-
- pyg_unblock_threads();
- ret = gst_bin_iterate(GST_BIN(self->obj));
- pyg_block_threads();
- return PyInt_FromLong(ret);
-}
-%%
-override gst_bin_get_list
-static PyObject *
-_wrap_gst_bin_get_list(PyGObject *self)
-{
- GList *elements, *l;
- PyObject *tuple;
- int i;
-
- elements = (GList*)gst_bin_get_list(GST_BIN(self->obj));
- tuple = PyTuple_New(g_list_length(elements));
- for (i = 0, l = elements; l; l = l->next, i++) {
- GstElement *element = (GstElement*)l->data;
- if (!element)
- continue;
- PyTuple_SetItem(tuple, i, pygobject_new(G_OBJECT(element)));
- }
-
- return tuple;
-}
-%%
override gst_element_get_pad_list noargs
static PyObject *
_wrap_gst_element_get_pad_list(PyGObject *self)
return Py_BuildValue("(bL)", ret, dest_value);
}
%%
-override gst_bin_add_many args
-static PyObject *
-_wrap_gst_bin_add_many(PyGObject *self, PyObject *args)
-{
- PyGObject *element;
- int i, len;
-
- len = PyTuple_Size(args);
- if (len == 0) {
- PyErr_SetString(PyExc_TypeError, "GstBin.add_many requires at least one argument");
- return NULL;
- }
-
-
- for (i = 0; i < len; i++) {
- element = (PyGObject*)PyTuple_GetItem(args, i);
- if (!pygobject_check(element, &PyGstElement_Type))
- {
- PyErr_SetString(PyExc_TypeError, "argument must be a GstElement");
- return NULL;
- }
- }
-
- for (i = 0; i < len; i++) {
- element = (PyGObject*)PyTuple_GetItem(args, i);
- gst_bin_add(GST_BIN(self->obj), GST_ELEMENT(element->obj));
- }
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-%%
-override gst_bin_remove_many args
-static PyObject *
-_wrap_gst_bin_remove_many(PyGObject *self, PyObject *args)
-{
- PyGObject *element;
- int i, len;
-
- len = PyTuple_Size(args);
- if (len == 0) {
- PyErr_SetString(PyExc_TypeError, "GstBin.remove_many requires at least one argument");
- return NULL;
- }
-
-
- for (i = 0; i < len; i++) {
- element = (PyGObject*)PyTuple_GetItem(args, i);
- if (!pygobject_check(element, &PyGstElement_Type))
- {
- PyErr_SetString(PyExc_TypeError, "argument must be a GstElement");
- return NULL;
- }
- }
-
- for (i = 0; i < len; i++) {
- element = (PyGObject*)PyTuple_GetItem(args, i);
- gst_bin_remove(GST_BIN(self->obj), GST_ELEMENT(element->obj));
- }
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-%%
override gst_element_link_many args
static PyObject *
_wrap_gst_element_link_many(PyObject *self, PyObject *args)
--- /dev/null
+/* -*- Mode: C; ; c-file-style: "python" -*- */
+/* gst-python
+ * Copyright (C) 2004 Johan Dahlin
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Johan Dahlin <johan@gnome.org>
+ */
+
+%%
+ignore
+ gst_bin_get_by_name_recurse_up
+%%
+override gst_bin_add_many args
+static PyObject *
+_wrap_gst_bin_add_many(PyGObject *self, PyObject *args)
+{
+ PyGObject *element;
+ int i, len;
+
+ len = PyTuple_Size(args);
+ if (len == 0) {
+ PyErr_SetString(PyExc_TypeError, "GstBin.add_many requires at least one argument");
+ return NULL;
+ }
+
+
+ for (i = 0; i < len; i++) {
+ element = (PyGObject*)PyTuple_GetItem(args, i);
+ if (!pygobject_check(element, &PyGstElement_Type))
+ {
+ PyErr_SetString(PyExc_TypeError, "argument must be a GstElement");
+ return NULL;
+ }
+ }
+
+ for (i = 0; i < len; i++) {
+ element = (PyGObject*)PyTuple_GetItem(args, i);
+ gst_bin_add(GST_BIN(self->obj), GST_ELEMENT(element->obj));
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+%%
+override gst_bin_remove_many args
+static PyObject *
+_wrap_gst_bin_remove_many(PyGObject *self, PyObject *args)
+{
+ PyGObject *element;
+ int i, len;
+
+ len = PyTuple_Size(args);
+ if (len == 0) {
+ PyErr_SetString(PyExc_TypeError, "GstBin.remove_many requires at least one argument");
+ return NULL;
+ }
+
+
+ for (i = 0; i < len; i++) {
+ element = (PyGObject*)PyTuple_GetItem(args, i);
+ if (!pygobject_check(element, &PyGstElement_Type))
+ {
+ PyErr_SetString(PyExc_TypeError, "argument must be a GstElement");
+ return NULL;
+ }
+ }
+
+ for (i = 0; i < len; i++) {
+ element = (PyGObject*)PyTuple_GetItem(args, i);
+ gst_bin_remove(GST_BIN(self->obj), GST_ELEMENT(element->obj));
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+%%
+override gst_bin_iterate noargs
+static PyObject *
+_wrap_gst_bin_iterate(PyGObject *self)
+{
+ int ret;
+
+ pyg_unblock_threads();
+ ret = gst_bin_iterate(GST_BIN(self->obj));
+ pyg_block_threads();
+ return PyInt_FromLong(ret);
+}
+%%
+override gst_bin_get_list noargs
+static PyObject *
+_wrap_gst_bin_get_list(PyGObject *self)
+{
+ GList *elements, *l;
+ PyObject *tuple;
+ int i;
+
+ elements = (GList*)gst_bin_get_list(GST_BIN(self->obj));
+ tuple = PyTuple_New(g_list_length(elements));
+ for (i = 0, l = elements; l; l = l->next, i++) {
+ GstElement *element = (GstElement*)l->data;
+ if (!element)
+ continue;
+ PyTuple_SetItem(tuple, i, pygobject_new(G_OBJECT(element)));
+ }
+
+ return tuple;
+}
+%%
+override gst_bin_get_by_name kwargs
+static PyObject *
+_wrap_gst_bin_get_by_name(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+ static char *kwlist[] = { "name", "recurse", NULL };
+ char *name;
+ gboolean recurse = FALSE;
+ GstElement *ret;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|b:GstBin.get_by_name",
+ kwlist, &name, &recurse))
+ return NULL;
+
+ if (recurse)
+ ret = gst_bin_get_by_name_recurse_up(GST_BIN(self->obj), name);
+ else
+ ret = gst_bin_get_by_name(GST_BIN(self->obj), name);
+
+ /* pygobject_new handles NULL checking */
+ return pygobject_new((GObject *)ret);
+}
import sys
import unittest
+import pygtk
+pygtk.require('2.0')
+
+import gobject
+
# Don't insert before .
sys.path.insert(1, os.path.join('..'))
assert hasattr(interfaces, 'Mixer')
assert issubclass(interfaces.Mixer, gobject.GInterface)
+if getattr(gobject, 'pygtk_version', ()) >= (2,3,92):
+ class FunctionCall(unittest.TestCase):
+ def testXOverlay(self):
+ element = gst.Element('xvimagesink')
+ assert isinstance(element, gst.Element)
+ assert isinstance(element, interfaces.XOverlay)
+ element.set_xwindow_id(0L)
+
if __name__ == "__main__":
unittest.main()
assert hasattr(interfaces, 'Mixer')
assert issubclass(interfaces.Mixer, gobject.GInterface)
+if getattr(gobject, 'pygtk_version', ()) >= (2,3,92):
+ class FunctionCall(unittest.TestCase):
+ def testXOverlay(self):
+ element = gst.Element('xvimagesink')
+ assert isinstance(element, gst.Element)
+ assert isinstance(element, interfaces.XOverlay)
+ element.set_xwindow_id(0L)
+
if __name__ == "__main__":
unittest.main()