From 19acd62acbab1493e6408ec77a8ebcc429b1c2e5 Mon Sep 17 00:00:00 2001 From: Jaeyun Date: Wed, 10 Jun 2020 18:08:33 +0900 Subject: [PATCH] [Android] constructor with info In tensors-data class, update private constructor with tensor-info. This can remove method call to set metadata in native. Signed-off-by: Jaeyun --- .../main/java/org/nnsuite/nnstreamer/TensorsData.java | 8 ++++---- api/android/api/src/main/jni/nnstreamer-native-api.c | 17 +++++++---------- api/android/api/src/main/jni/nnstreamer-native.h | 1 - 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/api/android/api/src/main/java/org/nnsuite/nnstreamer/TensorsData.java b/api/android/api/src/main/java/org/nnsuite/nnstreamer/TensorsData.java index 454243d..9f081f1 100644 --- a/api/android/api/src/main/java/org/nnsuite/nnstreamer/TensorsData.java +++ b/api/android/api/src/main/java/org/nnsuite/nnstreamer/TensorsData.java @@ -59,11 +59,9 @@ public final class TensorsData implements AutoCloseable { throw new IllegalArgumentException("Given info is invalid"); } - TensorsData data = new TensorsData(); + TensorsData data = new TensorsData(info); int count = info.getTensorsCount(); - data.setTensorsInfo(info); - for (int i = 0; i < count; i++) { data.addTensorData(allocateByteBuffer(info.getTensorSize(i))); } @@ -236,5 +234,7 @@ public final class TensorsData implements AutoCloseable { /** * Private constructor to prevent the instantiation. */ - private TensorsData() {} + private TensorsData(TensorsInfo info) { + setTensorsInfo(info); + } } diff --git a/api/android/api/src/main/jni/nnstreamer-native-api.c b/api/android/api/src/main/jni/nnstreamer-native-api.c index 5497d12..7b821a5 100644 --- a/api/android/api/src/main/jni/nnstreamer-native-api.c +++ b/api/android/api/src/main/jni/nnstreamer-native-api.c @@ -159,13 +159,12 @@ nns_construct_tdata_class_info (JNIEnv * env, data_class_info_s * info) info->cls = (*env)->NewGlobalRef (env, cls); (*env)->DeleteLocalRef (env, cls); - info->mid_init = (*env)->GetMethodID (env, info->cls, "", "()V"); + info->mid_init = (*env)->GetMethodID (env, info->cls, "", + "(L" NNS_CLS_TINFO ";)V"); info->mid_add_data = (*env)->GetMethodID (env, info->cls, "addTensorData", "([B)V"); info->mid_get_array = (*env)->GetMethodID (env, info->cls, "getDataArray", "()[Ljava/lang/Object;"); - info->mid_set_info = (*env)->GetMethodID (env, info->cls, "setTensorsInfo", - "(L" NNS_CLS_TINFO ";)V"); info->mid_get_info = (*env)->GetMethodID (env, info->cls, "getTensorsInfo", "()L" NNS_CLS_TINFO ";"); } @@ -398,21 +397,19 @@ nns_convert_tensors_data (pipeline_info_s * pipe_info, JNIEnv * env, g_return_val_if_fail (env, FALSE); g_return_val_if_fail (data_h, FALSE); g_return_val_if_fail (result, FALSE); + g_return_val_if_fail (obj_info, FALSE); dcls_info = &pipe_info->data_cls_info; data = (ml_tensors_data_s *) data_h; - obj_data = (*env)->NewObject (env, dcls_info->cls, dcls_info->mid_init); - if (!obj_data) { + obj_data = (*env)->NewObject (env, dcls_info->cls, dcls_info->mid_init, + obj_info); + if ((*env)->ExceptionCheck (env) || !obj_data) { nns_loge ("Failed to allocate object for tensors data."); + (*env)->ExceptionClear (env); goto done; } - /* set tensors info */ - if (obj_info) { - (*env)->CallVoidMethod (env, obj_data, dcls_info->mid_set_info, obj_info); - } - for (i = 0; i < data->num_tensors; i++) { jsize buffer_size = (jsize) data->tensors[i].size; jbyteArray buffer = (*env)->NewByteArray (env, buffer_size); diff --git a/api/android/api/src/main/jni/nnstreamer-native.h b/api/android/api/src/main/jni/nnstreamer-native.h index bfaac04..bbe7e86 100644 --- a/api/android/api/src/main/jni/nnstreamer-native.h +++ b/api/android/api/src/main/jni/nnstreamer-native.h @@ -94,7 +94,6 @@ typedef struct jmethodID mid_init; jmethodID mid_add_data; jmethodID mid_get_array; - jmethodID mid_set_info; jmethodID mid_get_info; } data_class_info_s; -- 2.7.4