changeset 10:d791e1324ab6

Start implementing process and getRemainingFeatures
author Chris Cannam
date Thu, 26 Jan 2012 18:25:28 +0000
parents aa9860e1af8a
children fdff153d9039 63e9115f95c6
files src/Plugin.cpp src/getset.cpp src/getset.h
diffstat 3 files changed, 38 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/Plugin.cpp	Thu Jan 26 15:44:50 2012 +0000
+++ b/src/Plugin.cpp	Thu Jan 26 18:25:28 2012 +0000
@@ -259,18 +259,40 @@
 }
 
 jobject
-Java_org_vamp_1plugins_Plugin_process(JNIEnv *env, jobject obj, jobjectArray, jobject)
+Java_org_vamp_1plugins_Plugin_process(JNIEnv *env, jobject obj, jobjectArray data, jobject timestamp)
 {
     Plugin *p = getHandle<Plugin>(env, obj);
-    //!!!
-    return 0;
+
+    Vamp::RealTime rt;
+    rt.sec = getIntField(env, timestamp, "sec");
+    rt.nsec = getIntField(env, timestamp, "nsec");
+    
+    int channels = env->GetArrayLength(data);
+    float **input = new float *[channels];
+    for (int c = 0; c < channels; ++c) {
+        jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(data, c);
+        input[c] = env->GetFloatArrayElements(cdata, 0);
+    }
+
+    Plugin::FeatureSet features = p->process(input, rt);
+
+    for (int c = 0; c < channels; ++c) {
+        jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(data, c);
+        env->ReleaseFloatArrayElements(cdata, input[c], 0);
+    }
+
+    delete[] input;
+
+    return convertFeatures(features);
 }
 
 jobject
 Java_org_vamp_1plugins_Plugin_getRemainingFeatures(JNIEnv *env, jobject obj)
 {
     Plugin *p = getHandle<Plugin>(env, obj);
-    //!!!
-    return 0;
+
+    Plugin::FeatureSet features = p->getRemainingFeatures();
+
+    return convertFeatures(features);
 }
 
--- a/src/getset.cpp	Thu Jan 26 15:44:50 2012 +0000
+++ b/src/getset.cpp	Thu Jan 26 18:25:28 2012 +0000
@@ -3,6 +3,14 @@
 
 #include <iostream>
 
+int
+getIntField(JNIEnv *env, jobject obj, std::string name)
+{
+    jclass cls = env->GetObjectClass(obj);
+    return env->GetObjectField(obj,
+			       env->GetFieldID(cls, name.c_str(), "I"));
+}
+
 void
 setStringField(JNIEnv *env, jobject obj, std::string name, std::string value)
 {
--- a/src/getset.h	Thu Jan 26 15:44:50 2012 +0000
+++ b/src/getset.h	Thu Jan 26 18:25:28 2012 +0000
@@ -7,6 +7,9 @@
 #include <string>
 #include <vector>
 
+extern int
+getIntField(JNIEnv *env, jobject obj, std::string name);
+
 extern void
 setStringField(JNIEnv *env, jobject obj, std::string name, std::string value);