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