# HG changeset patch # User Chris Cannam # Date 1474985099 -3600 # Node ID 4845fbb1a5161e6b255befabf56beeaf39958477 # Parent 2b20e610c4c29e8a6eef7e98aef20f4f417bf95d Instead of using separate values and b64values entries in JSON serialisations, allow numeric arrays to be replaced by b64 variants wherever they appear (discriminating by type). Also rename values to featureValues in feature throughout, as values turns out to be a hazardous name in a JS context. Finally use Array instead of Text for array encoding (seems clearer). diff -r 2b20e610c4c2 -r 4845fbb1a516 Makefile.inc.em --- a/Makefile.inc.em Mon Sep 26 16:18:44 2016 +0100 +++ b/Makefile.inc.em Tue Sep 27 15:04:59 2016 +0100 @@ -44,7 +44,7 @@ DEFINES := $(DEFINES) -CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) +CXXFLAGS := -std=c++11 -fPIC -fno-exceptions -Wall -Wextra $(DEFINES) $(OPTFLAGS) INCPATH := -I$(SDK_DIR) -I.. -I../json $(INCPATH) diff -r 2b20e610c4c2 -r 4845fbb1a516 VamPipePluginLibrary.cpp --- a/VamPipePluginLibrary.cpp Mon Sep 26 16:18:44 2016 +0100 +++ b/VamPipePluginLibrary.cpp Tue Sep 27 15:04:59 2016 +0100 @@ -178,7 +178,7 @@ VampJson::BufferSerialisation serialisation = (m_useBase64 ? VampJson::BufferSerialisation::Base64 : - VampJson::BufferSerialisation::Text); + VampJson::BufferSerialisation::Array); Json rj; diff -r 2b20e610c4c2 -r 4845fbb1a516 perf-test-node.js --- a/perf-test-node.js Mon Sep 26 16:18:44 2016 +0100 +++ b/perf-test-node.js Tue Sep 27 15:04:59 2016 +0100 @@ -39,7 +39,7 @@ function processRaw(request) { const nChannels = request.processInput.inputBuffers.length; - const nFrames = request.processInput.inputBuffers[0].values.length; + const nFrames = request.processInput.inputBuffers[0].length; const buffersPtr = exampleModule._malloc(nChannels * 4); const buffers = new Uint32Array( @@ -49,7 +49,7 @@ const framesPtr = exampleModule._malloc(nFrames * 4); const frames = new Float32Array( exampleModule.HEAPU8.buffer, framesPtr, nFrames); - frames.set(request.processInput.inputBuffers[i].values); + frames.set(request.processInput.inputBuffers[i]); buffers[i] = framesPtr; } @@ -64,8 +64,8 @@ } exampleModule._free(buffersPtr); - const response = JSON.parse( - exampleModule.Pointer_stringify(responseJson)); + const responseJstr = exampleModule.Pointer_stringify(responseJson); + const response = JSON.parse(responseJstr); vampipeFreeJson(responseJson); @@ -121,10 +121,13 @@ if (wfeature.label != null) { out.label = wfeature.label; } - if (wfeature.b64values != null && wfeature.b64values !== "") { - out.values = myFromBase64(wfeature.b64values); - } else if (wfeature.values != null) { - out.values = new Float32Array(wfeature.values); + const vv = wfeature.featureValues; + if (vv != null) { + if (typeof vv === "string") { + out.featureValues = myFromBase64(vv); + } else { + out.featureValues = new Float32Array(vv); + } } return out; } @@ -160,9 +163,8 @@ return { timestamp : frame2timestamp(n * blockSize, rate), inputBuffers : [ - { values : new Float32Array( - Array.from(Array(blockSize).keys(), - n => n / blockSize)) } + new Float32Array(Array.from(Array(blockSize).keys(), + n => n / blockSize)) ], } }); @@ -182,7 +184,7 @@ "processInput": blocks[i] }); let features = responseToFeatureSet(result); - let count = features.get("counts")[0].values[0]; + let count = features.get("counts")[0].featureValues[0]; total += count; } @@ -204,7 +206,7 @@ "processInput": blocks[i] }); let features = responseToFeatureSet(result); - let count = features.get("counts")[0].values[0]; + let count = features.get("counts")[0].featureValues[0]; total += count; } diff -r 2b20e610c4c2 -r 4845fbb1a516 perf-test.js --- a/perf-test.js Mon Sep 26 16:18:44 2016 +0100 +++ b/perf-test.js Tue Sep 27 15:04:59 2016 +0100 @@ -37,7 +37,7 @@ function processRaw(request) { const nChannels = request.processInput.inputBuffers.length; - const nFrames = request.processInput.inputBuffers[0].values.length; + const nFrames = request.processInput.inputBuffers[0].length; const buffersPtr = exampleModule._malloc(nChannels * 4); const buffers = new Uint32Array( @@ -47,7 +47,7 @@ const framesPtr = exampleModule._malloc(nFrames * 4); const frames = new Float32Array( exampleModule.HEAPU8.buffer, framesPtr, nFrames); - frames.set(request.processInput.inputBuffers[i].values); + frames.set(request.processInput.inputBuffers[i]); buffers[i] = framesPtr; } @@ -62,8 +62,8 @@ } exampleModule._free(buffersPtr); - const response = JSON.parse( - exampleModule.Pointer_stringify(responseJson)); + const responseJstr = exampleModule.Pointer_stringify(responseJson); + const response = JSON.parse(responseJstr); vampipeFreeJson(responseJson); @@ -119,10 +119,13 @@ if (wfeature.label != null) { out.label = wfeature.label; } - if (wfeature.b64values != null && wfeature.b64values !== "") { - out.values = myFromBase64(wfeature.b64values); - } else if (wfeature.values != null) { - out.values = new Float32Array(wfeature.values); + const vv = wfeature.featureValues; + if (vv != null) { + if (typeof vv === "string") { + out.featureValues = myFromBase64(vv); + } else { + out.featureValues = new Float32Array(vv); + } } return out; } @@ -158,9 +161,8 @@ return { timestamp : frame2timestamp(n * blockSize, rate), inputBuffers : [ - { values : new Float32Array( - Array.from(Array(blockSize).keys(), - n => n / blockSize)) } + new Float32Array(Array.from(Array(blockSize).keys(), + n => n / blockSize)) ], } }); @@ -180,7 +182,7 @@ "processInput": blocks[i] }); let features = responseToFeatureSet(result); - let count = features.get("counts")[0].values[0]; + let count = features.get("counts")[0].featureValues[0]; total += count; } @@ -202,7 +204,7 @@ "processInput": blocks[i] }); let features = responseToFeatureSet(result); - let count = features.get("counts")[0].values[0]; + let count = features.get("counts")[0].featureValues[0]; total += count; } diff -r 2b20e610c4c2 -r 4845fbb1a516 quick-test.cpp --- a/quick-test.cpp Mon Sep 26 16:18:44 2016 +0100 +++ b/quick-test.cpp Tue Sep 27 15:04:59 2016 +0100 @@ -45,12 +45,12 @@ cout << configResponse << endl; freeFn(configResponse); - string processRequest = "{\"type\":\"process\",\"content\":{\"pluginHandle\":1,\"processInput\":{\"timestamp\":{\"s\":0,\"n\":0},\"inputBuffers\":[{\"values\":[0,1,0,-1,0,1,0,-1]}]}}}"; + string processRequest = "{\"type\":\"process\",\"content\":{\"pluginHandle\":1,\"processInput\":{\"timestamp\":{\"s\":0,\"n\":0},\"inputBuffers\":[[0,1,0,-1,0,1,0,-1]]}}}"; const char *processResponse = reqFn(processRequest.c_str()); cout << processResponse << endl; freeFn(processResponse); - string b64processRequest = "{\"type\":\"process\",\"content\":{\"pluginHandle\":1,\"processInput\":{\"timestamp\":{\"s\":0,\"n\":0},\"inputBuffers\":[{\"b64values\":\"AAAAAAAAgD8AAAAAAACAvwAAAAAAAIA/AAAAAAAAgL8\"}]}}}"; + string b64processRequest = "{\"type\":\"process\",\"content\":{\"pluginHandle\":1,\"processInput\":{\"timestamp\":{\"s\":0,\"n\":0},\"inputBuffers\":[\"AAAAAAAAgD8AAAAAAACAvwAAAAAAAIA/AAAAAAAAgL8\"]}}}"; const char *b64processResponse = reqFn(b64processRequest.c_str()); cout << b64processResponse << endl; freeFn(b64processResponse);