- /* there should be no outstanding mappings */
- g_return_if_fail (g_atomic_int_get (&mem->state) < 4);
- mem->allocator->info.mem_free (mem);
-}
-
-/* initialize the fields */
-static void
-_default_mem_init (GstMemoryDefault * mem, GstMemoryFlags flags,
- GstMemory * parent, gsize slice_size, gpointer data,
- gsize maxsize, gsize offset, gsize size, gsize align,
- gpointer user_data, GDestroyNotify notify)
-{
- gst_mini_object_init (GST_MINI_OBJECT_CAST (mem), GST_TYPE_MEMORY,
- (GstMiniObjectCopyFunction) _gst_memory_copy, NULL,
- (GstMiniObjectFreeFunction) _gst_memory_free);
-
- mem->mem.mini_object.flags = flags;
-
- mem->mem.allocator = _default_mem_impl;
- mem->mem.parent = parent ? gst_memory_ref (parent) : NULL;
- mem->mem.state = (flags & GST_MEMORY_FLAG_READONLY ? 0x1 : 0);
- mem->mem.maxsize = maxsize;
- mem->mem.align = align;
- mem->mem.offset = offset;
- mem->mem.size = size;
- mem->slice_size = slice_size;
- mem->data = data;
- mem->user_data = user_data;
- mem->notify = notify;
-
- GST_CAT_DEBUG (GST_CAT_MEMORY, "new memory %p, maxsize:%" G_GSIZE_FORMAT
- " offset:%" G_GSIZE_FORMAT " size:%" G_GSIZE_FORMAT, mem, maxsize,
- offset, size);
-}
-
-/* create a new memory block that manages the given memory */
-static GstMemoryDefault *
-_default_mem_new (GstMemoryFlags flags, GstMemory * parent, gpointer data,
- gsize maxsize, gsize offset, gsize size, gsize align, gpointer user_data,
- GDestroyNotify notify)
-{
- GstMemoryDefault *mem;
- gsize slice_size;
-
- slice_size = sizeof (GstMemoryDefault);
-
- mem = g_slice_alloc (slice_size);
- _default_mem_init (mem, flags, parent, slice_size,
- data, maxsize, offset, size, align, user_data, notify);
-
- return mem;
-}
-
-/* allocate the memory and structure in one block */
-static GstMemoryDefault *
-_default_mem_new_block (GstMemoryFlags flags, gsize maxsize, gsize align,
- gsize offset, gsize size)
-{
- GstMemoryDefault *mem;
- gsize aoffset, slice_size, padding;
- guint8 *data;
-
- /* ensure configured alignment */
- align |= gst_memory_alignment;
- /* allocate more to compensate for alignment */
- maxsize += align;
- /* alloc header and data in one block */
- slice_size = sizeof (GstMemoryDefault) + maxsize;
-
- mem = g_slice_alloc (slice_size);
- if (mem == NULL)
- return NULL;
-
- data = (guint8 *) mem + sizeof (GstMemoryDefault);
-
- /* do alignment */
- if ((aoffset = ((guintptr) data & align))) {
- aoffset = (align + 1) - aoffset;
- data += aoffset;
- maxsize -= aoffset;
- }
-
- if (offset && (flags & GST_MEMORY_FLAG_ZERO_PREFIXED))
- memset (data, 0, offset);
-
- padding = maxsize - (offset + size);
- if (padding && (flags & GST_MEMORY_FLAG_ZERO_PADDED))
- memset (data + offset + size, 0, padding);
-
- _default_mem_init (mem, flags, NULL, slice_size, data, maxsize,
- offset, size, align, NULL, NULL);
-
- return mem;
-}
-
-static GstMemory *
-_default_alloc_alloc (GstAllocator * allocator, gsize size,
- GstAllocationParams * params, gpointer user_data)
-{
- gsize maxsize = size + params->prefix + params->padding;
-
- return (GstMemory *) _default_mem_new_block (params->flags,
- maxsize, params->align, params->prefix, size);
-}
-
-static gpointer
-_default_mem_map (GstMemoryDefault * mem, gsize maxsize, GstMapFlags flags)
-{
- return mem->data;
-}
-
-static gboolean
-_default_mem_unmap (GstMemoryDefault * mem)
-{
- return TRUE;
-}