improve type registration

This commit is contained in:
Wim Taymans 2010-11-02 13:31:25 +01:00
parent cdde34f0ee
commit 70be8d8d95
9 changed files with 27 additions and 46 deletions

View file

@ -667,6 +667,8 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
_priv_gst_quarks_initialize (); _priv_gst_quarks_initialize ();
_gst_format_initialize (); _gst_format_initialize ();
_gst_query_initialize (); _gst_query_initialize ();
_gst_caps_initialize ();
g_type_class_ref (gst_object_get_type ()); g_type_class_ref (gst_object_get_type ());
g_type_class_ref (gst_pad_get_type ()); g_type_class_ref (gst_pad_get_type ());
g_type_class_ref (gst_element_factory_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_structure_get_type ();
_gst_value_initialize (); _gst_value_initialize ();
g_type_class_ref (gst_param_spec_fraction_get_type ()); g_type_class_ref (gst_param_spec_fraction_get_type ());
gst_caps_get_type ();
_gst_event_initialize (); _gst_event_initialize ();
_gst_buffer_initialize (); _gst_buffer_initialize ();
_gst_buffer_list_initialize (); _gst_buffer_list_initialize ();

View file

@ -98,6 +98,7 @@ void _priv_gst_quarks_initialize (void);
* we want enterprise edition packagers dancing on our heads) */ * we want enterprise edition packagers dancing on our heads) */
void _gst_buffer_initialize (void); void _gst_buffer_initialize (void);
void _gst_buffer_list_initialize (void); void _gst_buffer_list_initialize (void);
void _gst_caps_initialize (void);
void _gst_event_initialize (void); void _gst_event_initialize (void);
void _gst_format_initialize (void); void _gst_format_initialize (void);
void _gst_message_initialize (void); void _gst_message_initialize (void);

View file

@ -128,16 +128,7 @@
#include "gstminiobject.h" #include "gstminiobject.h"
#include "gstversion.h" #include "gstversion.h"
static GType _gst_buffer_type = 0; 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;
}
/* buffer alignment in bytes /* buffer alignment in bytes
* an alignment of 8 would be the same as malloc() guarantees * an alignment of 8 would be the same as malloc() guarantees
@ -167,15 +158,14 @@ aligned_malloc (gpointer * memptr, guint size)
void void
_gst_buffer_initialize (void) _gst_buffer_initialize (void)
{ {
/* the GstMiniObject types need to be class_ref'd once before it can be if (G_LIKELY (_gst_buffer_type == 0)) {
* done from multiple threads; _gst_buffer_type = gst_mini_object_register ("GstBuffer");
* see http://bugzilla.gnome.org/show_bug.cgi?id=304551 */
gst_buffer_get_type ();
#ifdef HAVE_GETPAGESIZE #ifdef HAVE_GETPAGESIZE
#ifdef BUFFER_ALIGNMENT_PAGESIZE #ifdef BUFFER_ALIGNMENT_PAGESIZE
_gst_buffer_data_alignment = getpagesize (); _gst_buffer_data_alignment = getpagesize ();
#endif #endif
#endif #endif
}
} }
/** /**
@ -338,7 +328,6 @@ gst_buffer_new (void)
* gracefully or have gotten the size to allocate from an untrusted * gracefully or have gotten the size to allocate from an untrusted
* source such as a media stream. * source such as a media stream.
* *
*
* Note that when @size == 0, the buffer data pointer will be NULL. * Note that when @size == 0, the buffer data pointer will be NULL.
* *
* MT safe. * MT safe.

View file

@ -32,6 +32,8 @@ G_BEGIN_DECLS
typedef struct _GstBuffer GstBuffer; typedef struct _GstBuffer GstBuffer;
extern GType _gst_buffer_type;
/** /**
* GST_BUFFER_TRACE_NAME: * GST_BUFFER_TRACE_NAME:
* *
@ -39,7 +41,7 @@ typedef struct _GstBuffer GstBuffer;
*/ */
#define GST_BUFFER_TRACE_NAME "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_IS_BUFFER(obj) (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_BUFFER))
#define GST_BUFFER_CAST(obj) ((GstBuffer *)(obj)) #define GST_BUFFER_CAST(obj) ((GstBuffer *)(obj))
#define GST_BUFFER(obj) (GST_BUFFER_CAST(obj)) #define GST_BUFFER(obj) (GST_BUFFER_CAST(obj))
@ -287,8 +289,6 @@ struct _GstBuffer {
gpointer _gst_reserved[GST_PADDING]; gpointer _gst_reserved[GST_PADDING];
}; };
GType gst_buffer_get_type (void);
/* allocation */ /* allocation */
GstBuffer * gst_buffer_new (void); GstBuffer * gst_buffer_new (void);
GstBuffer * gst_buffer_new_and_alloc (guint size); GstBuffer * gst_buffer_new_and_alloc (guint size);

