+2007-11-14 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/id3demux/id3tags.c:
+ * gst/id3demux/id3tags.h:
+ * gst/id3demux/id3v2frames.c: (id3v2_tag_to_taglist):
+ We don't want the same string multiple times in a tag list for the
+ same tag ever, for any tag, not just for GST_TAG_GENRE, so make sure
+ this doesn't happen and remove special-case code for GST_TAG_GENRE.
+
2007-11-14 Tim-Philipp Müller <tim at centricular dot net>
* ext/taglib/gstid3v2mux.cc: (add_musicbrainz_tag), (add_funcs):
break;
}
case G_TYPE_STRING:{
- if (!strcmp (tag_name, GST_TAG_GENRE)) {
- if (work->prev_genre && !strcmp (tag_str, work->prev_genre))
- break; /* Same as the last genre */
- g_free (work->prev_genre);
- work->prev_genre = g_strdup (tag_str);
+ const GValue *val;
+ guint i, num;
+
+ /* make sure we add each unique string only once per tag, we don't want
+ * to have the same genre in the genre list multiple times, for example,
+ * or the same DiscID in there twice just because it's contained in the
+ * tag multiple times under different TXXX user tags */
+ num = gst_tag_list_get_tag_size (tag_list, tag_name);
+ for (i = 0; i < num; ++i) {
+ val = gst_tag_list_get_value_index (tag_list, tag_name, i);
+ if (val != NULL && strcmp (g_value_get_string (val), tag_str) == 0)
+ break;
+ }
+ if (i == num) {
+ gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
+ tag_name, tag_str, NULL);
}
- gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
- tag_name, tag_str, NULL);
break;
}