improve type registration
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 2 Nov 2010 12:31:25 +0000 (13:31 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Wed, 23 Feb 2011 09:35:36 +0000 (10:35 +0100)
gst/gst.c
gst/gst_private.h
gst/gstbuffer.c
gst/gstbuffer.h
gst/gstbufferlist.c
gst/gstbufferlist.h
gst/gstcaps.c
gst/gstcaps.h
plugins/elements/gsttypefindelement.c

index cf27a66..2b6ff38 100644 (file)
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -667,6 +667,8 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
   _priv_gst_quarks_initialize ();
   _gst_format_initialize ();
   _gst_query_initialize ();
+  _gst_caps_initialize ();
+
   g_type_class_ref (gst_object_get_type ());
   g_type_class_ref (gst_pad_get_type ());
   g_type_class_ref (gst_element_factory_get_type ());
@@ -751,7 +753,6 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
   gst_structure_get_type ();
   _gst_value_initialize ();
   g_type_class_ref (gst_param_spec_fraction_get_type ());
-  gst_caps_get_type ();
   _gst_event_initialize ();
   _gst_buffer_initialize ();
   _gst_buffer_list_initialize ();
index 2cafbee..5316067 100644 (file)
@@ -98,6 +98,7 @@ void _priv_gst_quarks_initialize (void);
  * we want enterprise edition packagers dancing on our heads) */
 void  _gst_buffer_initialize (void);
 void  _gst_buffer_list_initialize (void);
+void  _gst_caps_initialize (void);
 void  _gst_event_initialize (void);
 void  _gst_format_initialize (void);
 void  _gst_message_initialize (void);
index c204d9e..b51d19c 100644 (file)
 #include "gstminiobject.h"
 #include "gstversion.h"
 
-static GType _gst_buffer_type = 0;
-
-GType
-gst_buffer_get_type (void)
-{
-  if (G_UNLIKELY (_gst_buffer_type == 0)) {
-    _gst_buffer_type = gst_mini_object_register ("GstBuffer");
-  }
-  return _gst_buffer_type;
-}
+GType _gst_buffer_type = 0;
 
 /* buffer alignment in bytes
  * an alignment of 8 would be the same as malloc() guarantees
@@ -167,15 +158,14 @@ aligned_malloc (gpointer * memptr, guint size)
 void
 _gst_buffer_initialize (void)
 {
-  /* the GstMiniObject types need to be class_ref'd once before it can be
-   * done from multiple threads;
-   * see http://bugzilla.gnome.org/show_bug.cgi?id=304551 */
-  gst_buffer_get_type ();
+  if (G_LIKELY (_gst_buffer_type == 0)) {
+    _gst_buffer_type = gst_mini_object_register ("GstBuffer");
 #ifdef HAVE_GETPAGESIZE
 #ifdef BUFFER_ALIGNMENT_PAGESIZE
-  _gst_buffer_data_alignment = getpagesize ();
+    _gst_buffer_data_alignment = getpagesize ();
 #endif
 #endif
+  }
 }
 
 /**
@@ -337,7 +327,6 @@ gst_buffer_new (void)
  * gst_buffer_try_new_and_alloc() if you want to handle this case
  * gracefully or have gotten the size to allocate from an untrusted
  * source such as a media stream.
- * 
  *
  * Note that when @size == 0, the buffer data pointer will be NULL.
  *
index 68c3e73..567cda3 100644 (file)
@@ -32,6 +32,8 @@ G_BEGIN_DECLS
 
 typedef struct _GstBuffer GstBuffer;
 
+extern GType _gst_buffer_type;
+
 /**
  * GST_BUFFER_TRACE_NAME:
  *
@@ -39,7 +41,7 @@ typedef struct _GstBuffer GstBuffer;
  */
 #define GST_BUFFER_TRACE_NAME           "GstBuffer"
 
-#define GST_TYPE_BUFFER                         (gst_buffer_get_type())
+#define GST_TYPE_BUFFER                         (_gst_buffer_type)
 #define GST_IS_BUFFER(obj)                      (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_BUFFER))
 #define GST_BUFFER_CAST(obj)                    ((GstBuffer *)(obj))
 #define GST_BUFFER(obj)                         (GST_BUFFER_CAST(obj))
@@ -287,8 +289,6 @@ struct _GstBuffer {
   gpointer _gst_reserved[GST_PADDING];
 };
 
-GType       gst_buffer_get_type (void);
-
 /* allocation */
 GstBuffer * gst_buffer_new               (void);
 GstBuffer * gst_buffer_new_and_alloc     (guint size);
