Mercurial > hg > vampy-host
changeset 87:dd56716714e0
Add output_index to the returned output descriptor as well; use it
author | Chris Cannam |
---|---|
date | Wed, 21 Jan 2015 15:04:05 +0000 |
parents | 78844c4b329c |
children | 7228921e8425 |
files | native/PyPluginObject.cpp native/PyRealTime.cpp test/test_plugin_metadata.py vamp/process.py |
diffstat | 4 files changed, 17 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/native/PyPluginObject.cpp Wed Jan 21 14:03:43 2015 +0000 +++ b/native/PyPluginObject.cpp Wed Jan 21 15:04:05 2015 +0000 @@ -171,7 +171,7 @@ } static PyObject * -convertOutput(const Plugin::OutputDescriptor &desc) +convertOutput(const Plugin::OutputDescriptor &desc, int ix) { PyObject *outdict = PyDict_New(); PyDict_SetItemString @@ -210,6 +210,8 @@ (outdict, "sample_rate", PyFloat_FromDouble(desc.sampleRate)); PyDict_SetItemString (outdict, "has_duration", desc.hasDuration ? Py_True : Py_False); + PyDict_SetItemString + (outdict, "output_index", PyInt_FromLong(ix)); return outdict; } @@ -229,18 +231,20 @@ return 0; } + PyErr_Clear(); + Plugin::OutputList ol = pd->plugin->getOutputDescriptors(); if (pyId) { string id = PyString_AS_STRING(pyId); for (int i = 0; i < int(ol.size()); ++i) { if (ol[i].identifier == id) { - return convertOutput(ol[i]); + return convertOutput(ol[i], i); } } } else { if (n >= 0 && n < int(ol.size())) { - return convertOutput(ol[n]); + return convertOutput(ol[n], n); } } @@ -258,7 +262,7 @@ PyObject *outputs = PyList_New(ol.size()); for (int i = 0; i < (int)ol.size(); ++i) { - PyObject *outdict = convertOutput(ol[i]); + PyObject *outdict = convertOutput(ol[i], i); PyList_SET_ITEM(outputs, i, outdict); }
--- a/native/PyRealTime.cpp Wed Jan 21 14:03:43 2015 +0000 +++ b/native/PyRealTime.cpp Wed Jan 21 15:04:05 2015 +0000 @@ -68,7 +68,7 @@ return NULL; } - // PyErr_Clear(); + PyErr_Clear(); // RealTimeObject *self = PyObject_New(RealTimeObject, &RealTime_Type); RealTimeObject *self = (RealTimeObject*)type->tp_alloc(type, 0);
--- a/test/test_plugin_metadata.py Wed Jan 21 14:03:43 2015 +0000 +++ b/test/test_plugin_metadata.py Wed Jan 21 15:04:05 2015 +0000 @@ -34,6 +34,7 @@ plug = vh.load_plugin(plugin_key, rate, vh.ADAPT_NONE) out = plug.get_output("input-summary") assert "sample_type" in out + assert out["output_index"] == 8 try: out = plug.get_output("chops") assert False @@ -50,6 +51,7 @@ out = plug.get_output(0) assert "sample_type" in out assert out["identifier"] == "instants" + assert out["output_index"] == 0 try: out = plug.get_output(20) assert False
--- a/vamp/process.py Wed Jan 21 14:03:43 2015 +0000 +++ b/vamp/process.py Wed Jan 21 15:04:05 2015 +0000 @@ -7,8 +7,7 @@ def load_and_query(data, sample_rate, key, parameters): plug, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters) plug_outs = plug.get_outputs() - out_indices = dict(zip([o["identifier"] for o in plug_outs], - range(0, len(plug_outs)))) # id -> n + out_indices = dict([(o["identifier"], o["output_index"]) for o in plug_outs]) return plug, step_size, block_size, out_indices @@ -45,13 +44,14 @@ def process(data, sample_rate, key, output = "", parameters = {}): #!!! docstring - plug, step_size, block_size, out_indices = load_and_query(data, sample_rate, key, parameters) + plug, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters) if output == "": - outix = 0 + out = plug.get_output(0) else: - assert output in out_indices - outix = out_indices[output] + out = plug.get_output(output) + + outix = out["output_index"] ff = frames.frames_from_array(data, step_size, block_size) fi = 0