From 8b3c7040d410b20ff1fdfef9b6908cd3d966c8aa Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 17 Sep 2002 21:22:31 +0000 Subject: [PATCH] - Added value transform functions for caps and props boxed types Original commit message from CVS: - Added value transform functions for caps and props boxed types - implement gst_props_new with a GList - fixed silly typo in _gst_type_* --- gst/gstcaps.c | 32 ++++++++++++++++++++++++++++++++ gst/gstcaps.h | 2 +- gst/gstprops.c | 35 ++++++++++++++++++++++++++++++++++- gst/gstprops.h | 2 +- 4 files changed, 68 insertions(+), 3 deletions(-) diff --git a/gst/gstcaps.c b/gst/gstcaps.c index 2e13dd2..f7ed767 100644 --- a/gst/gstcaps.c +++ b/gst/gstcaps.c @@ -32,6 +32,35 @@ static GMutex *_gst_caps_chunk_lock; GType _gst_caps_type; +static void +transform_func (const GValue *src_value, + GValue *dest_value) +{ + GstCaps *caps = g_value_peek_pointer (src_value); + GString *result = g_string_new (""); + + g_string_append_printf (result, "(GstCaps *) "); + + while (caps) { + gchar *props; + GValue value = { 0, }; /* the important thing is that value.type = 0 */ + + g_string_append_printf (result, + "{ %s; ", gst_caps_get_mime (caps)); + + g_value_init (&value, GST_TYPE_PROPS); + g_value_set_boxed (&value, caps->properties); + props = g_strdup_value_contents (&value); + + g_string_append (result, props); + g_free (props); + + caps = caps->next; + g_string_append_printf (result, " }%s", caps?", ":""); + } + dest_value->data[0].v_pointer = result->str; +} + void _gst_caps_initialize (void) { @@ -44,6 +73,9 @@ _gst_caps_initialize (void) (GBoxedCopyFunc) gst_caps_ref, (GBoxedFreeFunc) gst_caps_unref); + g_value_register_transform_func (_gst_caps_type, + G_TYPE_STRING, + transform_func); } static guint16 diff --git a/gst/gstcaps.h b/gst/gstcaps.h index b3d4eb3..c3c998b 100644 --- a/gst/gstcaps.h +++ b/gst/gstcaps.h @@ -32,7 +32,7 @@ typedef struct _GstCaps GstCaps; extern GType _gst_caps_type; -#define GST_TYPE_CAPS (_get_caps_type) +#define GST_TYPE_CAPS (_gst_caps_type) #define GST_CAPS(caps) \ diff --git a/gst/gstprops.c b/gst/gstprops.c index e12c3c5..4902acb 100644 --- a/gst/gstprops.c +++ b/gst/gstprops.c @@ -68,6 +68,33 @@ static GMutex *_gst_props_chunk_lock; static gboolean gst_props_entry_check_compatibility (GstPropsEntry *entry1, GstPropsEntry *entry2); static GList* gst_props_list_copy (GList *propslist); +static void +transform_func (const GValue *src_value, + GValue *dest_value) +{ + GstProps *props = g_value_peek_pointer (src_value); + GString *result = g_string_new (""); + GList *propslist = props->properties; + + while (propslist) { + GstPropsEntry *entry = (GstPropsEntry *)propslist->data; + const gchar *name = g_quark_to_string (entry->propid); + + switch (entry->propstype) { + case GST_PROPS_STRING_TYPE: + g_string_append_printf (result, "%s='%s'", name, entry->data.string_data.string); + default: + break; + } + + propslist = g_list_next (propslist); + if (propslist) { + g_string_append (result, "; "); + } + } + dest_value->data[0].v_pointer = result->str; +} + void _gst_props_initialize (void) @@ -86,6 +113,9 @@ _gst_props_initialize (void) (GBoxedCopyFunc) gst_props_ref, (GBoxedFreeFunc) gst_props_unref); + g_value_register_transform_func (_gst_props_type, + G_TYPE_STRING, + transform_func); } static void @@ -107,7 +137,7 @@ gst_props_debug_entry (GstPropsEntry *entry) GST_DEBUG (GST_CAT_PROPERTIES, "%s: bool %d", name, entry->data.bool_data); break; case GST_PROPS_STRING_TYPE: - GST_DEBUG (GST_CAT_PROPERTIES, "%s: string %s", name, entry->data.string_data.string); + GST_DEBUG (GST_CAT_PROPERTIES, "%s: string \"%s\"", name, entry->data.string_data.string); break; case GST_PROPS_INT_RANGE_TYPE: GST_DEBUG (GST_CAT_PROPERTIES, "%s: int range %d-%d", name, entry->data.int_range_data.min, @@ -185,6 +215,9 @@ G_STMT_START { \ case GST_PROPS_STRING_TYPE: \ entry->data.string_data.string = g_strdup (va_arg (var_args, gchar*)); \ break; \ + case GST_PROPS_LIST_TYPE: \ + entry->data.list_data.entries = g_list_copy (va_arg (var_args, GList*)); \ + break; \ default: \ break; \ } \ diff --git a/gst/gstprops.h b/gst/gstprops.h index 61876da..ec4ae23 100644 --- a/gst/gstprops.h +++ b/gst/gstprops.h @@ -33,7 +33,7 @@ G_BEGIN_DECLS typedef struct _GstProps GstProps; extern GType _gst_props_type; -#define GST_TYPE_PROPS (_get_props_type) +#define GST_TYPE_PROPS (_gst_props_type) typedef enum { GST_PROPS_END_TYPE = 0, -- 2.7.4