[PD-cvs] externals/grill/py/source pybuffer.cpp,1.4,1.5 pydsp.cpp,1.2,1.3

Thomas Grill xovo at users.sourceforge.net
Fri Mar 25 05:54:19 CET 2005


Update of /cvsroot/pure-data/externals/grill/py/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7326/source

Modified Files:
	pybuffer.cpp pydsp.cpp 
Log Message:
fixes for maxmsp
added generic numpy support (not working)


Index: pydsp.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/pydsp.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** pydsp.cpp	14 Mar 2005 04:58:13 -0000	1.2
--- pydsp.cpp	25 Mar 2005 04:54:17 -0000	1.3
***************
*** 64,68 ****
  }
  
! PyObject *NAFromBuffer(PyObject *buf,int c,int n);
  
  void pydsp::NewBuffers()
--- 64,68 ----
  }
  
! PyObject *arrayfrombuffer(PyObject *buf,int c,int n);
  
  void pydsp::NewBuffers()
***************
*** 83,87 ****
          Py_XDECREF(buffers[i]);
          PyObject *b = PyBuffer_FromReadWriteMemory(insigs[i],n*sizeof(t_sample));
!         buffers[i] = NAFromBuffer(b,1,n);
          Py_DECREF(b);
      }
--- 83,87 ----
          Py_XDECREF(buffers[i]);
          PyObject *b = PyBuffer_FromReadWriteMemory(insigs[i],n*sizeof(t_sample));
!         buffers[i] = arrayfrombuffer(b,1,n);
          Py_DECREF(b);
      }
***************
*** 95,99 ****
          else {
              PyObject *b = PyBuffer_FromReadWriteMemory(outsigs[i],n*sizeof(t_sample));
!             buffers[ins+i] = NAFromBuffer(b,1,n);
              Py_DECREF(b);
          }
--- 95,99 ----
          else {
              PyObject *b = PyBuffer_FromReadWriteMemory(outsigs[i],n*sizeof(t_sample));
!             buffers[ins+i] = arrayfrombuffer(b,1,n);
              Py_DECREF(b);
          }

Index: pybuffer.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/py/source/pybuffer.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** pybuffer.cpp	14 Mar 2005 04:58:13 -0000	1.4
--- pybuffer.cpp	25 Mar 2005 04:54:16 -0000	1.5
***************
*** 11,24 ****
  #include "main.h"
  
! #ifdef PY_NUMARRAY
! #if FLEXT_OS == FLEXT_OS_MAC
! #include <Python/numarray/numarray.h>
  #else
! #include <numarray/numarray.h>
  #endif
- static bool nasupport = false;
- static NumarrayType numtype;
  #endif
  
  // PD defines a T_OBJECT symbol
  #undef T_OBJECT
--- 11,58 ----
  #include "main.h"
  
! #undef PY_ARRAYS
! 
! 
! #if defined(PY_NUMERIC)
!     #define PY_ARRAYS 1
! 
!     #if FLEXT_OS == FLEXT_OS_MAC
!     #include <Python/Numeric/arrayobject.h>
!     #else
!     #include <Numeric/arrayobject.h>
!     #endif
! #elif defined(PY_NUMARRAY)
!     #define PY_ARRAYS 1
!     #define NA
! 
! #ifdef NA
!     #if FLEXT_OS == FLEXT_OS_MAC
!     #include <Python/numarray/numarray.h>
!     #else
!     #include <numarray/numarray.h>
!     #endif
  #else
!     #if FLEXT_OS == FLEXT_OS_MAC
!     #include <Python/numarray/arrayobject.h>
!     #else
!     #include <numarray/arrayobject.h>
!     #endif
  #endif
  #endif
  
+ 
+ #ifdef PY_ARRAYS
+ 
+ #ifdef NA
+ static NumarrayType numtype = tAny;
+ inline bool arrsupport() { return numtype != tAny; }
+ #else
+ static PyArray_TYPES numtype = PyArray_NOTYPE;
+ inline bool arrsupport() { return numtype != PyArray_NOTYPE; }
+ #endif
+ 
+ #endif
+ 
+ 
  // PD defines a T_OBJECT symbol
  #undef T_OBJECT
***************
*** 189,201 ****
  }
  
! PyObject *NAFromBuffer(PyObject *buf,int c,int n)
  {
! #ifdef PY_NUMARRAY
!     if(nasupport) {
!         maybelong shape[2];
          shape[0] = n;
          shape[1] = c;
!         PyArrayObject *na = NA_NewAllFromBuffer(c == 1?1:2,shape,numtype,buf,0,0,NA_ByteOrder(),1,1);
!         return (PyObject *)na;
      }
      else
--- 223,251 ----
  }
  