index 08633ba..b801c0d 100644 (file)
@@ -159,14 +159,14 @@ struct _GstBufferListIterator
   GList *last_returned;
 };
 
-static GType _gst_buffer_list_type = 0;
+GType _gst_buffer_list_type = 0;
 
 void
 _gst_buffer_list_initialize (void)
 {
-  GType type = gst_buffer_list_get_type ();
-
-  _gst_buffer_list_type = type;
+  if (G_LIKELY (_gst_buffer_list_type == 0)) {
+    _gst_buffer_list_type = gst_mini_object_register ("GstBufferList");
+  }
 }
 
 static GstBufferList *
@@ -401,15 +401,6 @@ gst_buffer_list_get (GstBufferList * list, guint group, guint idx)
   return NULL;
 }
 
-GType
-gst_buffer_list_get_type (void)
-{
-  if (G_UNLIKELY (_gst_buffer_list_type == 0)) {
-    _gst_buffer_list_type = gst_mini_object_register ("GstBufferList");
-  }
-  return _gst_buffer_list_type;
-}
-
 /**
  * gst_buffer_list_iterate:
  * @list: a #GstBufferList
index 80f26fe..1ff34ae 100644 (file)
@@ -27,7 +27,9 @@
 
 G_BEGIN_DECLS
 
-#define GST_TYPE_BUFFER_LIST      (gst_buffer_list_get_type ())
+extern GType _gst_buffer_list_type;
+
+#define GST_TYPE_BUFFER_LIST      (_gst_buffer_list_type)
 #define GST_IS_BUFFER_LIST(obj)   (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_BUFFER_LIST))
 #define GST_BUFFER_LIST_CAST(obj) ((GstBufferList *)obj)
 #define GST_BUFFER_LIST(obj)      (GST_BUFFER_LIST_CAST(obj))
@@ -104,8 +106,6 @@ typedef GstBufferListItem (*GstBufferListFunc)   (GstBuffer **buffer, guint grou
                                                   gpointer user_data);
 
 
-GType gst_buffer_list_get_type (void);
-
 /* allocation */
 GstBufferList *gst_buffer_list_new (void);
 
index 9ada2af..45364cd 100644 (file)
@@ -122,19 +122,17 @@ static void gst_caps_transform_to_string (const GValue * src_value,
 static gboolean gst_caps_from_string_inplace (GstCaps * caps,
     const gchar * string);
 
-static GType _gst_caps_type = 0;
+GType _gst_caps_type = 0;
 
-GType
-gst_caps_get_type (void)
+void
+_gst_caps_initialize (void)
 {
-  if (G_UNLIKELY (_gst_caps_type == 0)) {
+  if (G_LIKELY (_gst_caps_type == 0)) {
     _gst_caps_type = gst_mini_object_register ("GstCaps");
 
     g_value_register_transform_func (_gst_caps_type,
         G_TYPE_STRING, gst_caps_transform_to_string);
   }
-
-  return _gst_caps_type;
 }
 
 static GstCaps *
index c58c630..2302d5e 100644 (file)
@@ -27,7 +27,9 @@
 
 G_BEGIN_DECLS
 
-#define GST_TYPE_CAPS             (gst_caps_get_type())
+extern GType _gst_caps_type;
+
+#define GST_TYPE_CAPS             (_gst_caps_type)
 #define GST_CAPS(object)          ((GstCaps*)object)
 #define GST_IS_CAPS(object)       (GST_IS_MINI_OBJECT_TYPE(object, GST_TYPE_CAPS))
 
@@ -254,7 +256,6 @@ 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,
index 01621fc..1f776d8 100644 (file)
@@ -216,7 +216,7 @@ gst_type_find_element_class_init (GstTypeFindElementClass * typefind_class)
 
   g_object_class_install_property (gobject_class, PROP_CAPS,
       g_param_spec_boxed ("caps", _("caps"),
-          _("detected capabilities in stream"), gst_caps_get_type (),
+          _("detected capabilities in stream"), GST_TYPE_CAPS,
           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MINIMUM,
       g_param_spec_uint ("minimum", _("minimum"),
@@ -230,7 +230,7 @@ gst_type_find_element_class_init (GstTypeFindElementClass * typefind_class)
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_FORCE_CAPS,
       g_param_spec_boxed ("force-caps", _("force caps"),
-          _("force caps without doing a typefind"), gst_caps_get_type (),
+          _("force caps without doing a typefind"), GST_TYPE_CAPS,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   /**
    * GstTypeFindElement::have-type: