tag: id3v2: We don't want the same string multiple times in a tag list for the same tag ever, for any tag, not jus...

Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c:
* gst-libs/gst/tag/id3v2.h:
* gst-libs/gst/tag/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.
This commit is contained in:
Tim-Philipp Müller 2007-11-14 21:39:47 +00:00 committed by Tim-Philipp Müller
parent 66c4980024
commit 1dd5350109
3 changed files with 16 additions and 13 deletions

View file

@ -163,9 +163,6 @@ id3demux_read_id3v2_tag (GstBuffer * buffer, guint * id3v2_size,
*tags = work.tags;
if (work.prev_genre)
g_free (work.prev_genre);
return result;
}

View file

@ -75,9 +75,6 @@ typedef struct {
guint8 *parse_data;
guint parse_size;
/* Previous genre string, for simple duplicate removal */
gchar *prev_genre;
/* To collect day/month from obsolete TDAT frame if it exists */
guint pending_month;
guint pending_day;

View file

@ -794,14 +794,23 @@ id3v2_tag_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
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);
}
break;
}