From 67455089a46c83c4570e105e970c2ac8aa4966b8 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Wed, 18 Feb 2004 05:26:59 +0000 Subject: [PATCH] gst/elements/gstmultifilesrc.c: Use G_TYPE_STRING in signal prototype instead of G_TYPE_POINTER. Original commit message from CVS: * gst/elements/gstmultifilesrc.c: (gst_multifilesrc_class_init): Use G_TYPE_STRING in signal prototype instead of G_TYPE_POINTER. * gst/elements/gsttypefind.c: (gst_type_find_element_class_init): Use GST_TYPE_CAPS in signal prototype. * gst/gstcaps.c: (_gst_caps_initialize), (gst_caps_copy_conditional): Convert GST_TYPE_CAPS to boxed. * gst/gstelement.c: (gst_element_class_init): Use GST_TYPE_TAG_LIST in signal prototype. * gst/gstindex.c: (gst_index_class_init): * gst/gstindex.h: Add GST_TYPE_INDEX_ENTRY type. * gst/gstmarshal.list: Add necessary marshal types. * gst/gstpad.c: (gst_real_pad_class_init), (_gst_real_pad_fixate_accumulator), (gst_pad_link_fixate), (gst_pad_recover_caps_error): Use GST_TYPE_CAPS in signal prototypes. Fix some debugging strings. * gst/gststructure.c: (_gst_structure_initialize), (gst_structure_copy), (_gst_structure_copy_conditional): * gst/gststructure.h: Convert GST_TYPE_STRUCTURE to boxed. * gst/gsttag.c: (gst_tag_list_get_type): * gst/gsttag.h: Add GST_TYPE_TAG_LIST type. --- ChangeLog | 27 +++++++ gst/elements/gstmultifilesrc.c | 4 +- gst/elements/gsttypefind.c | 4 +- gst/gstcaps.c | 110 +++-------------------------- gst/gstelement.c | 7 +- gst/gstindex.c | 4 +- gst/gstindex.h | 3 + gst/gstmarshal.list | 3 + gst/gstpad.c | 40 ++--------- gst/gststructure.c | 58 ++------------- gst/gststructure.h | 2 +- gst/gsttag.c | 19 +++++ gst/gsttag.h | 2 + gst/gsttaglist.c | 19 +++++ gst/gsttaglist.h | 2 + plugins/elements/gstmultifilesrc.c | 4 +- plugins/elements/gsttypefind.c | 4 +- 17 files changed, 108 insertions(+), 204 deletions(-) diff --git a/ChangeLog b/ChangeLog index 49f2f783a0..11c905b0ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,30 @@ +2004-02-17 David Schleef + + * gst/elements/gstmultifilesrc.c: (gst_multifilesrc_class_init): + Use G_TYPE_STRING in signal prototype instead of G_TYPE_POINTER. + * gst/elements/gsttypefind.c: (gst_type_find_element_class_init): + Use GST_TYPE_CAPS in signal prototype. + * gst/gstcaps.c: (_gst_caps_initialize), (gst_caps_copy_conditional): + Convert GST_TYPE_CAPS to boxed. + * gst/gstelement.c: (gst_element_class_init): + Use GST_TYPE_TAG_LIST in signal prototype. + * gst/gstindex.c: (gst_index_class_init): + * gst/gstindex.h: + Add GST_TYPE_INDEX_ENTRY type. + * gst/gstmarshal.list: + Add necessary marshal types. + * gst/gstpad.c: (gst_real_pad_class_init), + (_gst_real_pad_fixate_accumulator), (gst_pad_link_fixate), + (gst_pad_recover_caps_error): + Use GST_TYPE_CAPS in signal prototypes. Fix some debugging strings. + * gst/gststructure.c: (_gst_structure_initialize), + (gst_structure_copy), (_gst_structure_copy_conditional): + * gst/gststructure.h: + Convert GST_TYPE_STRUCTURE to boxed. + * gst/gsttag.c: (gst_tag_list_get_type): + * gst/gsttag.h: + Add GST_TYPE_TAG_LIST type. + 2004-02-17 Julien MOUTTE * gst/gstpad.c: (gst_pad_try_set_caps): Reverting my change according diff --git a/gst/elements/gstmultifilesrc.c b/gst/elements/gstmultifilesrc.c index 1b730a06ab..248e4b3a64 100644 --- a/gst/elements/gstmultifilesrc.c +++ b/gst/elements/gstmultifilesrc.c @@ -96,8 +96,8 @@ gst_multifilesrc_class_init (GstMultiFileSrcClass *klass) gst_multifilesrc_signals[NEW_FILE] = g_signal_new ("new_file", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstMultiFileSrcClass, new_file), NULL, NULL, - g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, - G_TYPE_POINTER); + g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, + G_TYPE_STRING); g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATIONS, g_param_spec_pointer("locations","locations","locations", diff --git a/gst/elements/gsttypefind.c b/gst/elements/gsttypefind.c index 47a03853d9..dc76baac94 100644 --- a/gst/elements/gsttypefind.c +++ b/gst/elements/gsttypefind.c @@ -158,8 +158,8 @@ gst_type_find_element_class_init (GstTypeFindElementClass *typefind_class) gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have_type", G_TYPE_FROM_CLASS (typefind_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL, - gst_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2, - G_TYPE_UINT, G_TYPE_POINTER); + gst_marshal_VOID__UINT_BOXED, G_TYPE_NONE, 2, + G_TYPE_UINT, GST_TYPE_CAPS | G_SIGNAL_TYPE_STATIC_SCOPE); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_type_find_element_change_state); } diff --git a/gst/gstcaps.c b/gst/gstcaps.c index 3aa92c1830..4e473c1988 100644 --- a/gst/gstcaps.c +++ b/gst/gstcaps.c @@ -43,51 +43,18 @@ static void _gst_caps_transform_to_string (const GValue *src_value, GValue *dest_value); -static void _gst_caps_value_init (GValue *value); -static void _gst_caps_value_free (GValue *value); -static void _gst_caps_value_copy (const GValue *src, GValue *dest); -static gpointer _gst_caps_value_peek_pointer (const GValue *value); -static gchar* _gst_caps_collect_value (GValue *value, - guint n_collect_values, - GTypeCValue *collect_values, - guint collect_flags); -static gchar* _gst_caps_lcopy_value (const GValue *value, - guint n_collect_values, - GTypeCValue *collect_values, - guint collect_flags); static gboolean _gst_caps_from_string_inplace (GstCaps *caps, const gchar *string); +static GstCaps * gst_caps_copy_conditional (const GstCaps *src); GType _gst_caps_type; void _gst_caps_initialize (void) { - static const GTypeValueTable type_value_table = { - _gst_caps_value_init, - _gst_caps_value_free, - _gst_caps_value_copy, - _gst_caps_value_peek_pointer, - "p", - _gst_caps_collect_value, - "p", - _gst_caps_lcopy_value, - }; - static const GTypeInfo caps2_info = { - 0, - NULL, - NULL, - NULL, - NULL, - NULL, - 0, - 0, - NULL, - &type_value_table, - }; - - _gst_caps_type = g_type_register_static (G_TYPE_BOXED, "GstCaps", - &caps2_info, 0); + _gst_caps_type = g_boxed_type_register_static ("GstCaps", + (GBoxedCopyFunc)gst_caps_copy_conditional, + (GBoxedFreeFunc)gst_caps_free); g_value_register_transform_func (_gst_caps_type, G_TYPE_STRING, _gst_caps_transform_to_string); @@ -1141,76 +1108,15 @@ static void _gst_caps_transform_to_string (const GValue *src_value, gst_caps_to_string (src_value->data[0].v_pointer); } -static void _gst_caps_value_init (GValue *value) +static GstCaps * gst_caps_copy_conditional (const GstCaps *src) { - value->data[0].v_pointer = NULL; -} - -static void _gst_caps_value_free (GValue *value) -{ - if (value->data[0].v_pointer) gst_caps_free (value->data[0].v_pointer); -} - -static void _gst_caps_value_copy (const GValue *src, GValue *dest) -{ - if (dest->data[0].v_pointer) { - gst_caps_free (dest->data[0].v_pointer); - } - if (src->data[0].v_pointer) { - dest->data[0].v_pointer = gst_caps_copy (src->data[0].v_pointer); + if (src) { + return gst_caps_copy (src); } else { - dest->data[0].v_pointer = NULL; + return NULL; } } -static gpointer _gst_caps_value_peek_pointer (const GValue *value) -{ - return value->data[0].v_pointer; -} - -/* adapted from gboxed.c */ -static gchar* -_gst_caps_collect_value (GValue *value, - guint n_collect_values, - GTypeCValue *collect_values, - guint collect_flags) -{ - if (!collect_values[0].v_pointer) - value->data[0].v_pointer = NULL; - else - if (collect_flags & G_VALUE_NOCOPY_CONTENTS) - { - value->data[0].v_pointer = collect_values[0].v_pointer; - value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS; - } - else - value->data[0].v_pointer = gst_caps_copy (collect_values[0].v_pointer); - - return NULL; -} - -static gchar* -_gst_caps_lcopy_value (const GValue *value, - guint n_collect_values, - GTypeCValue *collect_values, - guint collect_flags) -{ - GstCaps **boxed_p = collect_values[0].v_pointer; - - if (!boxed_p) - return g_strdup_printf ("value location for `%s' passed as NULL", - G_VALUE_TYPE_NAME (value)); - - if (!value->data[0].v_pointer) - *boxed_p = NULL; - else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) - *boxed_p = value->data[0].v_pointer; - else - *boxed_p = gst_caps_copy (value->data[0].v_pointer); - - return NULL; -} - /* fixate utility functions */ gboolean gst_caps_structure_fixate_field_nearest_int (GstStructure *structure, diff --git a/gst/gstelement.c b/gst/gstelement.c index 9c6e95dcea..9db24a2e02 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -133,7 +133,8 @@ gst_element_class_init (GstElementClass *klass) g_signal_new ("error", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstElementClass, error), NULL, NULL, gst_marshal_VOID__OBJECT_POINTER_STRING, G_TYPE_NONE, 3, - GST_TYPE_ELEMENT, G_TYPE_POINTER, G_TYPE_STRING); + GST_TYPE_ELEMENT, G_TYPE_POINTER, + G_TYPE_STRING); gst_element_signals[EOS] = g_signal_new ("eos", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstElementClass, eos), NULL, NULL, @@ -141,8 +142,8 @@ gst_element_class_init (GstElementClass *klass) gst_element_signals[FOUND_TAG] = g_signal_new ("found-tag", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstElementClass, found_tag), NULL, NULL, - gst_marshal_VOID__OBJECT_POINTER, G_TYPE_NONE, 2, - GST_TYPE_ELEMENT, G_TYPE_POINTER); + gst_marshal_VOID__OBJECT_BOXED, G_TYPE_NONE, 2, + GST_TYPE_ELEMENT, GST_TYPE_TAG_LIST); gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_element_real_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_element_real_get_property); diff --git a/gst/gstindex.c b/gst/gstindex.c index be4371e02f..4f33269d63 100644 --- a/gst/gstindex.c +++ b/gst/gstindex.c @@ -140,8 +140,8 @@ gst_index_class_init (GstIndexClass *klass) gst_index_signals[ENTRY_ADDED] = g_signal_new ("entry_added", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstIndexClass, entry_added), NULL, NULL, - gst_marshal_VOID__POINTER, G_TYPE_NONE, 1, - G_TYPE_POINTER); + gst_marshal_VOID__BOXED, G_TYPE_NONE, 1, + GST_TYPE_INDEX_ENTRY); gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_index_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_index_get_property); diff --git a/gst/gstindex.h b/gst/gstindex.h index 80a71c038b..b24a93ec4c 100644 --- a/gst/gstindex.h +++ b/gst/gstindex.h @@ -37,6 +37,8 @@ G_BEGIN_DECLS #define GST_IS_INDEX_CLASS(klass) (GST_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_INDEX)) #define GST_INDEX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_INDEX, GstIndexClass)) +#define GST_TYPE_INDEX_ENTRY (gst_index_entry_get_type()) + typedef struct _GstIndexEntry GstIndexEntry; typedef struct _GstIndexGroup GstIndexGroup; typedef struct _GstIndex GstIndex; @@ -229,6 +231,7 @@ GstIndexEntry* gst_index_get_assoc_entry_full (GstIndex *index, gint id, gpointer user_data); /* working with index entries */ +GType gst_index_entry_get_type (void); GstIndexEntry * gst_index_entry_copy (GstIndexEntry *entry); void gst_index_entry_free (GstIndexEntry *entry); gboolean gst_index_entry_assoc_map (GstIndexEntry *entry, diff --git a/gst/gstmarshal.list b/gst/gstmarshal.list index 48fff87f28..631aa38591 100644 --- a/gst/gstmarshal.list +++ b/gst/gstmarshal.list @@ -2,11 +2,13 @@ VOID:VOID VOID:BOOLEAN VOID:INT VOID:STRING +VOID:BOXED VOID:POINTER VOID:POINTER,OBJECT VOID:OBJECT VOID:OBJECT,PARAM VOID:OBJECT,POINTER +VOID:OBJECT,BOXED VOID:OBJECT,POINTER,STRING VOID:OBJECT,STRING VOID:INT,INT @@ -16,3 +18,4 @@ VOID:UINT,POINTER BOOLEAN:VOID BOOLEAN:POINTER POINTER:POINTER +BOXED:BOXED diff --git a/gst/gstpad.c b/gst/gstpad.c index 567f0c33a4..275d2ebe9a 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -113,7 +113,6 @@ gst_pad_dispose (GObject *object) /***** Then do the Real Pad *****/ /* Pad signals and args */ enum { - REAL_CAPS_NEGO_FAILED, REAL_LINKED, REAL_UNLINKED, REAL_FIXATE, @@ -177,11 +176,6 @@ gst_real_pad_class_init (GstRealPadClass *klass) gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_real_pad_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_real_pad_get_property); - gst_real_pad_signals[REAL_CAPS_NEGO_FAILED] = - g_signal_new ("caps_nego_failed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GstRealPadClass, caps_nego_failed), NULL, NULL, - gst_marshal_VOID__POINTER, G_TYPE_NONE, 1, - G_TYPE_POINTER); gst_real_pad_signals[REAL_LINKED] = g_signal_new ("linked", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRealPadClass, linked), NULL, NULL, @@ -196,8 +190,8 @@ gst_real_pad_class_init (GstRealPadClass *klass) g_signal_new ("fixate", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRealPadClass, appfixatefunc), _gst_real_pad_fixate_accumulator, NULL, - gst_marshal_POINTER__POINTER, G_TYPE_POINTER, 1, - G_TYPE_POINTER); + gst_marshal_BOXED__BOXED, GST_TYPE_CAPS, 1, + GST_TYPE_CAPS | G_SIGNAL_TYPE_STATIC_SCOPE); /* gtk_object_add_arg_type ("GstRealPad::active", G_TYPE_BOOLEAN, */ /* GTK_ARG_READWRITE, REAL_ARG_ACTIVE); */ @@ -218,7 +212,7 @@ static gboolean _gst_real_pad_fixate_accumulator (GSignalInvocationHint *ihint, GValue *return_accu, const GValue *handler_return, gpointer dummy) { - if (g_value_get_pointer (handler_return)) { + if (gst_value_get_caps (handler_return)) { g_value_copy (handler_return, return_accu); /* stop emission if something was returned */ return FALSE; @@ -1178,7 +1172,7 @@ gst_pad_link_fixate (GstPadLink *link) case 4: newcaps = _gst_pad_default_fixate_func ( GST_PAD(link->srcpad), caps); - GST_DEBUG ("core fixated to % "GST_PTR_FORMAT, newcaps); + GST_DEBUG ("core fixated to %"GST_PTR_FORMAT, newcaps); break; } if (newcaps) { @@ -2723,32 +2717,6 @@ gst_pad_caps_change_notify (GstPad *pad) gboolean gst_pad_recover_caps_error (GstPad *pad, const GstCaps *allowed) { -#if 0 - /* FIXME */ - GstElement *parent; - - g_return_val_if_fail (GST_IS_PAD (pad), FALSE); - - /* see if someone can resolve this */ - if (g_signal_has_handler_pending (G_OBJECT (pad), - gst_real_pad_signals[REAL_CAPS_NEGO_FAILED], 0, FALSE)) - { - /* clear pad caps first */ - gst_caps_replace (&GST_PAD_CAPS (pad), NULL); - - /* lets hope some signal manages to set the caps again */ - g_signal_emit (G_OBJECT (pad), gst_real_pad_signals[REAL_CAPS_NEGO_FAILED], 0, allowed); - - /* if the pad has caps now or is disabled, it's ok */ - if (GST_PAD_CAPS (pad) != NULL || !GST_PAD_IS_ACTIVE (pad)) - return TRUE; - } - - /* report error */ - parent = gst_pad_get_parent (pad); - GST_ELEMENT_ERROR (parent, CORE, PAD, (NULL), - ("negotiation failed on pad %s:%s", GST_DEBUG_PAD_NAME (pad))); -#endif return FALSE; } diff --git a/gst/gststructure.c b/gst/gststructure.c index 7e1cb0ea13..f79120fa6a 100644 --- a/gst/gststructure.c +++ b/gst/gststructure.c @@ -49,10 +49,7 @@ static GstStructureField *gst_structure_id_get_field(const GstStructure *structu static void _gst_structure_transform_to_string(const GValue *src_value, GValue *dest_value); -static void _gst_structure_value_init (GValue *value); -static void _gst_structure_value_free (GValue *value); -static void _gst_structure_value_copy (const GValue *src, GValue *dest); -static gpointer _gst_structure_value_peek_pointer (const GValue *value); +static GstStructure *_gst_structure_copy_conditional (const GstStructure *structure); GType gst_structure_get_type(void) @@ -62,36 +59,9 @@ GType gst_structure_get_type(void) void _gst_structure_initialize(void) { - static const GTypeValueTable type_value_table = { - _gst_structure_value_init, - _gst_structure_value_free, - _gst_structure_value_copy, - _gst_structure_value_peek_pointer, - NULL, - NULL, - NULL, - NULL, - }; - static const GTypeInfo structure_info = { - 0, - NULL, - NULL, - NULL, - NULL, - NULL, - 0, /* sizeof(GstStructure), */ - 0, - NULL, /* _gst_structure_init, */ - &type_value_table, - }; - - _gst_structure_type = g_type_register_static(G_TYPE_BOXED, "GstStructure", - &structure_info, 0); -#if 0 _gst_structure_type = g_boxed_type_register_static("GstStructure", - (GBoxedCopyFunc) gst_structure_copy, + (GBoxedCopyFunc) _gst_structure_copy_conditional, (GBoxedFreeFunc) gst_structure_free); -#endif g_value_register_transform_func(_gst_structure_type, G_TYPE_STRING, _gst_structure_transform_to_string); @@ -202,7 +172,7 @@ GstStructure *gst_structure_new_valist(const gchar *name, * * Returns: a new #GstStructure. */ -GstStructure *gst_structure_copy(GstStructure *structure) +GstStructure *gst_structure_copy(const GstStructure *structure) { GstStructure *new_structure; GstStructureField *field; @@ -1390,25 +1360,9 @@ _gst_structure_transform_to_string(const GValue *src_value, GValue *dest_value) gst_structure_to_string (src_value->data[0].v_pointer); } - -static void _gst_structure_value_init (GValue *value) +static GstStructure *_gst_structure_copy_conditional (const GstStructure *structure) { - value->data[0].v_pointer = gst_structure_empty_new(""); -} - -static void _gst_structure_value_free (GValue *value) -{ - gst_structure_free(value->data[0].v_pointer); - -} - -static void _gst_structure_value_copy (const GValue *src, GValue *dest) -{ - dest->data[0].v_pointer = gst_structure_copy(src->data[0].v_pointer); -} - -static gpointer _gst_structure_value_peek_pointer (const GValue *value) -{ - return value->data[0].v_pointer; + if (structure) return gst_structure_copy (structure); + return NULL; } diff --git a/gst/gststructure.h b/gst/gststructure.h index 796f482e00..3bbd6dc8ba 100644 --- a/gst/gststructure.h +++ b/gst/gststructure.h @@ -49,7 +49,7 @@ GstStructure *gst_structure_new(const gchar *name, const gchar *firstfield, ...); GstStructure *gst_structure_new_valist(const gchar *name, const gchar *firstfield, va_list varargs); -GstStructure *gst_structure_copy(GstStructure *structure); +GstStructure *gst_structure_copy(const GstStructure *structure); void gst_structure_free(GstStructure *structure); G_CONST_RETURN gchar *gst_structure_get_name(const GstStructure *structure); diff --git a/gst/gsttag.c b/gst/gsttag.c index bcd36377b6..f03932430a 100644 --- a/gst/gsttag.c +++ b/gst/gsttag.c @@ -51,6 +51,25 @@ static GHashTable *__tags; #define TAG_LOCK g_mutex_lock (__tag_mutex) #define TAG_UNLOCK g_mutex_unlock (__tag_mutex) +GType +gst_tag_list_get_type (void) +{ + static GType _gst_tag_list_type; + + if (_gst_tag_list_type == 0) { + _gst_tag_list_type = g_boxed_type_register_static ("GstTagList", + (GBoxedCopyFunc) gst_tag_list_copy, + (GBoxedFreeFunc) gst_tag_list_free); + +#if 0 + g_value_register_transform_func(_gst_tag_list_type, G_TYPE_STRING, + _gst_structure_transform_to_string); +#endif + } + + return _gst_tag_list_type; +} + void _gst_tag_initialize (void) { diff --git a/gst/gsttag.h b/gst/gsttag.h index f44ec8020d..004f3196eb 100644 --- a/gst/gsttag.h +++ b/gst/gsttag.h @@ -53,12 +53,14 @@ typedef enum { typedef GstStructure GstTagList; #define GST_TAG_LIST(x) ((GstTagList *) (x)) #define GST_IS_TAG_LIST(x) (gst_is_tag_list (GST_TAG_LIST (x))) +#define GST_TYPE_TAG_LIST (gst_tag_list_get_type ()) typedef void (* GstTagForeachFunc) (const GstTagList *list, const gchar *tag, gpointer user_data); typedef void (* GstTagMergeFunc) (GValue *dest, const GValue *src); /* initialize tagging system */ void _gst_tag_initialize (void); +GType gst_tag_list_get_type (void); void gst_tag_register (gchar * name, GstTagFlag flag, diff --git a/gst/gsttaglist.c b/gst/gsttaglist.c index bcd36377b6..f03932430a 100644 --- a/gst/gsttaglist.c +++ b/gst/gsttaglist.c @@ -51,6 +51,25 @@ static GHashTable *__tags; #define TAG_LOCK g_mutex_lock (__tag_mutex) #define TAG_UNLOCK g_mutex_unlock (__tag_mutex) +GType +gst_tag_list_get_type (void) +{ + static GType _gst_tag_list_type; + + if (_gst_tag_list_type == 0) { + _gst_tag_list_type = g_boxed_type_register_static ("GstTagList", + (GBoxedCopyFunc) gst_tag_list_copy, + (GBoxedFreeFunc) gst_tag_list_free); + +#if 0 + g_value_register_transform_func(_gst_tag_list_type, G_TYPE_STRING, + _gst_structure_transform_to_string); +#endif + } + + return _gst_tag_list_type; +} + void _gst_tag_initialize (void) { diff --git a/gst/gsttaglist.h b/gst/gsttaglist.h index f44ec8020d..004f3196eb 100644 --- a/gst/gsttaglist.h +++ b/gst/gsttaglist.h @@ -53,12 +53,14 @@ typedef enum { typedef GstStructure GstTagList; #define GST_TAG_LIST(x) ((GstTagList *) (x)) #define GST_IS_TAG_LIST(x) (gst_is_tag_list (GST_TAG_LIST (x))) +#define GST_TYPE_TAG_LIST (gst_tag_list_get_type ()) typedef void (* GstTagForeachFunc) (const GstTagList *list, const gchar *tag, gpointer user_data); typedef void (* GstTagMergeFunc) (GValue *dest, const GValue *src); /* initialize tagging system */ void _gst_tag_initialize (void); +GType gst_tag_list_get_type (void); void gst_tag_register (gchar * name, GstTagFlag flag, diff --git a/plugins/elements/gstmultifilesrc.c b/plugins/elements/gstmultifilesrc.c index 1b730a06ab..248e4b3a64 100644 --- a/plugins/elements/gstmultifilesrc.c +++ b/plugins/elements/gstmultifilesrc.c @@ -96,8 +96,8 @@ gst_multifilesrc_class_init (GstMultiFileSrcClass *klass) gst_multifilesrc_signals[NEW_FILE] = g_signal_new ("new_file", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstMultiFileSrcClass, new_file), NULL, NULL, - g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, - G_TYPE_POINTER); + g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, + G_TYPE_STRING); g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATIONS, g_param_spec_pointer("locations","locations","locations", diff --git a/plugins/elements/gsttypefind.c b/plugins/elements/gsttypefind.c index 47a03853d9..dc76baac94 100644 --- a/plugins/elements/gsttypefind.c +++ b/plugins/elements/gsttypefind.c @@ -158,8 +158,8 @@ gst_type_find_element_class_init (GstTypeFindElementClass *typefind_class) gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have_type", G_TYPE_FROM_CLASS (typefind_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL, - gst_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2, - G_TYPE_UINT, G_TYPE_POINTER); + gst_marshal_VOID__UINT_BOXED, G_TYPE_NONE, 2, + G_TYPE_UINT, GST_TYPE_CAPS | G_SIGNAL_TYPE_STATIC_SCOPE); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_type_find_element_change_state); }