codegen/codegen.py: Resync (add support for tp_as_buffer)
authorJohan Dahlin <johan@gnome.org>
Mon, 3 May 2004 09:10:26 +0000 (09:10 +0000)
committerJohan Dahlin <johan@gnome.org>
Mon, 3 May 2004 09:10:26 +0000 (09:10 +0000)
Original commit message from CVS:
* codegen/codegen.py: Resync (add support for tp_as_buffer)

* gst/gst.override: Support buffer interface for GstBuffer. Move
stuff into common.h, fix wrapping for
gst_pad_template_get_caps_by_name

ChangeLog
codegen/codegen.py
configure.ac
gst/gst-types.defs
gst/gst.override
gst/interfaces.override
gst/play.override

index 44d3433..2cf12ea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2004-05-03  Johan Dahlin  <johan@gnome.org>
+
+       * codegen/codegen.py: Resync (add support for tp_as_buffer)
+
+       * gst/gst.override: Support buffer interface for GstBuffer. Move
+       stuff into common.h, fix wrapping for
+       gst_pad_template_get_caps_by_name
+
 2004-05-01  Johan Dahlin  <johan@gnome.org>
 
        * testsuite/runtests.py (gettestnames): Cleanup
index d348314..0c9fdfe 100644 (file)
@@ -74,7 +74,7 @@ class Wrapper:
         '    (reprfunc)%(tp_str)s,             /* tp_str */\n' \
         '    (getattrofunc)0,                  /* tp_getattro */\n' \
         '    (setattrofunc)0,                  /* tp_setattro */\n' \
-        '    0,                                        /* tp_as_buffer */\n' \
+        '    (PyBufferProcs*)%(tp_as_buffer)s, /* tp_as_buffer */\n' \
         '    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */\n' \
         '    NULL,                             /* Documentation string */\n' \
         '    (traverseproc)0,                  /* tp_traverse */\n' \
@@ -100,7 +100,7 @@ class Wrapper:
 
     slots_list = ['tp_getattr', 'tp_setattr', 'tp_compare', 'tp_repr',
                   'tp_as_number', 'tp_as_sequence', 'tp_as_mapping', 'tp_hash',
-                  'tp_call', 'tp_str', 'tp_richcompare', 'tp_iter',
+                  'tp_call', 'tp_str', 'tp_as_buffer', 'tp_richcompare', 'tp_iter',
                   'tp_iternext', 'tp_descr_get', 'tp_descr_set', 'tp_init',
                   'tp_alloc', 'tp_new', 'tp_free', 'tp_is_gc']
 
index c4492dd..36cc354 100644 (file)
@@ -77,6 +77,7 @@ dnl AC_MSG_RESULT($PYGTK_CODEGEN)
 PYGTK_CODEGEN="$PYTHON \$(top_srcdir)/codegen/codegen.py"
 AC_SUBST(PYGTK_CODEGEN)
 
+dnl Interfaces
 AC_MSG_CHECKING(for GStreamer interfaces include dir)
 PKG_CHECK_MODULES(GST_INTERFACES, gstreamer-interfaces-$GST_MAJORMINOR,
                   HAVE_INTERFACES=yes,HAVE_INTERFACES=no)
@@ -84,6 +85,7 @@ AM_CONDITIONAL(BUILD_INTERFACES, test "x$HAVE_INTERFACES" = "xyes")
 AC_SUBST(GST_INTERFACES_CFLAGS)
 AC_SUBST(GST_INTERFACES_LIBS)
 
+dnl Play
 AC_MSG_CHECKING(for GStreamer play include dir)
 PKG_CHECK_MODULES(GST_PLAY, gstreamer-play-$GST_MAJORMINOR, 
                          HAVE_PLAY=yes,HAVE_PLAY=no)
@@ -91,6 +93,14 @@ AM_CONDITIONAL(BUILD_PLAY, test "x$HAVE_PLAY" = "xyes")
 AC_SUBST(GST_PLAY_CFLAGS)
 AC_SUBST(GST_PLAY_LIBS)
 
