[Test] length of dims
authorJaeyun Jung <jy1210.jung@samsung.com>
Fri, 1 Sep 2023 01:49:17 +0000 (10:49 +0900)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Tue, 5 Sep 2023 11:30:23 +0000 (20:30 +0900)
1. Get the length of dimension, not constant.
2. Init dim as 0 in some testcase.

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
tests/cpp_methods/cppfilter_test.cc
tests/nnstreamer_example/custom_example_LSTM/dummy_LSTM.c
tests/nnstreamer_example/custom_example_RNN/dummy_RNN.c
tests/nnstreamer_example/custom_example_passthrough/nnstreamer_customfilter_example_passthrough.c
tests/nnstreamer_example/meson.build
tests/nnstreamer_if/unittest_if.cc
tests/test_models/models/custom_converter.py
tests/test_models/models/custom_decoder.py
tools/development/nnstreamerCodeGenCustomFilter.py

index 4410f5a..492bad6 100644 (file)
@@ -7,6 +7,7 @@
  * @bug         No known bugs
  */
 #include "cppfilter_test.hh"
+#include <nnstreamer_plugin_api_util.h>
 #include <nnstreamer_util.h>
 
 /** @brief API method */
@@ -23,13 +24,14 @@ filter_basic::~filter_basic ()
 int
 filter_basic::getInputDim (GstTensorsInfo *info)
 {
+  gst_tensors_info_init (info);
+
   info->num_tensors = 1;
   info->info[0].type = _NNS_UINT8;
   info->info[0].dimension[0] = 3;
   info->info[0].dimension[1] = 4;
   info->info[0].dimension[2] = 4;
-  for (int i = 3; i < NNS_TENSOR_RANK_LIMIT; i++)
-    info->info[0].dimension[i] = 1;
+  info->info[0].dimension[3] = 1;
   return 0;
 }
 
@@ -37,14 +39,14 @@ filter_basic::getInputDim (GstTensorsInfo *info)
 int
 filter_basic::getOutputDim (GstTensorsInfo *info)
 {
+  gst_tensors_info_init (info);
+
   info->num_tensors = 1;
   info->info[0].type = _NNS_UINT8;
   info->info[0].dimension[0] = 3;
   info->info[0].dimension[1] = 4;
   info->info[0].dimension[2] = 4;
   info->info[0].dimension[3] = 2;
-  for (int i = 4; i < NNS_TENSOR_RANK_LIMIT; i++)
-    info->info[0].dimension[i] = 1;
   return 0;
 }
 
@@ -160,13 +162,14 @@ filter_basic2::~filter_basic2 ()
 int
 filter_basic2::getInputDim (GstTensorsInfo *info)
 {
+  gst_tensors_info_init (info);
+
   info->num_tensors = 1;
   info->info[0].type = _NNS_UINT8;
   info->info[0].dimension[0] = 3;
   info->info[0].dimension[1] = 16;
   info->info[0].dimension[2] = 16;
-  for (int i = 3; i < NNS_TENSOR_RANK_LIMIT; i++)
-    info->info[0].dimension[i] = 1;
+  info->info[0].dimension[3] = 1;
   return 0;
 }
 
@@ -174,14 +177,14 @@ filter_basic2::getInputDim (GstTensorsInfo *info)
 int
 filter_basic2::getOutputDim (GstTensorsInfo *info)
 {
+  gst_tensors_info_init (info);
+
   info->num_tensors = 1;
   info->info[0].type = _NNS_UINT8;
   info->info[0].dimension[0] = 3;
   info->info[0].dimension[1] = 16;
   info->info[0].dimension[2] = 16;
   info->info[0].dimension[3] = 2;
-  for (int i = 4; i < NNS_TENSOR_RANK_LIMIT; i++)
-    info->info[0].dimension[i] = 1;
   return 0;
 }
 
index f225fbe..c6fdec0 100644 (file)
@@ -20,6 +20,7 @@
 #include <errno.h>
 #include <math.h>
 #include <tensor_filter_custom.h>
+#include <nnstreamer_plugin_api_util.h>
 #include <nnstreamer_util.h>
 #include <glib.h>
 
