changeset 14:f7ca3afb429c

Implement convertFeature
author Chris Cannam
date Fri, 27 Jan 2012 18:19:45 +0000
parents 4ce45e100a2c
children 47b648d1b261
files src/Plugin.cpp src/getset.cpp src/getset.h
diffstat 3 files changed, 48 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/Plugin.cpp	Fri Jan 27 14:34:32 2012 +0000
+++ b/src/Plugin.cpp	Fri Jan 27 18:19:45 2012 +0000
@@ -259,12 +259,31 @@
 }
 
 static jobject
-convertFeatures(const Plugin::FeatureSet &features)
+convertFeature(JNIEnv *env, const Plugin::Feature &feature)
+{
+    jclass featClass = env->FindClass("org/vamp_plugins/Plugin$Feature");
+    jmethodID ctor = env->GetMethodID(featClass, "<init>", "()V");
+    jobject jfeature = env->NewObject(featClass, ctor);
+
+    setBooleanField(env, jfeature, "hasTimestamp", feature.hasTimestamp);
+    setRealTimeField(env, jfeature, "timestamp", feature.timestamp);
+    setBooleanField(env, jfeature, "hasDuration", feature.hasDuration);
+    setRealTimeField(env, jfeature, "duration", feature.duration);
+    setFloatArrayField(env, jfeature, "values", feature.values);
+    setStringField(env, jfeature, "label", feature.label);
+
+    return jfeature;
+}
+
+static jobject
+convertFeatures(JNIEnv *env, const Plugin::FeatureSet &features)
 {
     jobject result;
     
+    // FeatureSet is map<int, vector<Feature> > where Feature is a struct.
 
-    //!!!
+    
+
 }
 
 jobject
@@ -292,7 +311,7 @@
 
     delete[] input;
 
-    return convertFeatures(features);
+    return convertFeatures(env, features);
 }
 
 jobject
@@ -302,6 +321,6 @@
 
     Plugin::FeatureSet features = p->getRemainingFeatures();
 
-    return convertFeatures(features);
+    return convertFeatures(env, features);
 }
 
--- a/src/getset.cpp	Fri Jan 27 14:34:32 2012 +0000
+++ b/src/getset.cpp	Fri Jan 27 18:19:45 2012 +0000
@@ -48,6 +48,15 @@
 }
 
 void
+setRealTimeField(JNIEnv *env, jobject obj, std::string name, Vamp::RealTime rt)
+{
+    jclass rtClass = env->FindClass("org/vamp_plugins/RealTime");
+    jmethodID ctor = env->GetMethodID(rtClass, "<init>", "(II)V");
+    jobject jrt = env->NewObject(rtClass, ctor, rt.sec, rt.nsec);
+    setObjectField(env, obj, name, "Lorg/vamp_plugins/RealTime;", jrt);
+}
+
+void
 setObjectField(JNIEnv *env, jobject obj, std::string name, std::string type, jobject value)
 {
     jclass cls = env->GetObjectClass(obj);
@@ -56,6 +65,14 @@
 }
 
 void
+setFloatArrayField(JNIEnv *env, jobject obj, std::string name, std::vector<float> values)
+{
+    jfloatArray jarr = env->NewFloatArray(values.size());
+    env->SetFloatArrayRegion(jarr, 0, values.size(), values.data());
+    setObjectField(env, obj, name, "[float", jarr);
+}
+
+void
 setStringArrayField(JNIEnv *env, jobject obj, std::string name, std::vector<std::string> values)
 {
     jclass strCls = env->FindClass("java/lang/String");
--- a/src/getset.h	Fri Jan 27 14:34:32 2012 +0000
+++ b/src/getset.h	Fri Jan 27 18:19:45 2012 +0000
@@ -7,6 +7,8 @@
 #include <string>
 #include <vector>
 
+#include <vamp-hostsdk/RealTime.h>
+
 extern int
 getIntField(JNIEnv *env, jobject obj, std::string name);
 
@@ -23,9 +25,15 @@
 setIntField(JNIEnv *env, jobject obj, std::string name, int value);
 
 extern void
+setRealTimeField(JNIEnv *env, jobject obj, std::string name, Vamp::RealTime value);
+
+extern void
 setObjectField(JNIEnv *env, jobject obj, std::string name, std::string type, jobject value);
 
 extern void
+setFloatArrayField(JNIEnv *env, jobject obj, std::string name, std::vector<float> value);
+
+extern void
 setStringArrayField(JNIEnv *env, jobject obj, std::string name, std::vector<std::string> value);
 
 extern jmethodID