summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Dewender <gnome@JonnyJD.net>2013-09-28 13:19:02 +0200
committerTim-Philipp Müller <tim@centricular.com>2014-07-22 11:48:32 +0100
commitdf7e7daa29ba14447b4d8dd43c35d8a3ad9e4984 (patch)
tree02bbb613c3e70f057001624817614949c9516248
parent572a43a2cdaa814f2101c78f3b7449d9b8128ae5 (diff)
downloadgstreamer-plugins-base-1.2.tar.gz
audiocdsrc: Don't consider trailing data tracks for MusicBrainz disc id calculation1.2
MusicBrainz removes trailing data tracks from releases on the server and also for the calculation of the MusicBrainz Disc ID. https://bugzilla.gnome.org/show_bug.cgi?id=708991
-rw-r--r--gst-libs/gst/audio/gstaudiocdsrc.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/gst-libs/gst/audio/gstaudiocdsrc.c b/gst-libs/gst/audio/gstaudiocdsrc.c
index 716ea0a41..8296ab2c2 100644
--- a/gst-libs/gst/audio/gstaudiocdsrc.c
+++ b/gst-libs/gst/audio/gstaudiocdsrc.c
@@ -1189,13 +1189,23 @@ gst_audio_cd_src_calculate_musicbrainz_discid (GstAudioCdSrc * src)
gchar *ptr;
gchar tmp[9];
gulong i;
+ unsigned int last_audio_track;
guint leadout_sector;
gsize digest_len;
s = g_string_new (NULL);
+ /* MusicBrainz doesn't consider trailing data tracks
+ * data tracks up front stay, since the disc has to start with 1 */
+ last_audio_track = 0;
+ for (i = 0; i < src->priv->num_tracks; i++) {
+ if (src->priv->tracks[i].is_audio) {
+ last_audio_track = src->priv->tracks[i].num;
+ }
+ }
+
leadout_sector =
- src->priv->tracks[src->priv->num_tracks - 1].end + 1 + CD_MSF_OFFSET;
+ src->priv->tracks[last_audio_track - 1].end + 1 + CD_MSF_OFFSET;
/* generate SHA digest */
sha = g_checksum_new (G_CHECKSUM_SHA1);
@@ -1203,10 +1213,8 @@ gst_audio_cd_src_calculate_musicbrainz_discid (GstAudioCdSrc * src)
g_string_append_printf (s, "%02X", src->priv->tracks[0].num);
g_checksum_update (sha, (guchar *) tmp, 2);
- g_snprintf (tmp, sizeof (tmp), "%02X",
- src->priv->tracks[src->priv->num_tracks - 1].num);
- g_string_append_printf (s, " %02X",
- src->priv->tracks[src->priv->num_tracks - 1].num);
+ g_snprintf (tmp, sizeof (tmp), "%02X", last_audio_track);
+ g_string_append_printf (s, " %02X", last_audio_track);
g_checksum_update (sha, (guchar *) tmp, 2);
g_snprintf (tmp, sizeof (tmp), "%08X", leadout_sector);
@@ -1214,7 +1222,7 @@ gst_audio_cd_src_calculate_musicbrainz_discid (GstAudioCdSrc * src)
g_checksum_update (sha, (guchar *) tmp, 8);
for (i = 0; i < 99; i++) {
- if (i < src->priv->num_tracks) {
+ if (i < last_audio_track) {
guint frame_offset = src->priv->tracks[i].start + CD_MSF_OFFSET;
g_snprintf (tmp, sizeof (tmp), "%08X", frame_offset);