+dnl Editor
+AC_MSG_CHECKING(for GStreamer editor include dir)
+PKG_CHECK_MODULES(GST_EDITOR, gst-editor-libs >= 0.7.0,
+                         HAVE_EDITOR=yes,HAVE_EDITOR=no)
+AM_CONDITIONAL(BUILD_EDITOR, test "x$HAVE_EDITOR" = "xyes")
+AC_SUBST(GST_EDITOR_CFLAGS)
+AC_SUBST(GST_EDITOR_LIBS)
+
 AC_CHECK_PROG(HAVE_XMLTO, xmlto, true, false)
 AC_CHECK_PROG(HAVE_XMLCATALOG, xmlcatalog, true, false)
 
index 2d43c71..d85f0fe 100644 (file)
   (gtype-id "GST_TYPE_CAPS")
 )
 
+; Defined in arg-types.py
 ;(define-boxed Data
 ;  (in-module "Gst")
 ;  (c-name "GstData")
 ;  (release-func "gst_data_free")
 ;)
 
-(define-boxed Event
+; HACK, should be boxed
+(define-pointer Event
   (in-module "Gst")
   (c-name "GstEvent")
   (gtype-id "GST_TYPE_EVENT")
-  (copy-func "gst_event_copy")
-  (release-func "gst_data_unref")
+;  (copy-func "gst_event_copy")
+;  (release-func "gst_event_unref")
 )
 
 (define-boxed GError
index a8a65d2..83d00fc 100644 (file)
  */
 %%
 headers
-#include <Python.h>
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#include "pygobject.h"
+#include "common.h"
+
 #include <gst/gst.h>
 #include <gst/gsterror.h>
 #include <gst/gstqueue.h>
 #include <gst/gsttypefind.h>
 #include <gst/gsttag.h>
 
-#if PY_VERSION_HEX < 0x02030000
-  typedef destructor freefunc;
-#endif
-typedef struct {
-     PyGObject *pad;
-     PyObject *link_function;
-     PyObject *event_function;
-     PyObject *chain_function;
-     PyObject *get_function; 
-} PyGstPadPrivate;
-
-typedef struct {
-     PyObject *func, *data;
-} PyGstCustomNotify;
-
 extern gboolean pygst_data_from_pyobject (PyObject *object, GstData **data);
 static PyObject *_wrap_gst_element_factory_make(PyObject *self, PyObject *args, PyObject *kwargs);
 
@@ -58,11 +42,10 @@ include
   gstpad-handlers.override
 %%
 init
-/* This is due to a bug in PyGTK 2.3.91, should be removed when we can require
- * a newer version.
- */
 PyGstPipeline_Type.tp_new = PyType_GenericNew;
 PyGstThread_Type.tp_new = PyType_GenericNew;
+PyGstQueue_Type.tp_new = PyType_GenericNew;
+PyGstBin_Type.tp_new = PyType_GenericNew; // Shouldn't this be enough?
 %%
 modulename gst
 %%
@@ -202,6 +185,24 @@ _wrap_gst_element_get_pad_list(PyGObject *self)
        return list;
 }
 %%
+override gst_element_get_pad_template_list noargs
+static PyObject *
+_wrap_gst_element_get_pad_template_list(PyGObject *self)
+{
+       GList *l, *pads;
+       PyObject *list;
+       
+       pads = (GList*)gst_element_get_pad_template_list(GST_ELEMENT(self->obj));
+
+       list = PyList_New(0);
+       for (l = pads; l; l = l->next) {
+               GstPad *pad = (GstPad*)l->data;
+               PyList_Append(list, pygobject_new(G_OBJECT(pad)));
+       }
+               
+       return list;
+}
+%%
 override gst_element_set_state kwargs
 static PyObject *
 _wrap_gst_element_set_state(PyGObject *self, PyObject *args, PyObject *kwargs)
@@ -1001,7 +1002,7 @@ _wrap_gst_pad_template_get_caps(PyGObject *self)
        return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE);
 }
 %%
