Mercurial > hg > vampy-host
changeset 41:55fcd0e3e513
Fix handling of 2D NumPy arrays
author | Chris Cannam |
---|---|
date | Wed, 26 Nov 2014 18:08:53 +0000 |
parents | fa3f80d4e340 |
children | 9dd449a19004 |
files | PyPluginObject.cpp VectorConversion.cpp VectorConversion.h test_process.py |
diffstat | 4 files changed, 20 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/PyPluginObject.cpp Wed Nov 26 15:58:46 2014 +0000 +++ b/PyPluginObject.cpp Wed Nov 26 18:08:53 2014 +0000 @@ -392,6 +392,12 @@ return data; } + if ((int)data.size() != channels) { +// cerr << "Wrong number of channels: got " << data.size() << ", expected " << channels << endl; + PyErr_SetString(PyExc_TypeError, "Wrong number of channels"); + return vector<vector<float> >(); + } + } else { if (!PyList_Check(pyBuffer)) { @@ -400,7 +406,7 @@ } if (PyList_GET_SIZE(pyBuffer) != channels) { - cerr << "Wrong number of channels: got " << PyList_GET_SIZE(pyBuffer) << ", expected " << channels << endl; +// cerr << "Wrong number of channels: got " << PyList_GET_SIZE(pyBuffer) << ", expected " << channels << endl; PyErr_SetString(PyExc_TypeError, "Wrong number of channels"); return data; } @@ -409,13 +415,13 @@ PyObject *cbuf = PyList_GET_ITEM(pyBuffer, c); data.push_back(conv.PyValue_To_FloatVector(cbuf)); } + } - for (int c = 0; c < channels; ++c) { - if ((int)data[c].size() != blockSize) { - cerr << "Wrong number of samples on channel " << c << ": expected " << blockSize << " (plugin's block size), got " << data[c].size() << endl; - PyErr_SetString(PyExc_TypeError, "Wrong number of samples"); - return vector<vector<float> >(); - } + for (int c = 0; c < channels; ++c) { + if ((int)data[c].size() != blockSize) { +// cerr << "Wrong number of samples on channel " << c << ": expected " << blockSize << " (plugin's block size), got " << data[c].size() << endl; + PyErr_SetString(PyExc_TypeError, "Wrong number of samples"); + return vector<vector<float> >(); } }
--- a/VectorConversion.cpp Wed Nov 26 15:58:46 2014 +0000 +++ b/VectorConversion.cpp Wed Nov 26 18:08:53 2014 +0000 @@ -191,9 +191,7 @@ } /// check strides (useful if array is not continuous) - size_t strides = *((size_t*) PyArray_STRIDES(pyArray)); - - cerr << "dims = " << PyArray_DIMS(pyArray)[0] << "x" << PyArray_DIMS(pyArray)[1] << ", strides = " << strides << endl; + size_t *strideptr = (size_t*) PyArray_STRIDES(pyArray); /// convert the array for (int i = 0; i < PyArray_DIMS(pyArray)[0]; ++i) { @@ -203,16 +201,16 @@ switch (descr->type_num) { case NPY_FLOAT : // dtype='float32' - vv = PyArray_Convert<float,float>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strides); + vv = PyArray_Convert<float,float>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strideptr[1]); break; case NPY_DOUBLE : // dtype='float64' - vv = PyArray_Convert<float,double>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strides); + vv = PyArray_Convert<float,double>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strideptr[1]); break; case NPY_INT : // dtype='int' - vv = PyArray_Convert<float,int>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strides); + vv = PyArray_Convert<float,int>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strideptr[1]); break; case NPY_LONG : // dtype='long' - vv = PyArray_Convert<float,long>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strides); + vv = PyArray_Convert<float,long>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strideptr[1]); break; default : string msg = "Unsupported value type in NumPy array object.";
--- a/VectorConversion.h Wed Nov 26 15:58:46 2014 +0000 +++ b/VectorConversion.h Wed Nov 26 18:08:53 2014 +0000 @@ -102,8 +102,6 @@ int length, size_t strides) const { - std::cerr << "PyArray_Convert: raw pointer is " << (long long)(raw_data_ptr) << std::endl; - std::vector<RET> v(length); /// check if the array is continuous, if not use strides info
--- a/test_process.py Wed Nov 26 15:58:46 2014 +0000 +++ b/test_process.py Wed Nov 26 18:08:53 2014 +0000 @@ -4,6 +4,8 @@ testPluginKey = "vamp-test-plugin:vamp-test-plugin" +##!!! todo: support for, and test for, correct version of test plugin (with parameter) + rate = 44100 def test_load_unload():