gst/id3demux/: We don't want the same string multiple times in a tag list for the...
authorTim-Philipp Müller <tim@centricular.net>
Wed, 14 Nov 2007 21:39:47 +0000 (21:39 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Wed, 14 Nov 2007 21:39:47 +0000 (21:39 +0000)
Original commit message from CVS:
* 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.

ChangeLog
gst/id3demux/id3tags.c
gst/id3demux/id3tags.h
gst/id3demux/id3v2frames.c

index 7ff000456f2669de97f78da572ce054a23e65812..a7af048979db4f7a41ca15cb6332cb5169c238f5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+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):
index b017f2a64c757cca2397656b68a6019d869238b5..0a7a3df9a0dd5d465f3894a9dc8665b26937b83a 100644 (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;
 }
 
index 705a6a0dda4c783aa83448d51ef9deba6d4fdc6c..b5bc950dd41b977cba77c0e299b976311df32c3f 100644 (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;
index efbef079ee33eaca4798dbce19b2fe6fd15bd77d..c8acb886cdbbc8e6b4770d06334d1b0299b6cfcf 100644 (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);
       }
-      gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
-          tag_name, tag_str, NULL);
       break;
     }