# HG changeset patch # User Chris Cannam # Date 1327688385 0 # Node ID f7ca3afb429c14a776fb23c3d88a6abbb2b8c424 # Parent 4ce45e100a2c527b4ec59cfb794e9ec5929ee9b1 Implement convertFeature diff -r 4ce45e100a2c -r f7ca3afb429c src/Plugin.cpp --- 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, "", "()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 > 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); } diff -r 4ce45e100a2c -r f7ca3afb429c src/getset.cpp --- 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, "", "(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 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 values) { jclass strCls = env->FindClass("java/lang/String"); diff -r 4ce45e100a2c -r f7ca3afb429c src/getset.h --- 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 #include +#include + 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 value); + +extern void setStringArrayField(JNIEnv *env, jobject obj, std::string name, std::vector value); extern jmethodID