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 }