Mercurial > hg > jvamp
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