File nnstreamer-fix-glib-2.68.patch of Package nnstreamer
From 85c7fe1ad940a60f91a40c8a502042fb12461124 Mon Sep 17 00:00:00 2001
From: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Date: Wed, 3 Nov 2021 14:46:09 +0100
Subject: [PATCH] [Build] Add g_memdup2() support for glib >= 2.68
Update to fix build with glib version 2.68 and later
Legacy function:
gpointer g_memdup ( gconstpointer mem, guint byte_size )
is deprecated since version 2.68 and replaced by:
gpointer g_memdup2 ( gconstpointer mem, gsize byte_size )
Difference is byte_size argument type changed from guint to gsize.
Signed-off-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
---
ext/nnstreamer/extra/nnstreamer_grpc_flatbuf.cc | 3 ++-
ext/nnstreamer/extra/nnstreamer_grpc_protobuf.cc | 3 ++-
ext/nnstreamer/extra/nnstreamer_protobuf.cc | 4 ++--
.../tensor_converter/tensor_converter_python3.cc | 5 +++--
gst/nnstreamer/include/nnstreamer_util.h | 9 +++++++++
meson.build | 3 +++
tests/gstreamer_join/unittest_join.cc | 5 +++--
tests/nnstreamer_converter/unittest_converter.cc | 8 +++++---
8 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/ext/nnstreamer/extra/nnstreamer_grpc_flatbuf.cc b/ext/nnstreamer/extra/nnstreamer_grpc_flatbuf.cc
index 793291513..844b83e7e 100644
--- a/ext/nnstreamer/extra/nnstreamer_grpc_flatbuf.cc
+++ b/ext/nnstreamer/extra/nnstreamer_grpc_flatbuf.cc
@@ -16,6 +16,7 @@
#include <nnstreamer_log.h>
#include <nnstreamer_plugin_api.h>
+#include <nnstreamer_util.h>
#include <thread>
@@ -119,7 +120,7 @@ ServiceImplFlatbuf::_get_buffer_from_tensors (Message<Tensors> &msg,
const Tensor * tensor = tensors->tensor ()->Get (i);
const void * data = tensor->data ()->data ();
gsize size = VectorLength (tensor->data ());
- gpointer new_data = g_memdup (data, size);
+ gpointer new_data = _g_memdup (data, size);
memory = gst_memory_new_wrapped ((GstMemoryFlags) 0, new_data, size,
0, size, new_data, g_free);
diff --git a/ext/nnstreamer/extra/nnstreamer_grpc_protobuf.cc b/ext/nnstreamer/extra/nnstreamer_grpc_protobuf.cc
index 333e1a958..119a025b2 100644
--- a/ext/nnstreamer/extra/nnstreamer_grpc_protobuf.cc
+++ b/ext/nnstreamer/extra/nnstreamer_grpc_protobuf.cc
@@ -16,6 +16,7 @@
#include <nnstreamer_log.h>
#include <nnstreamer_plugin_api.h>
+#include <nnstreamer_util.h>
#include <thread>
@@ -113,7 +114,7 @@ ServiceImplProtobuf::_get_buffer_from_tensors (Tensors &tensors,
const Tensor * tensor = &tensors.tensor (i);
const void * data = tensor->data ().c_str ();
gsize size = tensor->data ().length ();
- gpointer new_data = g_memdup (data, size);
+ gpointer new_data = _g_memdup (data, size);
memory = gst_memory_new_wrapped ((GstMemoryFlags) 0, new_data, size,
0, size, new_data, g_free);
diff --git a/ext/nnstreamer/extra/nnstreamer_protobuf.cc b/ext/nnstreamer/extra/nnstreamer_protobuf.cc
index 1e1f92bab..93ab75eab 100644
--- a/ext/nnstreamer/extra/nnstreamer_protobuf.cc
+++ b/ext/nnstreamer/extra/nnstreamer_protobuf.cc
@@ -125,7 +125,7 @@ gst_tensor_converter_protobuf (GstBuffer *in_buf, GstTensorsConfig *config, void
GstMemory *in_mem, *out_mem;
GstMapInfo in_info;
GstBuffer *out_buf;
- guint mem_size;
+ gsize mem_size;
gpointer mem_data;
UNUSED (priv_data);
@@ -160,7 +160,7 @@ gst_tensor_converter_protobuf (GstBuffer *in_buf, GstTensorsConfig *config, void
config->info.info[i].dimension[j] = tensor->dimension (j);
}
mem_size = tensor->data ().length ();
- mem_data = g_memdup (tensor->data ().c_str (), mem_size);
+ mem_data = _g_memdup (tensor->data ().c_str (), mem_size);
out_mem = gst_memory_new_wrapped ((GstMemoryFlags) 0, mem_data, mem_size,
0, mem_size, NULL, NULL);
diff --git a/ext/nnstreamer/tensor_converter/tensor_converter_python3.cc b/ext/nnstreamer/tensor_converter/tensor_converter_python3.cc
index 6a9e8eac2..c7407d33a 100644
--- a/ext/nnstreamer/tensor_converter/tensor_converter_python3.cc
+++ b/ext/nnstreamer/tensor_converter/tensor_converter_python3.cc
@@ -140,7 +140,8 @@ PYConverterCore::convert (GstBuffer *in_buf, GstTensorsConfig *config)
GstBuffer *out_buf = NULL;
PyObject *tensors_info = NULL, *output = NULL, *pyValue = NULL;
gint rate_n, rate_d;
- guint i, num, mem_size;
+ guint i, num;
+ gsize mem_size;
gpointer mem_data;
if (nullptr == in_buf)
@@ -196,7 +197,7 @@ PYConverterCore::convert (GstBuffer *in_buf, GstTensorsConfig *config)
= (PyArrayObject *)PyList_GetItem (output, (Py_ssize_t)i);
mem_size = PyArray_SIZE (output_array);
- mem_data = g_memdup ((guint8 *) PyArray_DATA (output_array), mem_size);
+ mem_data = _g_memdup ((guint8 *) PyArray_DATA (output_array), mem_size);
out_mem = gst_memory_new_wrapped ((GstMemoryFlags) 0, mem_data, mem_size,
0, mem_size, mem_data, g_free);
diff --git a/gst/nnstreamer/include/nnstreamer_util.h b/gst/nnstreamer/include/nnstreamer_util.h
index de53c2c5b..4a2c4adeb 100644
--- a/gst/nnstreamer/include/nnstreamer_util.h
+++ b/gst/nnstreamer/include/nnstreamer_util.h
@@ -22,4 +22,13 @@
#define UNUSED(expr) do { (void)(expr); } while (0)
#endif
+/**
+ * @brief g_memdup() function replaced by g_memdup2() in glib version >= 2.68
+ */
+#if GLIB_USE_G_MEMDUP2
+#define _g_memdup(data, size) g_memdup2 (data, size)
+#else
+#define _g_memdup(data, size) g_memdup (data, size)
+#endif
+
#endif /* __NNSTREAMER_UTIL_H__ */
diff --git a/meson.build b/meson.build
index 48a2024b5..856632d1e 100644
--- a/meson.build
+++ b/meson.build
@@ -128,6 +128,9 @@ add_project_arguments('-DNNSTREAMER_CONF_FILE="' + join_paths(nnstreamer_inidir,
# Dependencies
glib_dep = dependency('glib-2.0')
+if glib_dep.version().version_compare('>= 2.68.0')
+ add_project_arguments('-DGLIB_USE_G_MEMDUP2', language: ['c', 'cpp'])
+endif
gobject_dep = dependency('gobject-2.0')
gmodule_dep = dependency('gmodule-2.0')
gio_dep = dependency('gio-2.0')
diff --git a/tests/gstreamer_join/unittest_join.cc b/tests/gstreamer_join/unittest_join.cc
index 8a551b96a..41a65ff72 100644
--- a/tests/gstreamer_join/unittest_join.cc
+++ b/tests/gstreamer_join/unittest_join.cc
@@ -12,6 +12,7 @@
#include <glib/gstdio.h>
#include <gst/app/gstappsrc.h>
#include <gst/gst.h>
+#include <nnstreamer_util.h>
#include <unittest_util.h>
static int data_received;
@@ -92,10 +93,10 @@ TEST (join, normal0)
g_signal_connect (sink_handle, "new-data", (GCallback)new_data_cb, (gpointer)&idx);
- buf_0 = gst_buffer_new_wrapped (g_memdup (test_frames[0], 192), 192);
+ buf_0 = gst_buffer_new_wrapped (_g_memdup (test_frames[0], 192), 192);
buf_3 = gst_buffer_copy (buf_0);
- buf_1 = gst_buffer_new_wrapped (g_memdup (test_frames[1], 192), 192);
+ buf_1 = gst_buffer_new_wrapped (_g_memdup (test_frames[1], 192), 192);
buf_4 = gst_buffer_copy (buf_1);
data_received = 0;
diff --git a/tests/nnstreamer_converter/unittest_converter.cc b/tests/nnstreamer_converter/unittest_converter.cc
index 63ab972ac..629f53942 100644
--- a/tests/nnstreamer_converter/unittest_converter.cc
+++ b/tests/nnstreamer_converter/unittest_converter.cc
@@ -16,6 +16,8 @@
#include <flatbuffers/flexbuffers.h>
#include <gst/app/gstappsrc.h>
#include <nnstreamer_plugin_api_converter.h>
+#include <nnstreamer_util.h>
+
#define TEST_TIMEOUT_MS (10000U)
@@ -66,7 +68,7 @@ tensor_converter_custom_cb (GstBuffer *in_buf,
}
flexbuffers::Blob tensor_data = tensor[3].AsBlob ();
mem_size = tensor_data.size ();
- mem_data = g_memdup (tensor_data.data (), mem_size);
+ mem_data = _g_memdup (tensor_data.data (), mem_size);
out_mem = gst_memory_new_wrapped ((GstMemoryFlags) 0, mem_data, mem_size,
0, mem_size, mem_data, g_free);
@@ -395,8 +397,8 @@ TEST (tensorConverterPython, dynamicDimension)
data_received = (guint *) g_malloc0 (sizeof (guint));
g_signal_connect (sink_handle, "new-data", (GCallback)new_data_cb, data_received);
- buf_0 = gst_buffer_new_wrapped (g_memdup (_test_frames1, 96), 96);
- buf_1 = gst_buffer_new_wrapped (g_memdup (_test_frames2, 192), 192);
+ buf_0 = gst_buffer_new_wrapped (_g_memdup (_test_frames1, 96), 96);
+ buf_1 = gst_buffer_new_wrapped (_g_memdup (_test_frames2, 192), 192);
buf_2 = gst_buffer_copy (buf_0);
EXPECT_EQ (setPipelineStateSync (pipeline, GST_STATE_PLAYING, TEST_TIMEOUT_MS), 0);