projects
/
platform
/
upstream
/
gstreamer.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gsttaskpool: Do not block tasks while cleaning up the taskpool
[platform/upstream/gstreamer.git]
/
gst
/
gstallocator.c
diff --git
a/gst/gstallocator.c
b/gst/gstallocator.c
index
6363ba5
..
20ced48
100644
(file)
--- a/
gst/gstallocator.c
+++ b/
gst/gstallocator.c
@@
-21,6
+21,7
@@
/**
* SECTION:gstallocator
/**
* SECTION:gstallocator
+ * @title: GstAllocator
* @short_description: allocate memory blocks
* @see_also: #GstMemory
*
* @short_description: allocate memory blocks
* @see_also: #GstMemory
*
@@
-47,9
+48,6
@@
GST_DEBUG_CATEGORY_STATIC (gst_allocator_debug);
#define GST_CAT_DEFAULT gst_allocator_debug
GST_DEBUG_CATEGORY_STATIC (gst_allocator_debug);
#define GST_CAT_DEFAULT gst_allocator_debug
-#define GST_ALLOCATOR_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_ALLOCATOR, GstAllocatorPrivate))
-
struct _GstAllocatorPrivate
{
gpointer dummy;
struct _GstAllocatorPrivate
{
gpointer dummy;
@@
-76,13
+74,12
@@
static GstAllocator *_sysmem_allocator;
static GRWLock lock;
static GHashTable *allocators;
static GRWLock lock;
static GHashTable *allocators;
-G_DEFINE_ABSTRACT_TYPE (GstAllocator, gst_allocator, GST_TYPE_OBJECT);
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GstAllocator, gst_allocator,
+ GST_TYPE_OBJECT);
static void
gst_allocator_class_init (GstAllocatorClass * klass)
{
static void
gst_allocator_class_init (GstAllocatorClass * klass)
{
- g_type_class_add_private (klass, sizeof (GstAllocatorPrivate));
-
GST_DEBUG_CATEGORY_INIT (gst_allocator_debug, "allocator", 0,
"allocator debug");
}
GST_DEBUG_CATEGORY_INIT (gst_allocator_debug, "allocator", 0,
"allocator debug");
}
@@
-132,7
+129,7
@@
_fallback_mem_is_span (GstMemory * mem1, GstMemory * mem2, gsize * offset)
static void
gst_allocator_init (GstAllocator * allocator)
{
static void
gst_allocator_init (GstAllocator * allocator)
{
- allocator->priv =
GST_ALLOCATOR_GET_PRIVATE
(allocator);
+ allocator->priv =
gst_allocator_get_instance_private
(allocator);
allocator->mem_copy = _fallback_mem_copy;
allocator->mem_is_span = _fallback_mem_is_span;
allocator->mem_copy = _fallback_mem_copy;
allocator->mem_is_span = _fallback_mem_is_span;
@@
-158,13
+155,13
@@
gst_allocation_params_init (GstAllocationParams * params)
/**
* gst_allocation_params_copy:
/**
* gst_allocation_params_copy:
- * @params: (transfer none): a #GstAllocationParams
+ * @params: (transfer none)
(nullable)
: a #GstAllocationParams
*
* Create a copy of @params.
*
* Free-function: gst_allocation_params_free
*
*
* Create a copy of @params.
*
* Free-function: gst_allocation_params_free
*
- * Returns: (transfer full): a new ##GstAllocationParams, free with
+ * Returns: (transfer full)
(nullable)
: a new ##GstAllocationParams, free with
* gst_allocation_params_free().
*/
GstAllocationParams *
* gst_allocation_params_free().
*/
GstAllocationParams *
@@
-210,6
+207,8
@@
gst_allocator_register (const gchar * name, GstAllocator * allocator)
allocator, name);
g_rw_lock_writer_lock (&lock);
allocator, name);
g_rw_lock_writer_lock (&lock);
+ /* The ref will never be released */
+ GST_OBJECT_FLAG_SET (allocator, GST_OBJECT_FLAG_MAY_BE_LEAKED);
g_hash_table_insert (allocators, (gpointer) name, (gpointer) allocator);
g_rw_lock_writer_unlock (&lock);
}
g_hash_table_insert (allocators, (gpointer) name, (gpointer) allocator);
g_rw_lock_writer_unlock (&lock);
}
@@
-221,8
+220,9
@@
gst_allocator_register (const gchar * name, GstAllocator * allocator)
* Find a previously registered allocator with @name. When @name is %NULL, the
* default allocator will be returned.
*
* Find a previously registered allocator with @name. When @name is %NULL, the
* default allocator will be returned.
*
- * Returns: (transfer full): a #GstAllocator or %NULL when the allocator with @name was not
- * registered. Use gst_object_unref() to release the allocator after usage.
+ * Returns: (transfer full) (nullable): a #GstAllocator or %NULL when
+ * the allocator with @name was not registered. Use gst_object_unref()
+ * to release the allocator after usage.
*/
GstAllocator *
gst_allocator_find (const gchar * name)
*/
GstAllocator *
gst_allocator_find (const gchar * name)
@@
-286,7
+286,7
@@
gst_allocator_set_default (GstAllocator * allocator)
* the amount of bytes to align to. For example, to align to 8 bytes,
* use an alignment of 7.
*
* the amount of bytes to align to. For example, to align to 8 bytes,
* use an alignment of 7.
*
- * Returns: (transfer full): a new #GstMemory.
+ * Returns: (transfer full)
(nullable)
: a new #GstMemory.
*/
GstMemory *
gst_allocator_alloc (GstAllocator * allocator, gsize size,
*/
GstMemory *
gst_allocator_alloc (GstAllocator * allocator, gsize size,
@@
-357,7
+357,7
@@
typedef struct
GstAllocatorClass parent_class;
} GstAllocatorSysmemClass;
GstAllocatorClass parent_class;
} GstAllocatorSysmemClass;
-GType gst_allocator_sysmem_get_type (void);
+
static
GType gst_allocator_sysmem_get_type (void);
G_DEFINE_TYPE (GstAllocatorSysmem, gst_allocator_sysmem, GST_TYPE_ALLOCATOR);
/* initialize the fields */
G_DEFINE_TYPE (GstAllocatorSysmem, gst_allocator_sysmem, GST_TYPE_ALLOCATOR);
/* initialize the fields */
@@
-535,7
+535,11
@@
default_free (GstAllocator * allocator, GstMemory * mem)
static void
gst_allocator_sysmem_finalize (GObject * obj)
{
static void
gst_allocator_sysmem_finalize (GObject * obj)
{
- g_warning ("The default memory allocator was freed!");
+ /* Don't raise warnings if we are shutting down */
+ if (_default_allocator)
+ g_warning ("The default memory allocator was freed!");
+
+ ((GObjectClass *) gst_allocator_sysmem_parent_class)->finalize (obj);
}
static void
}
static void
@@
-569,10
+573,11
@@
gst_allocator_sysmem_init (GstAllocatorSysmem * allocator)
}
void
}
void
-_priv_gst_
memory
_initialize (void)
+_priv_gst_
allocator
_initialize (void)
{
g_rw_lock_init (&lock);
{
g_rw_lock_init (&lock);
- allocators = g_hash_table_new (g_str_hash, g_str_equal);
+ allocators = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
+ gst_object_unref);
#ifdef HAVE_GETPAGESIZE
#ifdef MEMORY_ALIGNMENT_PAGESIZE
#ifdef HAVE_GETPAGESIZE
#ifdef MEMORY_ALIGNMENT_PAGESIZE
@@
-585,12
+590,27
@@
_priv_gst_memory_initialize (void)
_sysmem_allocator = g_object_new (gst_allocator_sysmem_get_type (), NULL);
_sysmem_allocator = g_object_new (gst_allocator_sysmem_get_type (), NULL);
+ /* Clear floating flag */
+ gst_object_ref_sink (_sysmem_allocator);
+
gst_allocator_register (GST_ALLOCATOR_SYSMEM,
gst_object_ref (_sysmem_allocator));
_default_allocator = gst_object_ref (_sysmem_allocator);
}
gst_allocator_register (GST_ALLOCATOR_SYSMEM,
gst_object_ref (_sysmem_allocator));
_default_allocator = gst_object_ref (_sysmem_allocator);
}
+void
+_priv_gst_allocator_cleanup (void)
+{
+ gst_object_unref (_sysmem_allocator);
+ _sysmem_allocator = NULL;
+
+ gst_object_unref (_default_allocator);
+ _default_allocator = NULL;
+
+ g_clear_pointer (&allocators, g_hash_table_unref);
+}
+
/**
* gst_memory_new_wrapped:
* @flags: #GstMemoryFlags
/**
* gst_memory_new_wrapped:
* @flags: #GstMemoryFlags
@@
-607,7
+627,7
@@
_priv_gst_memory_initialize (void)
* The prefix/padding must be filled with 0 if @flags contains
* #GST_MEMORY_FLAG_ZERO_PREFIXED and #GST_MEMORY_FLAG_ZERO_PADDED respectively.
*
* The prefix/padding must be filled with 0 if @flags contains
* #GST_MEMORY_FLAG_ZERO_PREFIXED and #GST_MEMORY_FLAG_ZERO_PADDED respectively.
*
- * Returns: (transfer full): a new #GstMemory.
+ * Returns: (transfer full)
(nullable)
: a new #GstMemory.
*/
GstMemory *
gst_memory_new_wrapped (GstMemoryFlags flags, gpointer data,
*/
GstMemory *
gst_memory_new_wrapped (GstMemoryFlags flags, gpointer data,