View file

@ -159,14 +159,14 @@ struct _GstBufferListIterator
GList *last_returned; GList *last_returned;
}; };
static GType _gst_buffer_list_type = 0; GType _gst_buffer_list_type = 0;
void void
_gst_buffer_list_initialize (void) _gst_buffer_list_initialize (void)
{ {
GType type = gst_buffer_list_get_type (); if (G_LIKELY (_gst_buffer_list_type == 0)) {
_gst_buffer_list_type = gst_mini_object_register ("GstBufferList");
_gst_buffer_list_type = type; }
} }
static GstBufferList * static GstBufferList *
@ -401,15 +401,6 @@ gst_buffer_list_get (GstBufferList * list, guint group, guint idx)
return NULL; 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: * gst_buffer_list_iterate:
* @list: a #GstBufferList * @list: a #GstBufferList

View file

@ -27,7 +27,9 @@
G_BEGIN_DECLS 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_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_CAST(obj) ((GstBufferList *)obj)
#define GST_BUFFER_LIST(obj) (GST_BUFFER_LIST_CAST(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); gpointer user_data);
GType gst_buffer_list_get_type (void);
/* allocation */ /* allocation */
GstBufferList *gst_buffer_list_new (void); GstBufferList *gst_buffer_list_new (void);

View 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, static gboolean gst_caps_from_string_inplace (GstCaps * caps,
const gchar * string); const gchar * string);
static GType _gst_caps_type = 0; GType _gst_caps_type = 0;
GType void
gst_caps_get_type (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"); _gst_caps_type = gst_mini_object_register ("GstCaps");
g_value_register_transform_func (_gst_caps_type, g_value_register_transform_func (_gst_caps_type,
G_TYPE_STRING, gst_caps_transform_to_string); G_TYPE_STRING, gst_caps_transform_to_string);
} }
return _gst_caps_type;
} }
static GstCaps * static GstCaps *

View file

@ -27,7 +27,9 @@
G_BEGIN_DECLS 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_CAPS(object) ((GstCaps*)object)
#define GST_IS_CAPS(object) (GST_IS_MINI_OBJECT_TYPE(object, GST_TYPE_CAPS)) #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]; gpointer _gst_reserved[GST_PADDING];
}; };
GType gst_caps_get_type (void);
GstCaps * gst_caps_new_empty (void); GstCaps * gst_caps_new_empty (void);
GstCaps * gst_caps_new_any (void); GstCaps * gst_caps_new_any (void);
GstCaps * gst_caps_new_simple (const char *media_type, GstCaps * gst_caps_new_simple (const char *media_type,

View file

@ -216,7 +216,7 @@ gst_type_find_element_class_init (GstTypeFindElementClass * typefind_class)
g_object_class_install_property (gobject_class, PROP_CAPS, g_object_class_install_property (gobject_class, PROP_CAPS,
g_param_spec_boxed ("caps", _("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_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_MINIMUM, g_object_class_install_property (gobject_class, PROP_MINIMUM,
g_param_spec_uint ("minimum", _("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_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_FORCE_CAPS, g_object_class_install_property (gobject_class, PROP_FORCE_CAPS,
g_param_spec_boxed ("force-caps", _("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)); G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/** /**
* GstTypeFindElement::have-type: * GstTypeFindElement::have-type: