# HG changeset patch # User Chris Cannam # Date 1327602328 0 # Node ID d791e1324ab6fc7d1483094eae72b6c688ab7646 # Parent aa9860e1af8a96ad7dc6bf49a4b9377bb263bb3b Start implementing process and getRemainingFeatures diff -r aa9860e1af8a -r d791e1324ab6 src/Plugin.cpp --- 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(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(env, obj); - //!!! - return 0; + + Plugin::FeatureSet features = p->getRemainingFeatures(); + + return convertFeatures(features); } diff -r aa9860e1af8a -r d791e1324ab6 src/getset.cpp --- 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 +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) { diff -r aa9860e1af8a -r d791e1324ab6 src/getset.h --- 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 #include +extern int +getIntField(JNIEnv *env, jobject obj, std::string name); + extern void setStringField(JNIEnv *env, jobject obj, std::string name, std::string value);