[Converter] incoming data format
authorJaeyun Jung <jy1210.jung@samsung.com>
Tue, 29 Aug 2023 06:52:02 +0000 (15:52 +0900)
committerSangjung Woo <again4you@gmail.com>
Thu, 7 Sep 2023 09:23:32 +0000 (18:23 +0900)
Update tensor dimension of incoming data, 0-init.
 - video : [ch][w][h][frames]
 - audio : [ch][samples]
 - text : [size][samples]
 - octet/tensor : [size]

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
gst/nnstreamer/elements/gsttensor_converter.c
tests/nnstreamer_plugins/unittest_plugins.cc
tests/nnstreamer_sink/unittest_sink.cc

index 79d51d6..c142cfc 100644 (file)
@@ -1497,9 +1497,9 @@ gst_tensor_converter_parse_video (GstTensorConverter * self,
   config->info.info[0].dimension[2] = height;
 
   /* Supposed 1 frame in tensor, change dimension[3] if tensor contains N frames. */
-  for (i = 3; i < NNS_TENSOR_RANK_LIMIT; i++) {
-    config->info.info[0].dimension[i] = 1;
-  }
+  config->info.info[0].dimension[3] = 1;
+  for (i = 4; i < NNS_TENSOR_RANK_LIMIT; i++)
+    config->info.info[0].dimension[i] = 0;
 
   config->rate_n = GST_VIDEO_INFO_FPS_N (&vinfo);
   config->rate_d = GST_VIDEO_INFO_FPS_D (&vinfo);
@@ -1600,9 +1600,9 @@ gst_tensor_converter_parse_audio (GstTensorConverter * self,
   config->info.info[0].dimension[0] = channels;
 
   /* Supposed 1 frame in tensor, change dimension[1] if tensor contains N frames. */
-  for (i = 1; i < NNS_TENSOR_RANK_LIMIT; i++) {
-    config->info.info[0].dimension[i] = 1;
-  }
+  config->info.info[0].dimension[1] = 1;
+  for (i = 2; i < NNS_TENSOR_RANK_LIMIT; i++)
+    config->info.info[0].dimension[i] = 0;
 
   config->rate_n = GST_AUDIO_INFO_RATE (&ainfo);
   config->rate_d = 1;
@@ -1665,9 +1665,9 @@ gst_tensor_converter_parse_text (GstTensorConverter * self,
   config->info.info[0].dimension[0] = text_size;
 
   /* Supposed 1 frame in tensor, change dimension[1] if tensor contains N frames. */
-  for (i = 1; i < NNS_TENSOR_RANK_LIMIT; i++) {
-    config->info.info[0].dimension[i] = 1;
-  }
+  config->info.info[0].dimension[1] = 1;
+  for (i = 2; i < NNS_TENSOR_RANK_LIMIT; i++)
+    config->info.info[0].dimension[i] = 0;
 
   if (gst_structure_has_field (structure, "framerate")) {
     gst_structure_get_fraction (structure, "framerate", &config->rate_n,
@@ -1757,14 +1757,16 @@ gst_tensor_converter_parse_octet (GstTensorConverter * self,
    * We cannot get the exact tensors info from caps.
    * All tensors info should be updated.
    * If output is flexible, dimension should be updated in chain function with buffer size.
+   * (data format for tensor: [size])
    */
   if (flexible) {
     config->info.format = _NNS_TENSOR_FORMAT_FLEXIBLE;
 
     config->info.num_tensors = 1;
     config->info.info[0].type = _NNS_UINT8;
-    for (i = 0; i < NNS_TENSOR_RANK_LIMIT; i++)
-      config->info.info[0].dimension[i] = 1;
+    config->info.info[0].dimension[0] = 1;
+    for (i = 1; i < NNS_TENSOR_RANK_LIMIT; i++)
+      config->info.info[0].dimension[i] = 0;
   } else {
     gst_tensors_info_copy (&config->info, _info);
     self->frame_size = gst_tensors_info_get_size (&config->info, -1);
@@ -1808,11 +1810,13 @@ gst_tensor_converter_parse_tensor (GstTensorConverter * self,
     /**
      * We cannot get the exact tensors info from caps.
      * All tensors info should be updated in chain function.
+     * (data format for tensor: [size])
      */
     config->info.num_tensors = 1;
     config->info.info[0].type = _NNS_UINT8;
-    for (i = 0; i < NNS_TENSOR_RANK_LIMIT; i++)
-      config->info.info[0].dimension[i] = 1;
+    config->info.info[0].dimension[0] = 1;
+    for (i = 1; i < NNS_TENSOR_RANK_LIMIT; i++)
+      config->info.info[0].dimension[i] = 0;
   }
 
   if (gst_structure_has_field (structure, "framerate")) {
index f68423c..04ad0dd 100644 (file)
@@ -3422,7 +3422,7 @@ TEST (testTensorConverter, bytesToFlex)
 
     EXPECT_EQ (meta.type, _NNS_UINT8);
     EXPECT_EQ (meta.dimension[0], data_size);
-    EXPECT_EQ (meta.dimension[1], 1U);
+    EXPECT_LE (meta.dimension[1], 1U);
     EXPECT_EQ ((media_type) meta.media_type, _NNS_OCTET);
 
     data_size = gst_tensor_meta_info_get_header_size (&meta);
index 25ba240..94a77a3 100644 (file)
@@ -2575,7 +2575,6 @@ TEST (tensorStreamTest, videoGray83fPadding)
   _free_test_data (option);
 }
 
-
 /**
  * @brief Test for video format GRAY16_BE.
  */
@@ -2690,8 +2689,8 @@ TEST (tensorStreamTest, audioS8)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_INT8);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 500U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 16000);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -2731,8 +2730,8 @@ TEST (tensorStreamTest, audioU8100f)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_UINT8);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 100U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 16000);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -2772,8 +2771,8 @@ TEST (tensorStreamTest, audioS16)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_INT16);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 500U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 16000);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -2813,8 +2812,8 @@ TEST (tensorStreamTest, audioU161000f)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_UINT16);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 1000U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 16000);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -2854,8 +2853,8 @@ TEST (tensorStreamTest, audioS32)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_INT32);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 500U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 44100);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -2895,8 +2894,8 @@ TEST (tensorStreamTest, audioU32)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_UINT32);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 500U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 44100);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -2936,8 +2935,8 @@ TEST (tensorStreamTest, audioF32)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_FLOAT32);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 500U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 44100);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -2977,8 +2976,8 @@ TEST (tensorStreamTest, audioF64)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_FLOAT64);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 500U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 44100);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -3024,8 +3023,8 @@ TEST (tensorStreamTest, textUtf8)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_UINT8);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 20U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 0);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -3098,8 +3097,8 @@ TEST (tensorStreamTest, textUtf83f)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_UINT8);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 30U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 3U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 10);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -4268,8 +4267,8 @@ TEST (tensorStreamTest, customFilterDropBuffer)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_INT16);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 200U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 16000);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -4763,8 +4762,8 @@ TEST (tensorStreamTest, tensorsMix)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_INT16);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 500U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 30); /** 30 fps from video stream */
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -4905,8 +4904,8 @@ TEST (tensorStreamTest, demuxProperties2)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_INT16);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 500U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 30);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -4979,8 +4978,8 @@ _test_transform_typecast (TestType test, tensor_type type, guint buffers)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, type);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 10U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 0);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -5443,8 +5442,8 @@ TEST (tensorStreamTest, audioAggregateS16)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_INT16);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 2000U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 16000);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);
 
@@ -5484,8 +5483,8 @@ TEST (tensorStreamTest, audioAggregateU16)
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].type, _NNS_UINT16);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[0], 1U);
   EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[1], 100U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
-  EXPECT_EQ (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[2], 1U);
+  EXPECT_LE (g_test_data.tensors_config.info.info[0].dimension[3], 1U);
   EXPECT_EQ (g_test_data.tensors_config.rate_n, 16000);
   EXPECT_EQ (g_test_data.tensors_config.rate_d, 1);