@@ -42,7 +43,6 @@ static void *
 pt_init (const GstTensorFilterProperties * prop)
 {
   pt_data *data = (pt_data *) malloc (sizeof (pt_data));
-  int i;
   UNUSED (prop);
 
   assert (data);
@@ -50,11 +50,11 @@ pt_init (const GstTensorFilterProperties * prop)
 
   data->id = 0;
   data->counter = 0;
+  gst_tensor_info_init (&data->info[0]);
   data->info[0].dimension[0] = TSIZE;
   data->info[0].dimension[1] = TSIZE;
   data->info[0].dimension[2] = TSIZE;
-  for (i = 3; i < NNS_TENSOR_RANK_LIMIT; i++)
-    data->info[0].dimension[i] = 1;
+  data->info[0].dimension[3] = 1;
   data->info[0].type = _NNS_FLOAT32;
   data->info[1] = data->info[0];
   data->info[2] = data->info[0];
index 8a019a6..60185b8 100644 (file)
@@ -19,6 +19,7 @@
 #include <string.h>
 #include <errno.h>
 #include <tensor_filter_custom.h>
+#include <nnstreamer_plugin_api_util.h>
 #include <nnstreamer_util.h>
 
 #define TSIZE   (4)
@@ -40,7 +41,6 @@ static void *
 pt_init (const GstTensorFilterProperties * prop)
 {
   pt_data *data = (pt_data *) malloc (sizeof (pt_data));
-  int i;
   UNUSED (prop);
 
   assert (data);
@@ -48,11 +48,11 @@ pt_init (const GstTensorFilterProperties * prop)
 
   data->id = 0;
   data->counter = 0;
+  gst_tensor_info_init (&data->info[0]);
   data->info[0].dimension[0] = TSIZE;
   data->info[0].dimension[1] = TSIZE;
   data->info[0].dimension[2] = TSIZE;
-  for (i = 3; i < NNS_TENSOR_RANK_LIMIT; i++)
-    data->info[0].dimension[i] = 1;
+  data->info[0].dimension[3] = 1;
   data->info[0].type = _NNS_UINT8;
   data->info[1] = data->info[0];
 
index 5279d1d..59a9e3f 100644 (file)
 #define D2     (280)
 #define D3     (40)
 #define D4     (1)
-#define D5     (1)
-#define D6     (1)
-#define D7     (1)
-#define D8     (1)
 
 /**
  * @brief _pt_data
@@ -52,14 +48,11 @@ pt_init (const GstTensorFilterProperties * prop)
   memset (data, 0, sizeof (pt_data));
 
   data->id = 0;
+  gst_tensor_info_init (&data->info);
   data->info.dimension[0] = D1;
   data->info.dimension[1] = D2;
   data->info.dimension[2] = D3;
   data->info.dimension[3] = D4;
-  data->info.dimension[4] = D5;
-  data->info.dimension[5] = D6;
-  data->info.dimension[6] = D7;
-  data->info.dimension[7] = D8;
   data->info.type = _NNS_UINT8;
 
   return data;
@@ -88,7 +81,7 @@ get_inputDim (void *private_data, const GstTensorFilterProperties * prop,
   UNUSED (prop);
 
   assert (data);
-  assert (NNS_TENSOR_RANK_LIMIT >= 7);
+  assert (NNS_TENSOR_RANK_LIMIT >= 3);
 
   info->num_tensors = 1;
   gst_tensor_info_copy (&info->info[0], &data->info);
@@ -106,7 +99,7 @@ get_outputDim (void *private_data, const GstTensorFilterProperties * prop,
   UNUSED (prop);
 
   assert (data);
-  assert (NNS_TENSOR_RANK_LIMIT >= 7);
+  assert (NNS_TENSOR_RANK_LIMIT >= 3);
 
   info->num_tensors = 1;
   gst_tensor_info_copy (&info->info[0], &data->info);
index a8b4db8..80fd10e 100644 (file)
@@ -64,6 +64,7 @@ endif
 # custom_example_RNN
 library('dummyRNN',
   join_paths('custom_example_RNN', 'dummy_RNN.c'),
+  dependencies: [glib_dep, nnstreamer_dep],
   include_directories: nnstreamer_inc,
   install: get_option('install-test'),
   install_dir: customfilter_install_dir
@@ -72,7 +73,7 @@ library('dummyRNN',
 # custom_example_LSTM
 library('dummyLSTM',
   join_paths('custom_example_LSTM', 'dummy_LSTM.c'),
-  dependencies: [libm_dep, glib_dep],
+  dependencies: [libm_dep, glib_dep, nnstreamer_dep],
   include_directories: nnstreamer_inc,
   install: get_option('install-test'),
   install_dir: customfilter_install_dir
index 5c4b197..dde2ec4 100644 (file)
@@ -81,7 +81,7 @@ TEST (tensorIfProp, properties0)
   pipeline = g_strdup_printf (
       "videotestsrc num-buffers=1 pattern=13 ! videoconvert ! videoscale ! "
       "video/x-raw,format=RGB,width=160,height=120 ! tensor_converter ! "
-      "tensor_if name=tif compared-value=A_VALUE compared-value-option=0:2:1:1,0 "
+      "tensor_if name=tif compared-value=A_VALUE compared-value-option=1:2:1:1,1 "
       "supplied-value=100 operator=GE then=PASSTHROUGH else=SKIP ! tensor_sink");
   gstpipe = gst_parse_launch (pipeline, NULL);
   EXPECT_NE (pipeline, nullptr);
@@ -99,7 +99,7 @@ TEST (tensorIfProp, properties0)
   EXPECT_EQ (TIFCV_A_VALUE, int_val);
 
   g_object_get (tif_handle, "compared-value-option", &str_val, NULL);
-  EXPECT_STREQ ("0:2:1:1:0:0:0:0,0", str_val);
+  EXPECT_TRUE (gst_tensor_dimension_string_is_equal ("1:2:1:1,1", str_val));
   g_free (str_val);
 
   g_object_get (tif_handle, "supplied-value", &str_val, NULL);
index 80b6d49..3aa7c11 100644 (file)
@@ -66,8 +66,8 @@ class CustomConverter(object):
             ttype = convert_to_numpy_type(tensor[1].AsInt)
             tdim = tensor[2].AsTypedVector
             dim = []
-            for j in range(4):
-                dim.append(tdim[j].AsInt)
+            for d in tdim:
+                dim.append(d.AsInt)
             tensors_info.append(nns.TensorShape(dim, ttype))
             raw_data.append(np.frombuffer(tensor[3].AsBlob, dtype=np.uint8))
 
index 3c8ec32..b106de6 100644 (file)
@@ -71,8 +71,8 @@ class CustomDecoder(object):
                     fbb.String("")
                     fbb.Int(ttype)
                     with fbb.TypedVector():
-                        for j in range(8):
-                            fbb.Int(dims[j])
+                        for d in dims:
+                            fbb.Int(d)
                     fbb.Blob(raw_data[i])
 
         data = bytes(fbb.Finish())
index 5b1bd91..5149d2b 100644 (file)
@@ -115,19 +115,14 @@ cg_getInputDim (void * _data, const GstTensorFilterProperties * prop,
   int i;
 
   assert (data);
+  gst_tensors_info_init (in_info);
   in_info->num_tensors = 1; /** @todo MODIFY THIS! */
   in_info->info[0].name = NULL; /** Optional, default is null. Set new memory for tensor name string. */
   in_info->info[0].type = _NNS_UINT8; /** @todo MODIFY THIS! */
   in_info->info[0].dimension[0] = 3; /** @todo MODIFY THIS! */
   in_info->info[0].dimension[1] = 224; /** @todo MODIFY THIS! */
   in_info->info[0].dimension[2] = 224; /** @todo MODIFY THIS! */
-
-  /**
-   * Check max dimension (NNS_TENSOR_RANK_LIMIT) and
-   * fill 1 to uninitialized dimension values.
-   */
-  for (i = 3; i < NNS_TENSOR_RANK_LIMIT; i++)
-    in_info->info[0].dimension[i] = 1;
+  in_info->info[0].dimension[3] = 1; /** @todo MODIFY THIS! */
 
   return 0;
 }}
