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