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());