diff --git a/gst/gst.c b/gst/gst.c index 22dc73e8e8..4634758ed6 100644 --- a/gst/gst.c +++ b/gst/gst.c @@ -665,12 +665,12 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data, g_log_set_handler (g_log_domain_gstreamer, llf, debug_log_handler, NULL); _priv_gst_quarks_initialize (); - _gst_memory_init (); + _priv_gst_memory_initialize (); _priv_gst_format_initialize (); _priv_gst_query_initialize (); _priv_gst_structure_initialize (); _priv_gst_caps_initialize (); - _gst_meta_init (); + _priv_gst_meta_initialize (); g_type_class_ref (gst_object_get_type ()); g_type_class_ref (gst_pad_get_type ()); diff --git a/gst/gst_private.h b/gst/gst_private.h index 1df19b21df..3380c88518 100644 --- a/gst/gst_private.h +++ b/gst/gst_private.h @@ -100,6 +100,8 @@ void _priv_gst_caps_initialize (void); void _priv_gst_event_initialize (void); void _priv_gst_format_initialize (void); void _priv_gst_message_initialize (void); +void _priv_gst_memory_initialize (void); +void _priv_gst_meta_initialize (void); void _priv_gst_plugin_initialize (void); void _priv_gst_query_initialize (void); void _priv_gst_tag_initialize (void); diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c index c08dedfe04..53c76e4c33 100644 --- a/gst/gstbuffer.c +++ b/gst/gstbuffer.c @@ -223,12 +223,12 @@ _memory_add (GstBuffer * buffer, guint idx, GstMemory * mem) GST_BUFFER_MEM_LEN (buffer) = len + 1; } +GST_DEFINE_MINI_OBJECT (GstBuffer, gst_buffer); + void _priv_gst_buffer_initialize (void) { - if (G_LIKELY (_gst_buffer_type == 0)) { - _gst_buffer_type = gst_mini_object_register ("GstBuffer"); - } + _gst_buffer_type = gst_buffer_get_type (); } /** diff --git a/gst/gstbuffer.h b/gst/gstbuffer.h index 35681b18a9..c559976037 100644 --- a/gst/gstbuffer.h +++ b/gst/gstbuffer.h @@ -240,6 +240,8 @@ struct _GstBuffer { guint64 offset_end; }; +GType gst_buffer_get_type (void); + /* allocation */ GstBuffer * gst_buffer_new (void); GstBuffer * gst_buffer_new_allocate (const GstAllocator * allocator, gsize maxsize, gsize align); diff --git a/gst/gstbufferlist.c b/gst/gstbufferlist.c index 5b477d8113..6fb48e22b2 100644 --- a/gst/gstbufferlist.c +++ b/gst/gstbufferlist.c @@ -54,12 +54,12 @@ struct _GstBufferList GType _gst_buffer_list_type = 0; +GST_DEFINE_MINI_OBJECT (GstBufferList, gst_buffer_list); + void _priv_gst_buffer_list_initialize (void) { - if (G_LIKELY (_gst_buffer_list_type == 0)) { - _gst_buffer_list_type = gst_mini_object_register ("GstBufferList"); - } + _gst_buffer_list_type = gst_buffer_list_get_type (); } static GstBufferList * diff --git a/gst/gstbufferlist.h b/gst/gstbufferlist.h index 6ac0a67653..7275dad098 100644 --- a/gst/gstbufferlist.h +++ b/gst/gstbufferlist.h @@ -153,6 +153,8 @@ gst_buffer_list_copy (const GstBufferList * list) */ #define gst_buffer_list_make_writable(list) GST_BUFFER_LIST_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (list))) +GType gst_buffer_list_get_type (void); + /* allocation */ GstBufferList * gst_buffer_list_new (void); GstBufferList * gst_buffer_list_sized_new (guint size); diff --git a/gst/gstcaps.c b/gst/gstcaps.c index bb7e80067d..2dae852737 100644 --- a/gst/gstcaps.c +++ b/gst/gstcaps.c @@ -115,10 +115,12 @@ static gboolean gst_caps_from_string_inplace (GstCaps * caps, GType _gst_caps_type = 0; +GST_DEFINE_MINI_OBJECT (GstCaps, gst_caps); + void _priv_gst_caps_initialize (void) { - _gst_caps_type = gst_mini_object_register ("GstCaps"); + _gst_caps_type = gst_caps_get_type (); g_value_register_transform_func (_gst_caps_type, G_TYPE_STRING, gst_caps_transform_to_string); diff --git a/gst/gstcaps.h b/gst/gstcaps.h index b5c8a3e0b7..e1702ee168 100644 --- a/gst/gstcaps.h +++ b/gst/gstcaps.h @@ -336,6 +336,8 @@ struct _GstStaticCaps { gpointer _gst_reserved[GST_PADDING]; }; +GType gst_caps_get_type (void); + GstCaps * gst_caps_new_empty (void); GstCaps * gst_caps_new_any (void); GstCaps * gst_caps_new_simple (const char *media_type, diff --git a/gst/gstevent.c b/gst/gstevent.c index aa71e7a379..518ebf6987 100644 --- a/gst/gstevent.c +++ b/gst/gstevent.c @@ -128,12 +128,14 @@ static GstEventQuarks event_quarks[] = { {0, NULL, 0} }; +GST_DEFINE_MINI_OBJECT (GstEvent, gst_event); + void _priv_gst_event_initialize (void) { gint i; - _gst_event_type = gst_mini_object_register ("GstEvent"); + _gst_event_type = gst_event_get_type (); g_type_class_ref (gst_seek_flags_get_type ()); g_type_class_ref (gst_seek_type_get_type ()); diff --git a/gst/gstevent.h b/gst/gstevent.h index 1402967a0b..78affa28ed 100644 --- a/gst/gstevent.h +++ b/gst/gstevent.h @@ -412,6 +412,7 @@ gst_event_copy (const GstEvent * event) return GST_EVENT_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (event))); } +GType gst_event_get_type (void); /* custom event */ GstEvent* gst_event_new_custom (GstEventType type, GstStructure *structure); diff --git a/gst/gstmemory.c b/gst/gstmemory.c index 17516d6c24..d9e8a14284 100644 --- a/gst/gstmemory.c +++ b/gst/gstmemory.c @@ -308,7 +308,7 @@ static GStaticRWLock lock = G_STATIC_RW_LOCK_INIT; static GHashTable *allocators; void -_gst_memory_init (void) +_priv_gst_memory_initialize (void) { static const GstMemoryInfo _mem_info = { (GstMemoryAllocFunction) _default_mem_alloc, diff --git a/gst/gstmemory.h b/gst/gstmemory.h index a4f411290a..c1f8e67c23 100644 --- a/gst/gstmemory.h +++ b/gst/gstmemory.h @@ -264,8 +264,6 @@ struct _GstMemoryInfo { gpointer user_data; }; -void _gst_memory_init (void); - /* allocators */ const GstAllocator * gst_allocator_register (const gchar *name, const GstMemoryInfo *info); const GstAllocator * gst_allocator_find (const gchar *name); diff --git a/gst/gstmessage.c b/gst/gstmessage.c index 1aa2af1bf5..26285c890c 100644 --- a/gst/gstmessage.c +++ b/gst/gstmessage.c @@ -60,8 +60,6 @@ #include "gstquark.h" -static GType _gst_message_type = 0; - typedef struct { GstMessage message; @@ -109,6 +107,9 @@ static GstMessageQuarks message_quarks[] = { {0, NULL, 0} }; +static GType _gst_message_type = 0; +GST_DEFINE_MINI_OBJECT (GstMessage, gst_message); + void _priv_gst_message_initialize (void) { @@ -125,6 +126,8 @@ _priv_gst_message_initialize (void) message_quarks[i].quark = g_quark_from_static_string (message_quarks[i].name); } + + _gst_message_type = gst_message_get_type (); } /** @@ -167,16 +170,6 @@ gst_message_type_to_quark (GstMessageType type) return 0; } -GType -gst_message_get_type (void) -{ - if (G_UNLIKELY (_gst_message_type == 0)) { - _gst_message_type = gst_mini_object_register ("GstMessage"); - } - return _gst_message_type; -} - - static void _gst_message_free (GstMessage * message) { diff --git a/gst/gstmeta.c b/gst/gstmeta.c index 78fc40cfae..078aef14aa 100644 --- a/gst/gstmeta.c +++ b/gst/gstmeta.c @@ -36,7 +36,7 @@ static GHashTable *metainfo = NULL; static GStaticRWLock lock = G_STATIC_RW_LOCK_INIT; void -_gst_meta_init (void) +_priv_gst_meta_initialize (void) { metainfo = g_hash_table_new (g_str_hash, g_str_equal); } diff --git a/gst/gstmeta.h b/gst/gstmeta.h index fe5a4aafae..3771bfd5fb 100644 --- a/gst/gstmeta.h +++ b/gst/gstmeta.h @@ -107,8 +107,6 @@ struct _GstMetaInfo { GstMetaTransformFunction transform_func; }; -void _gst_meta_init (void); - const GstMetaInfo * gst_meta_register (const gchar *api, const gchar *impl, gsize size, GstMetaInitFunction init_func, diff --git a/gst/gstminiobject.c b/gst/gstminiobject.c index 09d796cb2c..7ee7ed4c3e 100644 --- a/gst/gstminiobject.c +++ b/gst/gstminiobject.c @@ -48,30 +48,6 @@ static GstAllocTrace *_gst_mini_object_trace; /* Mutex used for weak referencing */ G_LOCK_DEFINE_STATIC (weak_refs_mutex); -/** - * gst_mini_object_register: - * @name: name of the new boxed type - * - * This function creates a new G_TYPE_BOXED derived type id for a new boxed type - * with name @name. The default miniobject refcounting copy and free function - * are used for the boxed type. - * - * Returns: a new G_TYPE_BOXED derived type id for @name. - */ -GType -gst_mini_object_register (const gchar * name) -{ - GType type; - - g_return_val_if_fail (name != NULL, 0); - - type = g_boxed_type_register_static (name, - (GBoxedCopyFunc) gst_mini_object_ref, - (GBoxedFreeFunc) gst_mini_object_unref); - - return type; -} - /** * gst_mini_object_init: * @mini_object: a #GstMiniObject diff --git a/gst/gstminiobject.h b/gst/gstminiobject.h index 630eb447e6..347702be38 100644 --- a/gst/gstminiobject.h +++ b/gst/gstminiobject.h @@ -193,8 +193,6 @@ struct _GstMiniObject { } *weak_refs; }; -GType gst_mini_object_register (const gchar *name); - void gst_mini_object_init (GstMiniObject *mini_object, GType type, gsize size); @@ -217,6 +215,10 @@ gboolean gst_mini_object_replace (GstMiniObject **olddata, GstMin gboolean gst_mini_object_take (GstMiniObject **olddata, GstMiniObject *newdata); GstMiniObject * gst_mini_object_steal (GstMiniObject **olddata); +#define GST_DEFINE_MINI_OBJECT(TypeName,type_name) \ + G_DEFINE_BOXED_TYPE(TypeName,type_name, \ + (GBoxedCopyFunc) gst_mini_object_ref, \ + (GBoxedFreeFunc)gst_mini_object_unref) G_END_DECLS diff --git a/gst/gstquery.c b/gst/gstquery.c index e61b54fc48..74874a9759 100644 --- a/gst/gstquery.c +++ b/gst/gstquery.c @@ -108,6 +108,8 @@ static GstQueryTypeDefinition standard_definitions[] = { {GST_QUERY_NONE, NULL, NULL, 0} }; +GST_DEFINE_MINI_OBJECT (GstQuery, gst_query); + void _priv_gst_query_initialize (void) { @@ -135,7 +137,7 @@ _priv_gst_query_initialize (void) } g_static_mutex_unlock (&mutex); - gst_query_get_type (); + _gst_query_type = gst_query_get_type (); } /** @@ -176,16 +178,6 @@ gst_query_type_to_quark (GstQueryType query) return def->quark; } -GType -gst_query_get_type (void) -{ - if (G_UNLIKELY (_gst_query_type == 0)) { - _gst_query_type = gst_mini_object_register ("GstQuery"); - } - return _gst_query_type; -} - - /** * gst_query_type_register: * @nick: The nick of the new query diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 7ba548acc7..d22f42338b 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -102,11 +102,13 @@ EXPORTS gst_buffer_flags_get_type gst_buffer_get_meta gst_buffer_get_sizes + gst_buffer_get_type gst_buffer_is_span_fast gst_buffer_iterate_meta gst_buffer_join gst_buffer_list_foreach gst_buffer_list_get + gst_buffer_list_get_type gst_buffer_list_insert gst_buffer_list_len gst_buffer_list_new @@ -180,6 +182,7 @@ EXPORTS gst_caps_from_string gst_caps_get_size gst_caps_get_structure + gst_caps_get_type gst_caps_intersect gst_caps_intersect_full gst_caps_intersect_mode_get_type @@ -395,6 +398,7 @@ EXPORTS gst_event_copy_segment gst_event_get_seqnum gst_event_get_structure + gst_event_get_type gst_event_has_name gst_event_new_buffer_size gst_event_new_caps