summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gst/gstbuffer.c2
-rw-r--r--gst/gstmemory.c36
-rw-r--r--gst/gstmemory.h5
-rw-r--r--libs/gst/base/gstadapter.c2
-rw-r--r--libs/gst/base/gstbaseparse.c2
-rw-r--r--libs/gst/base/gstbytewriter.c2
-rw-r--r--plugins/elements/gstfakesrc.c2
-rw-r--r--tests/check/gst/gstbuffer.c4
-rw-r--r--tests/check/gst/gstmemory.c3
-rw-r--r--tests/check/libs/bitreader.c3
-rw-r--r--tests/check/libs/bytereader.c3
-rw-r--r--tests/check/libs/typefindhelper.c2
12 files changed, 39 insertions, 27 deletions
diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c
index d9304cdb2c..bb7af32ecc 100644
--- a/gst/gstbuffer.c
+++ b/gst/gstbuffer.c
@@ -615,7 +615,7 @@ gst_buffer_new_wrapped_full (gpointer data, GFreeFunc free_func, gsize offset,
newbuf = gst_buffer_new ();
gst_buffer_append_memory (newbuf,
gst_memory_new_wrapped (free_func ? 0 : GST_MEMORY_FLAG_READONLY,
- data, free_func, offset + size, offset, size));
+ data, offset + size, offset, size, data, free_func));
return newbuf;
}
diff --git a/gst/gstmemory.c b/gst/gstmemory.c
index 2cc37f60d9..da5b8c4598 100644
--- a/gst/gstmemory.c
+++ b/gst/gstmemory.c
@@ -116,7 +116,8 @@ typedef struct
GstMemory mem;
gsize slice_size;
guint8 *data;
- GFreeFunc free_func;
+ gpointer user_data;
+ GDestroyNotify notify;
} GstMemoryDefault;
/* the default allocator */
@@ -129,7 +130,8 @@ static GstAllocator *_default_mem_impl;
static void
_default_mem_init (GstMemoryDefault * mem, GstMemoryFlags flags,
GstMemory * parent, gsize slice_size, gpointer data,
- GFreeFunc free_func, gsize maxsize, gsize offset, gsize size)
+ gsize maxsize, gsize offset, gsize size, gpointer user_data,
+ GDestroyNotify notify)
{
mem->mem.allocator = _default_mem_impl;
mem->mem.flags = flags;
@@ -141,7 +143,8 @@ _default_mem_init (GstMemoryDefault * mem, GstMemoryFlags flags,
mem->mem.size = size;
mem->slice_size = slice_size;
mem->data = data;
- mem->free_func = free_func;
+ mem->user_data = user_data;
+ mem->notify = notify;
GST_CAT_DEBUG (GST_CAT_MEMORY, "new memory %p", mem);
}
@@ -149,7 +152,8 @@ _default_mem_init (GstMemoryDefault * mem, GstMemoryFlags flags,
/* create a new memory block that manages the given memory */
static GstMemoryDefault *
_default_mem_new (GstMemoryFlags flags, GstMemory * parent, gpointer data,
- GFreeFunc free_func, gsize maxsize, gsize offset, gsize size)
+ gsize maxsize, gsize offset, gsize size, gpointer user_data,
+ GDestroyNotify notify)
{
GstMemoryDefault *mem;
gsize slice_size;
@@ -158,7 +162,7 @@ _default_mem_new (GstMemoryFlags flags, GstMemory * parent, gpointer data,
mem = g_slice_alloc (slice_size);
_default_mem_init (mem, flags, parent, slice_size,
- data, free_func, maxsize, offset, size);
+ data, maxsize, offset, size, user_data, notify);
return mem;
}
@@ -187,8 +191,8 @@ _default_mem_new_block (gsize maxsize, gsize align, gsize offset, gsize size)
if ((aoffset = ((guintptr) data & align)))
aoffset = (align + 1) - aoffset;
- _default_mem_init (mem, 0, NULL, slice_size, data, NULL, maxsize,
- aoffset + offset, size);
+ _default_mem_init (mem, 0, NULL, slice_size, data, maxsize,
+ aoffset + offset, size, NULL, NULL);
return mem;
}
@@ -220,8 +224,8 @@ _default_mem_free (GstMemoryDefault * mem)
if (mem->mem.parent)
gst_memory_unref (mem->mem.parent);
- if (mem->free_func)
- mem->free_func (mem->data);
+ if (mem->notify)
+ mem->notify (mem->user_data);
g_slice_free1 (mem->slice_size, mem);
}
@@ -257,8 +261,8 @@ _default_mem_share (GstMemoryDefault * mem, gssize offset, gsize size)
size = mem->mem.size - offset;
sub =
- _default_mem_new (parent->flags, parent, mem->data, NULL,
- mem->mem.maxsize, mem->mem.offset + offset, size);
+ _default_mem_new (parent->flags, parent, mem->data,
+ mem->mem.maxsize, mem->mem.offset + offset, size, NULL, NULL);
return sub;
}
@@ -366,10 +370,11 @@ _priv_gst_memory_initialize (void)
* gst_memory_new_wrapped:
* @flags: #GstMemoryFlags
* @data: data to wrap
- * @free_func: function to free @data
* @maxsize: allocated size of @data
* @offset: offset in @data
* @size: size of valid data
+ * @user_data: user_data
+ * @notify: called with @user_data when the memory is freed
*
* Allocate a new memory block that wraps the given @data.
*
@@ -377,14 +382,17 @@ _priv_gst_memory_initialize (void)
*/
GstMemory *
gst_memory_new_wrapped (GstMemoryFlags flags, gpointer data,
- GFreeFunc free_func, gsize maxsize, gsize offset, gsize size)
+ gsize maxsize, gsize offset, gsize size, gpointer user_data,
+ GDestroyNotify notify)
{
GstMemoryDefault *mem;
g_return_val_if_fail (data != NULL, NULL);
g_return_val_if_fail (offset + size <= maxsize, NULL);
- mem = _default_mem_new (flags, NULL, data, free_func, maxsize, offset, size);
+ mem =
+ _default_mem_new (flags, NULL, data, maxsize, offset, size, user_data,
+ notify);
#ifndef GST_DISABLE_TRACE
_gst_alloc_trace_new (_gst_memory_trace, mem);
diff --git a/gst/gstmemory.h b/gst/gstmemory.h
index 4a8ae0ff2a..8ffc34f046 100644
--- a/gst/gstmemory.h
+++ b/gst/gstmemory.h
@@ -304,8 +304,9 @@ void gst_allocator_set_default (GstAllocator * allocator);
GstMemory * gst_allocator_alloc (GstAllocator * allocator,
gsize maxsize, gsize align);
-GstMemory * gst_memory_new_wrapped (GstMemoryFlags flags, gpointer data, GFreeFunc free_func,
- gsize maxsize, gsize offset, gsize size);
+GstMemory * gst_memory_new_wrapped (GstMemoryFlags flags, gpointer data, gsize maxsize,
+ gsize offset, gsize size, gpointer user_data,
+ GDestroyNotify notify);
/* refcounting */
GstMemory * gst_memory_ref (GstMemory *mem);
diff --git a/libs/gst/base/gstadapter.c b/libs/gst/base/gstadapter.c
index 2fc29ca415..24dee757f8 100644
--- a/libs/gst/base/gstadapter.c
+++ b/libs/gst/base/gstadapter.c
@@ -766,7 +766,7 @@ gst_adapter_take_buffer (GstAdapter * adapter, gsize nbytes)
buffer = gst_buffer_new ();
gst_buffer_take_memory (buffer, -1,
- gst_memory_new_wrapped (0, data, g_free, nbytes, 0, nbytes));
+ gst_memory_new_wrapped (0, data, nbytes, 0, nbytes, data, g_free));
done:
gst_adapter_flush_unchecked (adapter, nbytes);
diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index c4bdc6313d..9403c09891 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -2624,7 +2624,7 @@ gst_base_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
tmpbuf = gst_buffer_new ();
gst_buffer_take_memory (tmpbuf, -1,
gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY |
- GST_MEMORY_FLAG_NO_SHARE, (gpointer) data, NULL, av, 0, av));
+ GST_MEMORY_FLAG_NO_SHARE, (gpointer) data, av, 0, av, NULL, NULL));
/* keep the adapter mapped, so keep track of what has to be flushed */
ret = gst_base_parse_handle_buffer (parse, tmpbuf, &skip, &flush);
diff --git a/libs/gst/base/gstbytewriter.c b/libs/gst/base/gstbytewriter.c
index e71730094a..03e1ed42aa 100644
--- a/libs/gst/base/gstbytewriter.c
+++ b/libs/gst/base/gstbytewriter.c
@@ -261,7 +261,7 @@ gst_byte_writer_reset_and_get_buffer (GstByteWriter * writer)
buffer = gst_buffer_new ();
if (data != NULL) {
gst_buffer_take_memory (buffer, -1,
- gst_memory_new_wrapped (0, data, g_free, size, 0, size));
+ gst_memory_new_wrapped (0, data, size, 0, size, data, g_free));
}
return buffer;
diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c
index 1ba547543e..f3b154fe53 100644
--- a/plugins/elements/gstfakesrc.c
+++ b/plugins/elements/gstfakesrc.c
@@ -661,7 +661,7 @@ gst_fake_src_alloc_buffer (GstFakeSrc * src, guint size)
gst_fake_src_prepare_buffer (src, data, size);
gst_buffer_take_memory (buf, -1,
- gst_memory_new_wrapped (0, data, g_free, size, 0, size));
+ gst_memory_new_wrapped (0, data, size, 0, size, data, g_free));
}
return buf;
diff --git a/tests/check/gst/gstbuffer.c b/tests/check/gst/gstbuffer.c
index b29af9cf64..5a8b9e042f 100644
--- a/tests/check/gst/gstbuffer.c
+++ b/tests/check/gst/gstbuffer.c
@@ -246,8 +246,8 @@ create_read_only_buffer (void)
/* assign some read-only data to the new buffer */
gst_buffer_take_memory (buf, -1,
gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
- (gpointer) ro_memory, NULL,
- sizeof (ro_memory), 0, sizeof (ro_memory)));
+ (gpointer) ro_memory, sizeof (ro_memory),
+ 0, sizeof (ro_memory), NULL, NULL));
return buf;
}
diff --git a/tests/check/gst/gstmemory.c b/tests/check/gst/gstmemory.c
index cef9e3f171..8bde54a35a 100644
--- a/tests/check/gst/gstmemory.c
+++ b/tests/check/gst/gstmemory.c
@@ -132,7 +132,8 @@ create_read_only_memory (void)
/* assign some read-only data to the new memory */
mem = gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
- (gpointer) ro_memory, NULL, sizeof (ro_memory), 0, sizeof (ro_memory));
+ (gpointer) ro_memory, sizeof (ro_memory), 0, sizeof (ro_memory), NULL,
+ NULL);
fail_unless (GST_MEMORY_IS_READONLY (mem));
return mem;
diff --git a/tests/check/libs/bitreader.c b/tests/check/libs/bitreader.c
index e343f15c75..0cedecf2b6 100644
--- a/tests/check/libs/bitreader.c
+++ b/tests/check/libs/bitreader.c
@@ -49,7 +49,8 @@ GST_START_TEST (test_initialization)
GstMapInfo info;
gst_buffer_take_memory (buffer, -1,
- gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, data, NULL, 4, 0, 4));
+ gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, data, 4, 0, 4, NULL,
+ NULL));
fail_unless (gst_bit_reader_get_bits_uint8 (&reader, &x, 8));
fail_unless_equals_int (x, 0x01);
diff --git a/tests/check/libs/bytereader.c b/tests/check/libs/bytereader.c
index 96e0f58450..ec5fda90bd 100644
--- a/tests/check/libs/bytereader.c
+++ b/tests/check/libs/bytereader.c
@@ -49,7 +49,8 @@ GST_START_TEST (test_initialization)
GstMapInfo info;
gst_buffer_take_memory (buffer, -1,
- gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, data, NULL, 4, 0, 4));
+ gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, data, 4, 0, 4, NULL,
+ NULL));
fail_unless (gst_byte_reader_get_uint8 (&reader, &x));
fail_unless_equals_int (x, 0x01);
diff --git a/tests/check/libs/typefindhelper.c b/tests/check/libs/typefindhelper.c
index 3798094ff0..925448d657 100644
--- a/tests/check/libs/typefindhelper.c
+++ b/tests/check/libs/typefindhelper.c
@@ -55,7 +55,7 @@ GST_START_TEST (test_buffer_range)
gst_buffer_take_memory (buf, -1,
gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
- (gpointer) vorbisid, NULL, 30, 0, 30));
+ (gpointer) vorbisid, 30, 0, 30, NULL, NULL));
caps = gst_type_find_helper_for_buffer (NULL, buf, NULL);
fail_unless (caps != NULL);