diff options
author | Tim-Philipp Müller <tim@centricular.com> | 2021-05-22 21:32:55 +0300 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2021-05-23 10:32:09 +0300 |
commit | 04fe2233f09a58deabd6b7d26182c81b1b6758c3 (patch) | |
tree | 9dec48f7b9dcb6ef0bcd958d9f3d2058a1926986 | |
parent | caa608e5c0c5829f67a4fbe82e0abc28b24aa150 (diff) |
buffer: add gst_buffer_new_copy() convenience function
More convenient and discoverable variant of the fairly widely-used
gst_buffer_new_wrapped(g_memdup(data,size),size).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/826>
-rw-r--r-- | gst/gstbuffer.c | 19 | ||||
-rw-r--r-- | gst/gstbuffer.h | 4 | ||||
-rw-r--r-- | tests/check/gst/gstbuffer.c | 22 |
3 files changed, 45 insertions, 0 deletions
diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c index 2d91d4e5e2..97b1b9fc31 100644 --- a/gst/gstbuffer.c +++ b/gst/gstbuffer.c @@ -1040,6 +1040,25 @@ gst_buffer_new_wrapped_bytes (GBytes * bytes) } /** + * gst_buffer_new_copy: + * @data: (array length=size) (element-type guint8) (transfer none): data to copy into new buffer + * @size: size of @data in bytes + * + * Creates a new buffer of size @size and fills it with a copy of @data. + * + * Returns: (transfer full): a new #GstBuffer + * + * Since: 1.20 + */ +GstBuffer * +gst_buffer_new_copy (gconstpointer data, gsize size) +{ + gpointer data2 = g_memdup (data, size); + + return gst_buffer_new_wrapped_full (0, data2, size, 0, size, data2, g_free); +} + +/** * gst_buffer_n_memory: * @buffer: a #GstBuffer. * diff --git a/gst/gstbuffer.h b/gst/gstbuffer.h index 83eba10c84..0b9e77da57 100644 --- a/gst/gstbuffer.h +++ b/gst/gstbuffer.h @@ -314,9 +314,13 @@ GstBuffer * gst_buffer_new_wrapped_full (GstMemoryFlags flags, gpointer data, GDestroyNotify notify); GST_API GstBuffer * gst_buffer_new_wrapped (gpointer data, gsize size); + GST_API GstBuffer * gst_buffer_new_wrapped_bytes (GBytes * bytes); +GST_API +GstBuffer * gst_buffer_new_copy (gconstpointer data, gsize size); + /* memory blocks */ GST_API diff --git a/tests/check/gst/gstbuffer.c b/tests/check/gst/gstbuffer.c index 99a6f9a5b9..6a2ed31b5b 100644 --- a/tests/check/gst/gstbuffer.c +++ b/tests/check/gst/gstbuffer.c @@ -923,6 +923,27 @@ GST_START_TEST (test_wrapped_bytes) GST_END_TEST; +GST_START_TEST (test_new_copy) +{ + GstBuffer *buf; + GstMemory *mem; + + buf = gst_buffer_new_copy (ro_memory, sizeof (ro_memory)); + + fail_if (gst_buffer_memcmp (buf, 0, ro_memory, sizeof (ro_memory))); + fail_unless_equals_int (gst_buffer_get_size (buf), sizeof (ro_memory)); + + /* the memory should be writable */ + mem = gst_buffer_peek_memory (buf, 0); + fail_unless (gst_memory_is_writable (mem)); + fail_unless (gst_buffer_is_writable (buf)); + gst_buffer_memset (buf, 0, 0xaa, sizeof (ro_memory)); + + gst_buffer_unref (buf); +} + +GST_END_TEST; + static Suite * gst_buffer_suite (void) { @@ -948,6 +969,7 @@ gst_buffer_suite (void) tcase_add_test (tc_chain, test_parent_buffer_meta); tcase_add_test (tc_chain, test_writable_memory); tcase_add_test (tc_chain, test_wrapped_bytes); + tcase_add_test (tc_chain, test_new_copy); return s; } |