From 424c5cb6f7eddcd79898c916f083f7020a314a4a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Wed, 4 Oct 2006 10:24:49 +0000 Subject: [PATCH] gst/apetag/gstapedemux.c: Extract disc/album/medium number and count and try harder to extract track number/count. Original commit message from CVS: * gst/apetag/gstapedemux.c: (ape_demux_parse_tags): Extract disc/album/medium number and count and try harder to extract track number/count. --- ChangeLog | 6 ++++++ gst/apetag/gstapedemux.c | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index a9a5404..ba6e093 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-10-04 Tim-Philipp Müller + + * gst/apetag/gstapedemux.c: (ape_demux_parse_tags): + Extract disc/album/medium number and count and try harder + to extract track number/count. + 2006-10-03 Thomas Vander Stichele * configure.ac: diff --git a/gst/apetag/gstapedemux.c b/gst/apetag/gstapedemux.c index 1fdcc13..6675995 100644 --- a/gst/apetag/gstapedemux.c +++ b/gst/apetag/gstapedemux.c @@ -140,7 +140,12 @@ static const struct _GstApeDemuxTagTableEntry "copyright", GST_TAG_COPYRIGHT}, { "genre", GST_TAG_GENRE}, { "isrc", GST_TAG_ISRC}, { + "disc", GST_TAG_ALBUM_VOLUME_NUMBER}, { + "disk", GST_TAG_ALBUM_VOLUME_NUMBER}, { + "discnumber", GST_TAG_ALBUM_VOLUME_NUMBER}, { + "disknumber", GST_TAG_ALBUM_VOLUME_NUMBER}, { "track", GST_TAG_TRACK_NUMBER}, { + "tracknumber", GST_TAG_TRACK_NUMBER}, { "year", GST_TAG_DATE}, { "file", GST_TAG_LOCATION} }; @@ -203,6 +208,21 @@ ape_demux_parse_tags (const guint8 * data, gint size) tag = g_strndup ((gchar *) data + 8, n - 9); val = g_strndup ((gchar *) data + n, len); + /* special-case 'media' tag, could be e.g. "CD 1/2" */ + if (g_ascii_strcasecmp (tag, "media") == 0) { + gchar *sp, *sp2; + + g_free (tag); + tag = g_strdup ("discnumber"); + /* get rid of the medium in front */ + sp = strchr (val, ' '); + while (sp != NULL && (sp2 = strchr (sp + 1, ' ')) != NULL) + sp = sp2; + if (sp) { + g_memmove (val, sp + 1, strlen (sp + 1) + 1); + } + } + if (ape_demux_get_gst_tag_from_tag (tag, &gst_tag, &gst_tag_type)) { GValue v = { 0, }; @@ -226,12 +246,25 @@ ape_demux_parse_tags (const guint8 * data, gint size) g_value_init (&v, G_TYPE_UINT); g_value_set_uint (&v, v_uint); } - GST_LOG ("checking for count: %s", val); + GST_LOG ("checking for track count: %s", val); /* might be 0/N or -1/N to specify that there is only a count */ if (sscanf (val, "%d/%u", &dummy, &count) == 2 && count > 0) { gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_TRACK_COUNT, count, NULL); } + } else if (strcmp (gst_tag, GST_TAG_ALBUM_VOLUME_NUMBER) == 0) { + gint dummy; + + if (sscanf (val, "%u", &v_uint) == 1 && v_uint > 0) { + g_value_init (&v, G_TYPE_UINT); + g_value_set_uint (&v, v_uint); + } + GST_LOG ("checking for volume count: %s", val); + /* might be 0/N or -1/N to specify that there is only a count */ + if (sscanf (val, "%d/%u", &dummy, &count) == 2 && count > 0) { + gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, + GST_TAG_ALBUM_VOLUME_COUNT, count, NULL); + } } else if (sscanf (val, "%u", &v_uint) == 1) { g_value_init (&v, G_TYPE_UINT); g_value_set_uint (&v, v_uint); -- 2.7.4