summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2006-05-28 10:39:00 +0000
committerTim-Philipp Müller <tim@centricular.net>2006-05-28 10:39:00 +0000
commitc4b1e8e4aedc9971c1352a85ce2d1cc7da775c8d (patch)
tree49aa1867c1dad8d91009a84f6bc2277a7bbf0ca4
parente4bb4b892f6cadfb7abdb3e02de5168a5e5e89cb (diff)
ext/taglib/gstid3v2mux.cc: Handle writing of track-count or album-volume-count without track-number or albume-volume...
Original commit message from CVS: * ext/taglib/gstid3v2mux.cc: Handle writing of track-count or album-volume-count without track-number or albume-volume-number (in this case the number will just be set to 0). * tests/check/elements/id3v2mux.c: (test_taglib_id3mux_check_tags): It would be nice if we actually checked the values received for track/album-volume number/count in _check_tags(), rather than setting them again ...
-rw-r--r--ChangeLog12
m---------common0
-rw-r--r--ext/taglib/gstid3v2mux.cc35
-rw-r--r--tests/check/elements/id3v2mux.c36
4 files changed, 75 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index b243b19b..64b831dc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2006-05-28 Tim-Philipp Müller <tim at centricular dot net>
+ * ext/taglib/gstid3v2mux.cc:
+ Handle writing of track-count or album-volume-count without
+ track-number or albume-volume-number (in this case the number
+ will just be set to 0).
+
+ * tests/check/elements/id3v2mux.c: (test_taglib_id3mux_check_tags):
+ It would be nice if we actually checked the values received for
+ track/album-volume number/count in _check_tags(), rather than
+ setting them again ...
+
+2006-05-28 Tim-Philipp Müller <tim at centricular dot net>
+
* gst/id3demux/id3v2frames.c: (id3v2_tag_to_taglist):
A track/volume number or count of 0 does not make sense,
just ignore it along with negative numbers (a tag might
diff --git a/common b/common
-Subproject 764c5f25101d20da7f26942c36ba840ba65c63d
+Subproject 325a1848e38c12e0e787baa70e7b9aacf20ee79
diff --git a/ext/taglib/gstid3v2mux.cc b/ext/taglib/gstid3v2mux.cc
index e77cb749..6427b82c 100644
--- a/ext/taglib/gstid3v2mux.cc
+++ b/ext/taglib/gstid3v2mux.cc
@@ -230,6 +230,23 @@ add_one_tag (const GstTagList * list, const gchar * tag, gpointer user_data)
id3v2tag->setTrack (track_number);
}
}
+ } else if (strcmp (tag, GST_TAG_TRACK_COUNT) == 0) {
+ guint n;
+
+ if (gst_tag_list_get_uint_index (list, GST_TAG_TRACK_NUMBER, 0, &n)) {
+ GST_DEBUG ("track-count handled with track-number, skipping");
+ } else if (gst_tag_list_get_uint_index (list, GST_TAG_TRACK_COUNT, 0, &n)) {
+ ID3v2::TextIdentificationFrame * frame;
+ gchar *tag_str;
+
+ frame = new ID3v2::TextIdentificationFrame ("TRCK", String::UTF8);
+ tag_str = g_strdup_printf ("0/%u", n);
+ GST_DEBUG ("Setting track number/count to %s", tag_str);
+
+ id3v2tag->addFrame (frame);
+ frame->setText (tag_str);
+ g_free (tag_str);
+ }
} else if (strcmp (tag, GST_TAG_ALBUM_VOLUME_NUMBER) == 0) {
guint volume_number;
@@ -256,6 +273,24 @@ add_one_tag (const GstTagList * list, const gchar * tag, gpointer user_data)
frame->setText (tag_str);
g_free (tag_str);
}
+ } else if (strcmp (tag, GST_TAG_ALBUM_VOLUME_COUNT) == 0) {
+ guint n;
+
+ if (gst_tag_list_get_uint_index (list, GST_TAG_ALBUM_VOLUME_NUMBER, 0, &n)) {
+ GST_DEBUG ("volume-count handled with volume-number, skipping");
+ } else if (gst_tag_list_get_uint_index (list, GST_TAG_ALBUM_VOLUME_COUNT,
+ 0, &n)) {
+ ID3v2::TextIdentificationFrame * frame;
+ gchar *tag_str;
+
+ frame = new ID3v2::TextIdentificationFrame ("TPOS", String::UTF8);
+ tag_str = g_strdup_printf ("0/%u", n);
+ GST_DEBUG ("Setting album volume number/count to %s", tag_str);
+
+ id3v2tag->addFrame (frame);
+ frame->setText (tag_str);
+ g_free (tag_str);
+ }
} else if (strcmp (tag, GST_TAG_COPYRIGHT) == 0) {
gchar *copyright;
diff --git a/tests/check/elements/id3v2mux.c b/tests/check/elements/id3v2mux.c
index f8024350..73b527f0 100644
--- a/tests/check/elements/id3v2mux.c
+++ b/tests/check/elements/id3v2mux.c
@@ -136,25 +136,45 @@ test_taglib_id3mux_check_tags (GstTagList * tags, guint32 mask)
g_date_free (date);
}
if (mask & (1 << 4)) {
- gst_tag_list_add (tags, GST_TAG_MERGE_KEEP,
- GST_TAG_TRACK_NUMBER, TEST_TRACK_NUMBER, NULL);
+ guint num;
+
+ fail_unless (gst_tag_list_get_uint (tags, GST_TAG_TRACK_NUMBER, &num));
+ fail_unless (num == TEST_TRACK_NUMBER);
}
if (mask & (1 << 5)) {
- gst_tag_list_add (tags, GST_TAG_MERGE_KEEP,
- GST_TAG_TRACK_COUNT, TEST_TRACK_COUNT, NULL);
+ guint count;
+
+ fail_unless (gst_tag_list_get_uint (tags, GST_TAG_TRACK_COUNT, &count));
+ fail_unless (count == TEST_TRACK_COUNT);
}
if (mask & (1 << 6)) {
- gst_tag_list_add (tags, GST_TAG_MERGE_KEEP,
- GST_TAG_ALBUM_VOLUME_NUMBER, TEST_VOLUME_NUMBER, NULL);
+ guint num;
+
+ fail_unless (gst_tag_list_get_uint (tags, GST_TAG_ALBUM_VOLUME_NUMBER,
+ &num));
+ fail_unless (num == TEST_VOLUME_NUMBER);
}
if (mask & (1 << 7)) {
- gst_tag_list_add (tags, GST_TAG_MERGE_KEEP,
- GST_TAG_ALBUM_VOLUME_COUNT, TEST_VOLUME_COUNT, NULL);
+ guint count;
+
+ fail_unless (gst_tag_list_get_uint (tags, GST_TAG_ALBUM_VOLUME_COUNT,
+ &count));
+ fail_unless (count == TEST_VOLUME_COUNT);
}
+#if 0
if (mask & (1 << 8)) {
+ gdouble gain;
+
+ fail_unless (gst_tag_list_get_double (tags, GST_TAG_TRACK_GAIN, &gain));
+ fail_unless (gain == TEST_TRACK_GAIN);
}
if (mask & (1 << 9)) {
+ gdouble gain;
+
+ fail_unless (gst_tag_list_get_double (tags, GST_TAG_ALBUM_GAIN, &gain));
+ fail_unless (gain == TEST_ALBUM_GAIN);
}
+#endif
if (mask & (1 << 10)) {
}
if (mask & (1 << 11)) {