From cd53df63df7aa2ba1a5be171fbb8b60bea7cc9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Thu, 13 Oct 2005 19:14:25 +0000 Subject: [PATCH] ext/mad/gstid3tag.c: Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE. Original commit message from CVS: * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list): Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE. --- ChangeLog | 5 +++++ ext/mad/gstid3tag.c | 30 +++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7053823ebb..1bd95fffd6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-10-13 Tim-Philipp Müller + + * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list): + Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE. + 2005-10-13 Stefan Kost * examples/stats/mp2ogg.c: diff --git a/ext/mad/gstid3tag.c b/ext/mad/gstid3tag.c index 0e4f6fc2b0..12cfda6258 100644 --- a/ext/mad/gstid3tag.c +++ b/ext/mad/gstid3tag.c @@ -528,6 +528,7 @@ gst_mad_id3_to_tag_list (const struct id3_tag * tag) const id3_ucs4_t *ucs4; id3_utf8_t *utf8; GstTagList *tag_list; + GType tag_type; guint i = 0; tag_list = gst_tag_list_new (); @@ -587,8 +588,10 @@ gst_mad_id3_to_tag_list (const struct id3_tag * tag) continue; } + tag_type = gst_tag_get_type (tag_name); + /* be sure to add non-string tags here */ - switch (gst_tag_get_type (tag_name)) { + switch (tag_type) { case G_TYPE_UINT: { guint tmp; @@ -651,11 +654,28 @@ gst_mad_id3_to_tag_list (const struct id3_tag * tag) GST_TAG_DURATION, tmp * 1000 * 1000, NULL); break; } - default: - g_assert (gst_tag_get_type (tag_name) == G_TYPE_STRING); - gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, tag_name, utf8, - NULL); + case G_TYPE_STRING:{ + gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, + tag_name, (const gchar *) utf8, NULL); break; + } + /* handles GST_TYPE_DATE and anything else */ + default:{ + GValue src = { 0, }; + GValue dest = { 0, }; + + g_value_init (&src, G_TYPE_STRING); + g_value_set_string (&src, (const gchar *) utf8); + g_value_init (&dest, tag_type); + if (g_value_transform (&src, &dest)) { + gst_tag_list_add_values (tag_list, GST_TAG_MERGE_APPEND, + tag_name, &dest, NULL); + } else { + GST_WARNING ("Failed to transform tag from string to type '%s'", + g_type_name (tag_type)); + } + break; + } } free (utf8); }