-override gst_type_fidn_factory_get_caps noargs
+override gst_type_find_factory_get_caps noargs
 static PyObject *
 _wrap_gst_type_find_factory_get_caps(PyGObject *self)
 {
@@ -1009,18 +1010,19 @@ _wrap_gst_type_find_factory_get_caps(PyGObject *self)
        return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE);
 }
 %%
-override gst_pad_template_get_caps_ny_name kwargs
+override gst_pad_template_get_caps_by_name kwargs
 static PyObject *
 _wrap_gst_pad_template_get_caps_by_name(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
-       static char *kwlist[] = { "name", NULL };
-       char *name;
-       GstCaps *ret;
-
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:GstPadTemplate.get_caps_by_name", kwlist, &name))
-               return NULL;
-       ret = (GstCaps*)gst_pad_template_get_caps_by_name(GST_PAD_TEMPLATE(self->obj), name);
-       return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE);
+    static char *kwlist[] = { "name", NULL };
+    char *name;
+    GstCaps *ret;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:GstPadTemplate.get_caps_by_name", kwlist, &name))
+        return NULL;
+    ret = (GstCaps*)gst_pad_template_get_caps_by_name(GST_PAD_TEMPLATE(self->obj), name);
+    /* pyg_boxed_new handles NULL checking */
+    return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE);
 }
 %%
 override gst_type_find_factory_get_caps noargs
@@ -1076,3 +1078,57 @@ _wrap_gst_element_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
 {
        return _wrap_gst_element_factory_make(NULL, args, kwargs);
 }
+%%
+override-slot GstBuffer.tp_as_buffer
+static int
+gst_buffer_getreadbuffer(PyGObject *self, int index, const void **ptr)
+{
+       if ( index != 0 ) {
+               PyErr_SetString(PyExc_SystemError,
+                               "accessing non-existent string segment");
+               return -1;
+       }
+       
+       *ptr = GST_BUFFER_DATA(self->obj);
+       return GST_BUFFER_SIZE(self->obj);
+}
+
+static int
+gst_buffer_getsegcount(PyGObject *self, int *lenp)
+{
+       if (lenp)
+               *lenp = GST_BUFFER_SIZE(self->obj);
+       return 1;
+}
+
+
+static int
+gst_buffer_getcharbuf(PyGObject *self, int index, const char **ptr)
+{
+       if ( index != 0 ) {
+               PyErr_SetString(PyExc_SystemError,
+                               "accessing non-existent string segment");
+               return -1;
+       }
+       
+       *ptr = GST_BUFFER_DATA(self->obj);
+       return GST_BUFFER_SIZE(self->obj);
+}
+
+#if 0
+static int
+string_buffer_getwritebuf(PyStringObject *self, int index, const void **ptr)
+{
+       PyErr_SetString(PyExc_TypeError,
+                       "Cannot use string as modifiable buffer");
+       return -1;
+}
+
+#endif
+
+static PyBufferProcs _wrap_gst_buffer_tp_as_buffer = {
+        (getreadbufferproc)gst_buffer_getreadbuffer,
+       (getwritebufferproc)NULL,
+       (getsegcountproc)gst_buffer_getsegcount,
+       (getcharbufferproc)gst_buffer_getcharbuf,
+};
index 8159bf0..1c21bd0 100644 (file)
  */
 %%
 headers
-#include <Python.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "common.h"
 
-#include "pygobject.h"
 #include <gst/gst.h>
 #include <gst/colorbalance/colorbalance.h>
 #include <gst/colorbalance/colorbalancechannel.h>
@@ -34,9 +37,6 @@ headers
 #include <gst/tuner/tuner.h>
 #include <gst/xwindowlistener/xwindowlistener.h>
 
-#if PY_VERSION_HEX < 0x02030000
-  typedef destructor freefunc;
-#endif
 %%
 modulename gst.interfaces
 %%
index ed49282..5069776 100644 (file)
  */
 %%
 headers
-#include <Python.h>
 
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Python.h>
 #include "pygobject.h"
+
 #include <gst/gst.h>
 #include <gst/play/play.h>
 
-#if PY_VERSION_HEX < 0x02030000
-  typedef destructor freefunc;
-#endif
 %%
 modulename gst.play
 %%