! PyObject *arrayfrombuffer(PyObject *buf,int c,int n)
  {
! #ifdef PY_ARRAYS
!     if(arrsupport()) {
!         PyObject *arr;
!         int shape[2];
          shape[0] = n;
          shape[1] = c;
! #ifdef NA
!         arr = (PyObject *)NA_NewAllFromBuffer(c == 1?1:2,shape,numtype,buf,0,0,NA_ByteOrder(),1,1);
! #else
!         void *data;
!         int len;
!         int err = PyObject_AsWriteBuffer(buf,&data,&len);
!         if(!err) {
!             FLEXT_ASSERT(len <= n*c*sizeof(t_sample));
!             Py_INCREF(buf);
!             arr = PyArray_FromDimsAndData(c == 1?1:2,shape,numtype,(char *)data);
!         }
!         else {
!             // exception string is already set
!             arr = NULL;
!         }
! #endif
!         return arr;
      }
      else
***************
*** 207,212 ****
  {
      PyObject *ret;
! #ifdef PY_NUMARRAY
!     if(nasupport) {
          if(self->buf) {
              const int n = self->buf->Frames();
--- 257,262 ----
  {
      PyObject *ret;
! #ifdef PY_ARRAYS
!     if(arrsupport()) {
          if(self->buf) {
              const int n = self->buf->Frames();
***************
*** 217,221 ****
              if(ihigh > n) ihigh = n;
  
!             PyObject *nobj = NAFromBuffer((PyObject *)self,c,n);
              if(ilow != 0 || ihigh != n) {
                  ret = PySequence_GetSlice(nobj,ilow,ihigh);
--- 267,271 ----
              if(ihigh > n) ihigh = n;
  
!             PyObject *nobj = arrayfrombuffer((PyObject *)self,c,n);
              if(ilow != 0 || ihigh != n) {
                  ret = PySequence_GetSlice(nobj,ilow,ihigh);
***************
*** 272,277 ****
  {
      int ret;
! #ifdef PY_NUMARRAY
!     if(nasupport) {
          if(!value) {
              PyErr_SetString(PyExc_TypeError,"Object doesn't support item deletion");
--- 322,327 ----
  {
      int ret;
! #ifdef PY_ARRAYS
!     if(arrsupport()) {
          if(!value) {
              PyErr_SetString(PyExc_TypeError,"Object doesn't support item deletion");
***************
*** 286,290 ****
--- 336,344 ----
              if(ihigh > n) ihigh = n;
  
+ #ifdef NA
              PyArrayObject *out = NA_InputArray(value,numtype,NUM_C_ARRAY);
+ #else
+             PyArrayObject *out = (PyArrayObject *)PyArray_ContiguousFromObject(value,numtype,0,0);
+ #endif
              if(!out) {
                  PyErr_SetString(PyExc_TypeError,"Assigned object must be a numarray");
***************
*** 298,302 ****
--- 352,360 ----
                  int dlen = ihigh-ilow;
                  int slen = out->dimensions[0];
+ #ifdef NA
                  flext::CopySamples(self->buf->Data()+ilow,(t_sample *)NA_OFFSETDATA(out),slen < dlen?slen:dlen);
+ #else
+                 flext::CopySamples(self->buf->Data()+ilow,(t_sample *)out->data,slen < dlen?slen:dlen);
+ #endif
                  self->dirty = true;
                  ret = 0;
***************
*** 675,681 ****
  void initsamplebuffer()
  {
- #ifdef PY_NUMARRAY
      PyErr_Clear();
      import_libnumarray();
      if(PyErr_Occurred())
          // catch import error
--- 733,744 ----
  void initsamplebuffer()
  {
      PyErr_Clear();
+ 
+ #ifdef PY_ARRAYS
+ #ifdef NA
      import_libnumarray();
+ #else
+     import_array();
+ #endif
      if(PyErr_Occurred())
          // catch import error
***************
*** 683,692 ****
      else {
          // numarray support ok
!         nasupport = true;
          post("");
! 	    post("Numarray support enabled");
      }
- 
-     numtype = sizeof(t_sample) == 4?tFloat32:tFloat64;
  #endif
  
--- 746,757 ----
      else {
          // numarray support ok
! #ifdef NA
!         numtype = sizeof(t_sample) == 4?tFloat32:tFloat64;
! #else
!         numtype = sizeof(t_sample) == 4?PyArray_FLOAT:PyArray_DOUBLE;
! #endif
          post("");
! 	    post("Python array support enabled");
      }
  #endif
  
***************
*** 696,698 ****
          Py_INCREF(&pySamplebuffer_Type);
  }
- 
--- 761,762 ----





More information about the Pd-cvs mailing list