Mercurial > hg > jvamp
changeset 24:cd430fbf6795
Add getPluginCategory, more sensible return values, fix process, call new functions to test
author | Chris Cannam |
---|---|
date | Wed, 14 Nov 2012 18:10:40 +0000 |
parents | cc9c503535d1 |
children | b568b30c167f fd185c6a74d2 |
files | org/vamp_plugins/Plugin.java org/vamp_plugins/PluginLoader.java src/Plugin.cpp src/PluginLoader.cpp src/org_vamp_plugins_Plugin.h src/org_vamp_plugins_PluginLoader.h test/test.java |
diffstat | 7 files changed, 45 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/org/vamp_plugins/Plugin.java Wed Nov 14 17:53:03 2012 +0000 +++ b/org/vamp_plugins/Plugin.java Wed Nov 14 18:10:40 2012 +0000 @@ -55,12 +55,12 @@ public TreeMap<Integer, ArrayList<Feature>> process(float[][] inputBuffers, RealTime timestamp) { - process(inputBuffers, 0, inputBuffers[0].length, timestamp); + return process(inputBuffers, 0, timestamp); } public native TreeMap<Integer, ArrayList<Feature>> process(float[][] inputBuffers, - int offset, int n, + int offset, RealTime timestamp); public native TreeMap<Integer, ArrayList<Feature>>
--- a/org/vamp_plugins/PluginLoader.java Wed Nov 14 17:53:03 2012 +0000 +++ b/org/vamp_plugins/PluginLoader.java Wed Nov 14 18:10:40 2012 +0000 @@ -33,7 +33,7 @@ * their plugin keys (suitable for passing to loadPlugin) in the * order in which they were found. */ - public native ArrayList<String> listPlugins(); + public native String[] listPlugins(); /** * Load a native Vamp plugin from the plugin path. If the plugin @@ -63,7 +63,7 @@ * If the plugin has no category information, return an empty * list. */ - public native ArrayList<String> getPluginCategory(String key); + public native String[] getPluginCategory(String key); private PluginLoader() { initialise(); } private native long loadPluginNative(String key, float inputSampleRate);
--- a/src/Plugin.cpp Wed Nov 14 17:53:03 2012 +0000 +++ b/src/Plugin.cpp Wed Nov 14 18:10:40 2012 +0000 @@ -330,17 +330,19 @@ } jobject -Java_org_vamp_1plugins_Plugin_process(JNIEnv *env, jobject obj, jobjectArray data, jobject timestamp) +Java_org_vamp_1plugins_Plugin_process(JNIEnv *env, jobject obj, jobjectArray data, jint offset, jobject timestamp) { Plugin *p = getHandle<Plugin>(env, obj); const Vamp::RealTime *const rt = getHandle<Vamp::RealTime>(env, timestamp); int channels = env->GetArrayLength(data); + float **arr = new float *[channels]; 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); + arr[c] = env->GetFloatArrayElements(cdata, 0); + input[c] = arr[c] + offset; } Plugin::FeatureSet features = p->process(input, *rt); @@ -351,6 +353,7 @@ } delete[] input; + delete[] arr; return convertFeatures(env, features); }
--- a/src/PluginLoader.cpp Wed Nov 14 17:53:03 2012 +0000 +++ b/src/PluginLoader.cpp Wed Nov 14 18:10:40 2012 +0000 @@ -39,8 +39,22 @@ return (jlong)p; } +jobjectArray +Java_org_vamp_1plugins_PluginLoader_getPluginCategory(JNIEnv *env, jobject obj, + jstring key) +{ + PluginLoader *inst = getHandle<PluginLoader>(env, obj); + const char *kstr = env->GetStringUTFChars(key, 0); + PluginLoader::PluginCategoryHierarchy cat = inst->getPluginCategory(kstr); + jobjectArray result = env->NewObjectArray + (cat.size(), env->FindClass("java/lang/String"), 0); + for (int i = 0; i < cat.size(); ++i) { + env->SetObjectArrayElement(result, i, + env->NewStringUTF(cat[i].c_str())); + } + return result; +} //!!! todo: loadPlugin adapters -//!!! todo: getPluginCategory
--- a/src/org_vamp_plugins_Plugin.h Wed Nov 14 17:53:03 2012 +0000 +++ b/src/org_vamp_plugins_Plugin.h Wed Nov 14 18:10:40 2012 +0000 @@ -189,7 +189,7 @@ * Signature: ([[FLorg/vamp_plugins/RealTime;)Ljava/util/TreeMap; */ JNIEXPORT jobject JNICALL Java_org_vamp_1plugins_Plugin_process - (JNIEnv *, jobject, jobjectArray, jobject); + (JNIEnv *, jobject, jobjectArray, jint, jobject); /* * Class: org_vamp_plugins_Plugin
--- a/src/org_vamp_plugins_PluginLoader.h Wed Nov 14 17:53:03 2012 +0000 +++ b/src/org_vamp_plugins_PluginLoader.h Wed Nov 14 18:10:40 2012 +0000 @@ -7,22 +7,19 @@ #ifdef __cplusplus extern "C" { #endif -/* - * Class: org_vamp_plugins_PluginLoader - * Method: loadPluginNative - * Signature: (Ljava/lang/String;F)J - */ + JNIEXPORT jlong JNICALL Java_org_vamp_1plugins_PluginLoader_loadPluginNative (JNIEnv *, jobject, jstring, jfloat); -/* - * Class: org_vamp_plugins_PluginLoader - * Method: initialise - * Signature: ()V - */ +JNIEXPORT jobjectArray JNICALL Java_org_vamp_1plugins_PluginLoader_listPlugins +(JNIEnv *, jobject); + JNIEXPORT void JNICALL Java_org_vamp_1plugins_PluginLoader_initialise (JNIEnv *, jobject); +JNIEXPORT jobjectArray JNICALL Java_org_vamp_1plugins_PluginLoader_getPluginCategory +(JNIEnv *, jobject, jstring); + #ifdef __cplusplus } #endif
--- a/test/test.java Wed Nov 14 17:53:03 2012 +0000 +++ b/test/test.java Wed Nov 14 18:10:40 2012 +0000 @@ -38,8 +38,21 @@ PluginLoader loader = PluginLoader.getInstance(); + String[] plugins = loader.listPlugins(); + System.out.println("We know " + plugins.length + " plugins"); + for (int i = 0; i < plugins.length; ++i) { + System.out.println(i + ": " + plugins[i]); + } + try { Plugin p = loader.loadPlugin(key, 44100); + String[] cat = loader.getPluginCategory(key); + System.out.print("category: "); + for (int i = 0; i < cat.length; ++i) { + System.out.print(cat[i]); + if (i+1 < cat.length) System.out.print(" > "); + } + System.out.println(""); System.out.println("identifier: " + p.getIdentifier()); System.out.println("name: " + p.getName()); System.out.println("description: " + p.getDescription());