From b50e8935e11881f5257e4aa31229345e48789315 Mon Sep 17 00:00:00 2001 From: Mark Arigo Date: Fri, 21 Jul 2006 20:15:01 +0000 Subject: Re-enable parsing replaygain from ID3v2.4 TXXX fields since that's the default for foobar2000 0.9, however, give the RVA2 field priority git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10277 a1c6a512-1295-4272-9138-f99709370657 --- firmware/id3.c | 6 +++--- firmware/replaygain.c | 23 ++++++++++++----------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/firmware/id3.c b/firmware/id3.c index b3c09f2e6b..35e0517769 100644 --- a/firmware/id3.c +++ b/firmware/id3.c @@ -322,9 +322,9 @@ static int parseuser( struct mp3entry* entry, char* tag, int bufferpos ) int desc_len = strlen(tag); int value_len = 0; - /* Only parse TXXX replaygain tags if tag version < 2.4 */ - if (entry->id3version < ID3_VER_2_4 && - (tag - entry->id3v2buf + desc_len + 2) < bufferpos) { + /* Note: for ID3v2.4, parse_replaygain will not overwrite replaygain + values already parsed from RVA2 tags */ + if ((tag - entry->id3v2buf + desc_len + 2) < bufferpos) { /* At least part of the value was read, so we can safely try to * parse it */ diff --git a/firmware/replaygain.c b/firmware/replaygain.c index ffabb4b2ac..b7cde7f005 100644 --- a/firmware/replaygain.c +++ b/firmware/replaygain.c @@ -358,24 +358,25 @@ long parse_replaygain(const char* key, const char* value, { char **p = NULL; - if ((strcasecmp(key, "replaygain_track_gain") == 0) - || ((strcasecmp(key, "rg_radio") == 0) && !entry->track_gain)) + if (((strcasecmp(key, "replaygain_track_gain") == 0) + || (strcasecmp(key, "rg_radio") == 0)) && !entry->track_gain) { entry->track_gain = get_replaygain(value); p = &(entry->track_gain_string); } - else if ((strcasecmp(key, "replaygain_album_gain") == 0) - || ((strcasecmp(key, "rg_audiophile") == 0) && !entry->album_gain)) + else if (((strcasecmp(key, "replaygain_album_gain") == 0) + || (strcasecmp(key, "rg_audiophile") == 0)) && !entry->album_gain) { entry->album_gain = get_replaygain(value); p = &(entry->album_gain_string); } - else if ((strcasecmp(key, "replaygain_track_peak") == 0) - || ((strcasecmp(key, "rg_peak") == 0) && !entry->track_peak)) + else if (((strcasecmp(key, "replaygain_track_peak") == 0) + || (strcasecmp(key, "rg_peak") == 0)) && !entry->track_peak) { entry->track_peak = get_replaypeak(value); } - else if (strcasecmp(key, "replaygain_album_peak") == 0) + else if ((strcasecmp(key, "replaygain_album_peak") == 0) + && !entry->album_peak) { entry->album_peak = get_replaypeak(value); } @@ -455,14 +456,14 @@ static long get_rva_values(const char *frame, long *gain, long *peak, long parse_replaygain_rva(const char* key, const char* value, struct mp3entry* entry, char* buffer, int length) { - if ((strcasecmp(key, "track") == 0) && *value == MASTER_CHANNEL - && !entry->track_gain && !entry->track_peak) + /* Values will be overwritten if they already exist. This gives priority to + replaygain in RVA2 fields over TXXX fields for ID3v2.4. */ + if ((strcasecmp(key, "track") == 0) && *value == MASTER_CHANNEL) { return get_rva_values(value + 1, &(entry->track_gain), &(entry->track_peak), &(entry->track_gain_string), buffer, length); } - else if ((strcasecmp(key, "album") == 0) && *value == MASTER_CHANNEL - && !entry->album_gain && !entry->album_peak) + else if ((strcasecmp(key, "album") == 0) && *value == MASTER_CHANNEL) { return get_rva_values(value + 1, &(entry->album_gain), &(entry->album_peak), &(entry->album_gain_string), buffer, length); -- cgit v1.2.3