[Android] constructor with info
authorJaeyun <jy1210.jung@samsung.com>
Wed, 10 Jun 2020 09:08:33 +0000 (18:08 +0900)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Mon, 15 Jun 2020 10:26:12 +0000 (19:26 +0900)
In tensors-data class, update private constructor with tensor-info.
This can remove method call to set metadata in native.

Signed-off-by: Jaeyun <jy1210.jung@samsung.com>
api/android/api/src/main/java/org/nnsuite/nnstreamer/TensorsData.java
api/android/api/src/main/jni/nnstreamer-native-api.c
api/android/api/src/main/jni/nnstreamer-native.h

index 454243d..9f081f1 100644 (file)
@@ -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);
+    }
 }
index 5497d12..7b821a5 100644 (file)
@@ -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, "<init>", "()V");
+  info->mid_init = (*env)->GetMethodID (env, info->cls, "<init>",
+      "(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);
index bfaac04..bbe7e86 100644 (file)
@@ -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;