Mercurial > hg > jvamp
comparison src/Plugin.cpp @ 49:2db3640905ef
Rewrite RealTime so as not to use a native object handle, removing onerous and unsatisfactory requirement to call dispose() on all RealTime objects or leak native heap
author | Chris Cannam |
---|---|
date | Wed, 02 Sep 2015 15:17:40 +0100 |
parents | 91259f3449ae |
children |
comparison
equal
deleted
inserted
replaced
48:bac96f9d9295 | 49:2db3640905ef |
---|---|
370 JNIEXPORT jobject JNICALL | 370 JNIEXPORT jobject JNICALL |
371 Java_org_vamp_1plugins_Plugin_process(JNIEnv *env, jobject obj, jobjectArray data, jint offset, jobject timestamp) | 371 Java_org_vamp_1plugins_Plugin_process(JNIEnv *env, jobject obj, jobjectArray data, jint offset, jobject timestamp) |
372 { | 372 { |
373 Plugin *p = getHandle<Plugin>(env, obj); | 373 Plugin *p = getHandle<Plugin>(env, obj); |
374 | 374 |
375 const Vamp::RealTime *const rt = getHandle<Vamp::RealTime>(env, timestamp); | 375 Vamp::RealTime rt = getRealTime(env, timestamp); |
376 | 376 |
377 int channels = env->GetArrayLength(data); | 377 int channels = env->GetArrayLength(data); |
378 float **arr = new float *[channels]; | 378 float **arr = new float *[channels]; |
379 float **input = new float *[channels]; | 379 float **input = new float *[channels]; |
380 for (int c = 0; c < channels; ++c) { | 380 for (int c = 0; c < channels; ++c) { |
381 jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(data, c); | 381 jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(data, c); |
382 arr[c] = env->GetFloatArrayElements(cdata, 0); | 382 arr[c] = env->GetFloatArrayElements(cdata, 0); |
383 input[c] = arr[c] + offset; | 383 input[c] = arr[c] + offset; |
384 } | 384 } |
385 | 385 |
386 Plugin::FeatureSet features = p->process(input, *rt); | 386 Plugin::FeatureSet features = p->process(input, rt); |
387 | 387 |
388 for (int c = 0; c < channels; ++c) { | 388 for (int c = 0; c < channels; ++c) { |
389 jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(data, c); | 389 jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(data, c); |
390 env->ReleaseFloatArrayElements(cdata, input[c], 0); | 390 env->ReleaseFloatArrayElements(cdata, input[c], 0); |
391 } | 391 } |