# HG changeset patch # User Chris Cannam # Date 1352916640 0 # Node ID cd430fbf6795b0bdd63d86e6751a99a108e58dde # Parent cc9c503535d1df2489ec2642e53a5d9ed037e75c Add getPluginCategory, more sensible return values, fix process, call new functions to test diff -r cc9c503535d1 -r cd430fbf6795 org/vamp_plugins/Plugin.java --- 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> process(float[][] inputBuffers, RealTime timestamp) { - process(inputBuffers, 0, inputBuffers[0].length, timestamp); + return process(inputBuffers, 0, timestamp); } public native TreeMap> process(float[][] inputBuffers, - int offset, int n, + int offset, RealTime timestamp); public native TreeMap> diff -r cc9c503535d1 -r cd430fbf6795 org/vamp_plugins/PluginLoader.java --- 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 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 getPluginCategory(String key); + public native String[] getPluginCategory(String key); private PluginLoader() { initialise(); } private native long loadPluginNative(String key, float inputSampleRate); diff -r cc9c503535d1 -r cd430fbf6795 src/Plugin.cpp --- 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(env, obj); const Vamp::RealTime *const rt = getHandle(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); } diff -r cc9c503535d1 -r cd430fbf6795 src/PluginLoader.cpp --- 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(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 diff -r cc9c503535d1 -r cd430fbf6795 src/org_vamp_plugins_Plugin.h --- 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 diff -r cc9c503535d1 -r cd430fbf6795 src/org_vamp_plugins_PluginLoader.h --- 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 diff -r cc9c503535d1 -r cd430fbf6795 test/test.java --- 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());