@@ -153,19 +148,14 @@ cg_getOutputDim (void * _data, const GstTensorFilterProperties * prop,
   int i;
 
   assert (data);
+  gst_tensors_info_init (out_info);
   out_info->num_tensors = 1; /** @todo MODIFY THIS! */
   out_info->info[0].name = NULL; /** Optional, default is null. Set new memory for tensor name string. */
   out_info->info[0].type = _NNS_UINT8; /** @todo MODIFY THIS! */
   out_info->info[0].dimension[0] = 3; /** @todo MODIFY THIS! */
   out_info->info[0].dimension[1] = 224; /** @todo MODIFY THIS! */
   out_info->info[0].dimension[2] = 224; /** @todo MODIFY THIS! */
-
-  /**
-   * Check max dimension (NNS_TENSOR_RANK_LIMIT) and
-   * fill 1 to uninitialized dimension values.
-   */
-  for (i = 3; i < NNS_TENSOR_RANK_LIMIT; i++)
-    out_info->info[0].dimension[i] = 1;
+  out_info->info[0].dimension[3] = 1; /** @todo MODIFY THIS! */
 
   return 0;
 }}
@@ -204,6 +194,7 @@ cg_setInputDim (void * _data, const GstTensorFilterProperties *prop,
   assert (in_info);
   assert (out_info);
 
+  gst_tensors_info_init (out_info);
   out_info->num_tensors = in_info->num_tensors; /** @todo Configure the number of tensors in a output frame */
 
   /** @todo Configure the name/type/dimension of tensors in a output frame. */
@@ -245,9 +236,9 @@ cg_allocate_invoke (void * _data, const GstTensorFilterProperties * prop,
   int i;
 
   /** If you want to look at input dimension/type, refer to prop->input_meta */
-  const GstTensorsInfo * in_info __attribute__((unused)) = &prop->input_meta;
+  const GstTensorsInfo *in_info __attribute__((unused)) = &prop->input_meta;
   /** If you want to look at output dimension/type, refer to prop->output_meta */
-  const GstTensorsInfo * out_info = &prop->output_meta;
+  const GstTensorsInfo *out_info = &prop->output_meta;
 
   /** Allocate output buffer */
   for (i = 0; i < out_info->num_tensors; i++)
@@ -298,9 +289,9 @@ cg_invoke (void * _data, const GstTensorFilterProperties *prop,
   int i;
 
   /** If you want to look at input dimension/type, refer to prop->input_meta */
-  const GstTensorsInfo * in_info __attribute__((unused)) = &prop->input_meta;
+  const GstTensorsInfo *in_info __attribute__((unused)) = &prop->input_meta;
   /** If you want to look at output dimension/type, refer to prop->output_meta */
-  const GstTensorsInfo * out_info __attribute__((unused)) = &prop->output_meta;
+  const GstTensorsInfo *out_info __attribute__((unused)) = &prop->output_meta;
 
   /** @note Caller will allocate output buffer accornding to out_info. */