+2004-02-17 David Schleef <ds@schleef.org>
+
+ * 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 <julien@moutte.net>
* gst/gstpad.c: (gst_pad_try_set_caps): Reverting my change according
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",
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);
}
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);
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,
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,
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);
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);
#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;
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,
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
BOOLEAN:VOID
BOOLEAN:POINTER
POINTER:POINTER
+BOXED:BOXED
/***** Then do the Real Pad *****/
/* Pad signals and args */
enum {
- REAL_CAPS_NEGO_FAILED,
REAL_LINKED,
REAL_UNLINKED,
REAL_FIXATE,
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,
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); */
_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;
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) {
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;
}
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)
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);
*
* Returns: a new #GstStructure.
*/
-GstStructure *gst_structure_copy(GstStructure *structure)
+GstStructure *gst_structure_copy(const GstStructure *structure)
{
GstStructure *new_structure;
GstStructureField *field;
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;
}
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);
#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)
{
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,
#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)
{
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,
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",
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);
}