[Common] magic number for flex-tensor
authorJaeyun Jung <jy1210.jung@samsung.com>
Tue, 27 Jun 2023 08:55:39 +0000 (17:55 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Wed, 28 Jun 2023 06:32:17 +0000 (15:32 +0900)
Add magic to tensor-meta, this indicates given memory block is flexible tensor.

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
gst/nnstreamer/include/tensor_typedef.h
gst/nnstreamer/nnstreamer_plugin_api_util_impl.c
tests/common/unittest_common.cc

index 1a87a72..b3b95e3 100644 (file)
@@ -288,6 +288,7 @@ typedef struct
  */
 typedef struct
 {
+  uint32_t magic;
   uint32_t version;
   uint32_t type;
   uint32_t dimension[NNS_TENSOR_META_RANK_LIMIT];
index 79aba8d..5d36c54 100644 (file)
@@ -1354,6 +1354,16 @@ gst_tensor_get_format_string (tensor_format format)
 }
 
 /**
+ * @brief Magic number of tensor meta.
+ */
+#define GST_TENSOR_META_MAGIC (0xfeedcced)
+
+/**
+ * @brief Macro to check the tensor meta.
+ */
+#define GST_TENSOR_META_MAGIC_VALID(m) ((m) == GST_TENSOR_META_MAGIC)
+
+/**
  * @brief Macro to check the meta version.
  */
 #define GST_TENSOR_META_VERSION_VALID(v) (((v) & 0xDE000000) == 0xDE000000)
@@ -1385,6 +1395,7 @@ gst_tensor_meta_info_init (GstTensorMetaInfo * meta)
   /* zero-init */
   memset (meta, 0, sizeof (GstTensorMetaInfo));
 
+  meta->magic = GST_TENSOR_META_MAGIC;
   meta->version = GST_TENSOR_META_VERSION;
   meta->type = _NNS_END;
   meta->format = _NNS_TENSOR_FORMAT_STATIC;
@@ -1402,6 +1413,7 @@ gst_tensor_meta_info_get_version (GstTensorMetaInfo * meta,
     guint * major, guint * minor)
 {
   g_return_if_fail (meta != NULL);
+  g_return_if_fail (GST_TENSOR_META_MAGIC_VALID (meta->magic));
   g_return_if_fail (GST_TENSOR_META_VERSION_VALID (meta->version));
 
   if (major)
@@ -1422,6 +1434,7 @@ gst_tensor_meta_info_validate (GstTensorMetaInfo * meta)
   guint i;
 
   g_return_val_if_fail (meta != NULL, FALSE);
+  g_return_val_if_fail (GST_TENSOR_META_MAGIC_VALID (meta->magic), FALSE);
   g_return_val_if_fail (GST_TENSOR_META_VERSION_VALID (meta->version), FALSE);
 
   if (meta->type >= _NNS_END) {
@@ -1467,6 +1480,7 @@ gsize
 gst_tensor_meta_info_get_header_size (GstTensorMetaInfo * meta)
 {
   g_return_val_if_fail (meta != NULL, 0);
+  g_return_val_if_fail (GST_TENSOR_META_MAGIC_VALID (meta->magic), 0);
   g_return_val_if_fail (GST_TENSOR_META_VERSION_VALID (meta->version), 0);
 
   /* return fixed size for meta version */
@@ -1489,6 +1503,7 @@ gst_tensor_meta_info_get_data_size (GstTensorMetaInfo * meta)
   gsize dsize;
 
   g_return_val_if_fail (meta != NULL, 0);
+  g_return_val_if_fail (GST_TENSOR_META_MAGIC_VALID (meta->magic), 0);
   g_return_val_if_fail (GST_TENSOR_META_VERSION_VALID (meta->version), 0);
 
   dsize = gst_tensor_get_element_size (meta->type);
@@ -1546,16 +1561,17 @@ gst_tensor_meta_info_parse_header (GstTensorMetaInfo * meta, gpointer header)
 
   gst_tensor_meta_info_init (meta);
 
-  meta->version = val[0];
-  meta->type = val[1];
-  memcpy (meta->dimension, &val[2],
+  meta->magic = val[0];
+  meta->version = val[1];
+  meta->type = val[2];
+  memcpy (meta->dimension, &val[3],
       sizeof (uint32_t) * NNS_TENSOR_META_RANK_LIMIT);
-  meta->format = val[18];
-  meta->media_type = val[19];
+  meta->format = val[19];
+  meta->media_type = val[20];
 
   switch ((tensor_format) meta->format) {
     case _NNS_TENSOR_FORMAT_SPARSE:
-      meta->sparse_info.nnz = val[20];
+      meta->sparse_info.nnz = val[21];
       break;
     default:
       break;
index 9087a61..94f42eb 100644 (file)
@@ -1336,15 +1336,29 @@ TEST (commonMetaInfo, headerSizeInvalidParam01_n)
 }
 
 /**
- * @brief Test for tensor meta info (header size with invalid meta).
+ * @brief Test for tensor meta info (header size with invalid magic).
  */
 TEST (commonMetaInfo, headerSizeInvalidParam02_n)
 {
-  GstTensorMetaInfo meta = {
-    0,
-  };
+  GstTensorMetaInfo meta;
+  gsize hsize;
+
+  gst_tensor_meta_info_init (&meta);
+  meta.magic = 0U;
+  hsize = gst_tensor_meta_info_get_header_size (&meta);
+  EXPECT_EQ (hsize, 0U);
+}
+
+/**
+ * @brief Test for tensor meta info (header size with invalid version).
+ */
+TEST (commonMetaInfo, headerSizeInvalidParam03_n)
+{
+  GstTensorMetaInfo meta;
   gsize hsize;
 
+  gst_tensor_meta_info_init (&meta);
+  meta.version = 0U;
   hsize = gst_tensor_meta_info_get_header_size (&meta);
   EXPECT_EQ (hsize, 0U);
 }
@@ -1361,15 +1375,29 @@ TEST (commonMetaInfo, dataSizeInvalidParam01_n)
 }
 
 /**
- * @brief Test for tensor meta info (data size with invalid meta).
+ * @brief Test for tensor meta info (data size with invalid magic).
  */
 TEST (commonMetaInfo, dataSizeInvalidParam02_n)
 {
-  GstTensorMetaInfo meta = {
-    0,
-  };
+  GstTensorMetaInfo meta;
+  gsize dsize;
+
+  gst_tensor_meta_info_init (&meta);
+  meta.magic = 0U;
+  dsize = gst_tensor_meta_info_get_data_size (&meta);
+  EXPECT_EQ (dsize, 0U);
+}
+
+/**
+ * @brief Test for tensor meta info (data size with invalid version).
+ */
+TEST (commonMetaInfo, dataSizeInvalidParam03_n)
+{
+  GstTensorMetaInfo meta;
   gsize dsize;
 
+  gst_tensor_meta_info_init (&meta);
+  meta.version = 0U;
   dsize = gst_tensor_meta_info_get_data_size (&meta);
   EXPECT_EQ (dsize, 0U);
 }
@@ -1386,18 +1414,40 @@ TEST (commonMetaInfo, validateInvalidParam01_n)
 }
 
 /**
- * @brief Test for tensor meta info (validate meta with invalid meta).
+ * @brief Test for tensor meta info (validate meta with invalid magic).
  */
 TEST (commonMetaInfo, validateInvalidParam02_n)
 {
-  GstTensorMetaInfo meta = {
-    0,
-  };
+  GstTensorMetaInfo meta;
+  gboolean valid;
+
+  gst_tensor_meta_info_init (&meta);
+  meta.magic = 0U;
+  valid = gst_tensor_meta_info_validate (&meta);
+  EXPECT_FALSE (valid);
+}
+
+/**
+ * @brief Test for tensor meta info (validate meta with invalid version).
+ */
+TEST (commonMetaInfo, validateInvalidParam03_n)
+{
+  GstTensorMetaInfo meta;
   gboolean valid;
 
-  /* invalid version */
+  gst_tensor_meta_info_init (&meta);
+  meta.version = 0U;
   valid = gst_tensor_meta_info_validate (&meta);
   EXPECT_FALSE (valid);
+}
+
+/**
+ * @brief Test for tensor meta info (validate meta with invalid meta).
+ */
+TEST (commonMetaInfo, validateInvalidParam04_n)
+{
+  GstTensorMetaInfo meta;
+  gboolean valid;
 
   /* set valid meta */
   gst_tensor_meta_info_init (&meta);