changeset 105:4845fbb1a516

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).
author Chris Cannam <c.cannam@qmul.ac.uk>
date Tue, 27 Sep 2016 15:04:59 +0100
parents 2b20e610c4c2
children 1ab9634703ca
files Makefile.inc.em VamPipePluginLibrary.cpp perf-test-node.js perf-test.js quick-test.cpp
diffstat 5 files changed, 34 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- 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)
 
--- 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;
     
--- 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;
     }
 
--- 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;
     }
 
--- 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);