changeset 0:f718b0961713

First draft -- can load a plugin and print its name & description
author Chris Cannam
date Fri, 13 Jan 2012 14:08:01 +0000
parents
children ed1972408c28
files Makefile org/vamp_plugins/Plugin.java org/vamp_plugins/PluginLoader.java org/vamp_plugins/test.java src/handle.h src/org_vamp_plugins_Plugin.cpp src/org_vamp_plugins_Plugin.h src/org_vamp_plugins_PluginLoader.cpp src/org_vamp_plugins_PluginLoader.h src/org_vamp_plugins_PluginLoader_LoadFailedException.h src/sample.h
diffstat 11 files changed, 335 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,10 @@
+
+LIBRARY := libvamp-jni.so
+OBJFILES := src/org_vamp_plugins_PluginLoader.o src/org_vamp_plugins_Plugin.o
+INCLUDES := -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
+CXXFLAGS := $(INCLUDES)
+
+all:	$(LIBRARY)
+
+$(LIBRARY): $(OBJFILES)
+	$(CXX) -shared -o $@ $^ -lvamp-hostsdk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org/vamp_plugins/Plugin.java	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,14 @@
+
+package org.vamp_plugins;
+
+public class Plugin
+{
+    private long nativeHandle;
+    protected Plugin(long handle) { nativeHandle = handle; }
+
+    public native String getIdentifier();
+    public native String getName();
+    public native String getDescription();
+    public native int getPluginVersion();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org/vamp_plugins/PluginLoader.java	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,33 @@
+
+package org.vamp_plugins;
+
+public class PluginLoader
+{
+    public class LoadFailedException extends Exception { };
+
+    public static synchronized PluginLoader getInstance() {
+	if (inst == null) {
+	    inst = new PluginLoader();
+	    inst.initialise();
+	}
+	return inst;
+    }
+
+    public Plugin loadPlugin(String key, float inputSampleRate)
+	throws LoadFailedException {
+	long handle = loadPluginNative(key, inputSampleRate);
+	if (handle != 0) return new Plugin(handle);
+	else throw new LoadFailedException();
+    }
+
+    private PluginLoader() { initialise(); }
+    private native long loadPluginNative(String key, float inputSampleRate);
+    private native void initialise();
+    private static PluginLoader inst;
+    private long nativeHandle;
+
+    static {
+	System.loadLibrary("vamp-jni");
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org/vamp_plugins/test.java	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,24 @@
+
+package org.vamp_plugins;
+
+public class test
+{
+    public static void main(String[] args) {
+	
+	// This is a plugin we know we have installed
+	String key = "vamp-example-plugins:percussiononsets";
+
+	PluginLoader loader = PluginLoader.getInstance();
+	
+	try {
+	    Plugin p = loader.loadPlugin(key, 44100);
+	    System.out.println("identifier: " + p.getIdentifier() + "; " +
+			       "name: " + p.getName() + "; " + 
+			       "description: " + p.getDescription() + "; " +
+			       "version: " + p.getPluginVersion());
+	} catch (PluginLoader.LoadFailedException e) {
+	    System.out.println("Plugin load failed");
+	}
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/handle.h	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,25 @@
+
+#ifndef _HANDLE_H_INCLUDED_
+#define _HANDLE_H_INCLUDED_
+
+inline jfieldID getHandleField(JNIEnv *env, jobject obj)
+{
+    jclass c = env->GetObjectClass(obj);
+    return env->GetFieldID(c, "nativeHandle", "J");
+}
+
+template <typename T>
+T *getHandle(JNIEnv *env, jobject obj)
+{
+    jlong handle = env->GetLongField(obj, getHandleField(env, obj));
+    return reinterpret_cast<T *>(handle);
+}
+
+template <typename T>
+void setHandle(JNIEnv *env, jobject obj, T *t)
+{
+    jlong handle = reinterpret_cast<jlong>(t);
+    env->SetLongField(obj, getHandleField(env, obj), handle);
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org_vamp_plugins_Plugin.cpp	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,37 @@
+#include "org_vamp_plugins_Plugin.h"
+
+#include <vamp-hostsdk/Plugin.h>
+
+#include "handle.h"
+
+using Vamp::Plugin;
+using std::string;
+
+jstring
+Java_org_vamp_1plugins_Plugin_getIdentifier(JNIEnv *env, jobject obj)
+{
+    Plugin *p = getHandle<Plugin>(env, obj);
+    return env->NewStringUTF(p->getIdentifier().c_str());
+}
+
+jstring
+Java_org_vamp_1plugins_Plugin_getName(JNIEnv *env, jobject obj)
+{
+    Plugin *p = getHandle<Plugin>(env, obj);
+    return env->NewStringUTF(p->getName().c_str());
+}
+
+jstring
+Java_org_vamp_1plugins_Plugin_getDescription(JNIEnv *env, jobject obj)
+{
+    Plugin *p = getHandle<Plugin>(env, obj);
+    return env->NewStringUTF(p->getDescription().c_str());
+}
+
+jint
+Java_org_vamp_1plugins_Plugin_getPluginVersion(JNIEnv *env, jobject obj)
+{
+    Plugin *p = getHandle<Plugin>(env, obj);
+    return p->getPluginVersion();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org_vamp_plugins_Plugin.h	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,45 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_vamp_plugins_Plugin */
+
+#ifndef _Included_org_vamp_plugins_Plugin
+#define _Included_org_vamp_plugins_Plugin
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_vamp_plugins_Plugin
+ * Method:    getIdentifier
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_vamp_1plugins_Plugin_getIdentifier
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_vamp_plugins_Plugin
+ * Method:    getName
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_vamp_1plugins_Plugin_getName
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_vamp_plugins_Plugin
+ * Method:    getDescription
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_vamp_1plugins_Plugin_getDescription
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_vamp_plugins_Plugin
+ * Method:    getPluginVersion
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_vamp_1plugins_Plugin_getPluginVersion
+  (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org_vamp_plugins_PluginLoader.cpp	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,29 @@
+#include "org_vamp_plugins_PluginLoader.h"
+
+#include <vamp-hostsdk/PluginLoader.h>
+
+#include "handle.h"
+
+using Vamp::Plugin;
+using Vamp::HostExt::PluginLoader;
+
+void
+Java_org_vamp_1plugins_PluginLoader_initialise(JNIEnv *env, jobject obj)
+{
+    PluginLoader *inst = PluginLoader::getInstance();
+    setHandle(env, obj, inst);
+}
+
+jlong
+Java_org_vamp_1plugins_PluginLoader_loadPluginNative(JNIEnv *env, jobject obj,
+						     jstring key, jfloat rate)
+{
+    PluginLoader *inst = getHandle<PluginLoader>(env, obj);
+    const char *kstr = env->GetStringUTFChars(key, 0);
+    Plugin *p = inst->loadPlugin(kstr, rate);
+    env->ReleaseStringUTFChars(key, kstr);
+    return (jlong)p;
+}
+
+
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org_vamp_plugins_PluginLoader.h	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,29 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_vamp_plugins_PluginLoader */
+
+#ifndef _Included_org_vamp_plugins_PluginLoader
+#define _Included_org_vamp_plugins_PluginLoader
+#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 void JNICALL Java_org_vamp_1plugins_PluginLoader_initialise
+  (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org_vamp_plugins_PluginLoader_LoadFailedException.h	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,17 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_vamp_plugins_PluginLoader_LoadFailedException */
+
+#ifndef _Included_org_vamp_plugins_PluginLoader_LoadFailedException
+#define _Included_org_vamp_plugins_PluginLoader_LoadFailedException
+#ifdef __cplusplus
+extern "C" {
+#endif
+#undef org_vamp_plugins_PluginLoader_LoadFailedException_serialVersionUID
+#define org_vamp_plugins_PluginLoader_LoadFailedException_serialVersionUID -3042686055658047285LL
+#undef org_vamp_plugins_PluginLoader_LoadFailedException_serialVersionUID
+#define org_vamp_plugins_PluginLoader_LoadFailedException_serialVersionUID -3387516993124229948LL
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/sample.h	Fri Jan 13 14:08:01 2012 +0000
@@ -0,0 +1,72 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_vamp_plugins_Plugin */
+
+#ifndef _Included_org_vamp_plugins_Plugin
+#define _Included_org_vamp_plugins_Plugin
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_vamp_plugins_Plugin
+ * Method:    getIdentifier
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_vamp_1plugins_Plugin_getIdentifier
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_vamp_plugins_Plugin
+ * Method:    getName
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_vamp_1plugins_Plugin_getName
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_vamp_plugins_Plugin
+ * Method:    getDescription
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_vamp_1plugins_Plugin_getDescription
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_vamp_plugins_Plugin
+ * Method:    getPluginVersion
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_vamp_1plugins_Plugin_getPluginVersion
+  (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+/* Header for class org_vamp_plugins_PluginLoader */
+
+#ifndef _Included_org_vamp_plugins_PluginLoader
+#define _Included_org_vamp_plugins_PluginLoader
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_vamp_plugins_PluginLoader
+ * Method:    loadPlugin
+ * Signature: (Ljava/lang/String;F)Lorg/vamp_plugins/Plugin;
+ */
+JNIEXPORT jobject JNICALL Java_org_vamp_1plugins_PluginLoader_loadPlugin
+  (JNIEnv *, jobject, jstring, jfloat);
+
+/*
+ * Class:     org_vamp_plugins_PluginLoader
+ * Method:    initialise
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_vamp_1plugins_PluginLoader_initialise
+  (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif