1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Mark Arigo 2006-07-21 20:15:01 +00:00
parent aaee4fb4a0
commit b50e8935e1
2 changed files with 15 additions and 14 deletions

View file

@ -322,9 +322,9 @@ static int parseuser( struct mp3entry* entry, char* tag, int bufferpos )
int desc_len = strlen(tag); int desc_len = strlen(tag);
int value_len = 0; int value_len = 0;
/* Only parse TXXX replaygain tags if tag version < 2.4 */ /* Note: for ID3v2.4, parse_replaygain will not overwrite replaygain
if (entry->id3version < ID3_VER_2_4 && values already parsed from RVA2 tags */
(tag - entry->id3v2buf + desc_len + 2) < bufferpos) { if ((tag - entry->id3v2buf + desc_len + 2) < bufferpos) {
/* At least part of the value was read, so we can safely try to /* At least part of the value was read, so we can safely try to
* parse it * parse it
*/ */

View file

@ -358,24 +358,25 @@ long parse_replaygain(const char* key, const char* value,
{ {
char **p = NULL; char **p = NULL;
if ((strcasecmp(key, "replaygain_track_gain") == 0) if (((strcasecmp(key, "replaygain_track_gain") == 0)
|| ((strcasecmp(key, "rg_radio") == 0) && !entry->track_gain)) || (strcasecmp(key, "rg_radio") == 0)) && !entry->track_gain)
{ {
entry->track_gain = get_replaygain(value); entry->track_gain = get_replaygain(value);
p = &(entry->track_gain_string); p = &(entry->track_gain_string);
} }
else if ((strcasecmp(key, "replaygain_album_gain") == 0) else if (((strcasecmp(key, "replaygain_album_gain") == 0)
|| ((strcasecmp(key, "rg_audiophile") == 0) && !entry->album_gain)) || (strcasecmp(key, "rg_audiophile") == 0)) && !entry->album_gain)
{ {
entry->album_gain = get_replaygain(value); entry->album_gain = get_replaygain(value);
p = &(entry->album_gain_string); p = &(entry->album_gain_string);
} }
else if ((strcasecmp(key, "replaygain_track_peak") == 0) else if (((strcasecmp(key, "replaygain_track_peak") == 0)
|| ((strcasecmp(key, "rg_peak") == 0) && !entry->track_peak)) || (strcasecmp(key, "rg_peak") == 0)) && !entry->track_peak)
{ {
entry->track_peak = get_replaypeak(value); 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); 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, long parse_replaygain_rva(const char* key, const char* value,
struct mp3entry* entry, char* buffer, int length) struct mp3entry* entry, char* buffer, int length)
{ {
if ((strcasecmp(key, "track") == 0) && *value == MASTER_CHANNEL /* Values will be overwritten if they already exist. This gives priority to
&& !entry->track_gain && !entry->track_peak) 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), return get_rva_values(value + 1, &(entry->track_gain), &(entry->track_peak),
&(entry->track_gain_string), buffer, length); &(entry->track_gain_string), buffer, length);
} }
else if ((strcasecmp(key, "album") == 0) && *value == MASTER_CHANNEL else if ((strcasecmp(key, "album") == 0) && *value == MASTER_CHANNEL)
&& !entry->album_gain && !entry->album_peak)
{ {
return get_rva_values(value + 1, &(entry->album_gain), &(entry->album_peak), return get_rva_values(value + 1, &(entry->album_gain), &(entry->album_peak),
&(entry->album_gain_string), buffer, length); &(entry->album_gain_string), buffer, length);