summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Arigo <markarigo@gmail.com>2006-07-21 20:15:01 +0000
committerMark Arigo <markarigo@gmail.com>2006-07-21 20:15:01 +0000
commitb50e8935e11881f5257e4aa31229345e48789315 (patch)
tree29c24fa9cdf8919e5b29ca694581b742915d0a69
parentaaee4fb4a0827fa0afd4b5f18d85c66b3822f36c (diff)
downloadrockbox-b50e8935e11881f5257e4aa31229345e48789315.tar.gz
rockbox-b50e8935e11881f5257e4aa31229345e48789315.zip
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
-rw-r--r--firmware/id3.c6
-rw-r--r--firmware/replaygain.c23
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 )
322 int desc_len = strlen(tag); 322 int desc_len = strlen(tag);
323 int value_len = 0; 323 int value_len = 0;
324 324
325 /* Only parse TXXX replaygain tags if tag version < 2.4 */ 325 /* Note: for ID3v2.4, parse_replaygain will not overwrite replaygain
326 if (entry->id3version < ID3_VER_2_4 && 326 values already parsed from RVA2 tags */
327 (tag - entry->id3v2buf + desc_len + 2) < bufferpos) { 327 if ((tag - entry->id3v2buf + desc_len + 2) < bufferpos) {
328 /* At least part of the value was read, so we can safely try to 328 /* At least part of the value was read, so we can safely try to
329 * parse it 329 * parse it
330 */ 330 */
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,
358{ 358{
359 char **p = NULL; 359 char **p = NULL;
360 360
361 if ((strcasecmp(key, "replaygain_track_gain") == 0) 361 if (((strcasecmp(key, "replaygain_track_gain") == 0)
362 || ((strcasecmp(key, "rg_radio") == 0) && !entry->track_gain)) 362 || (strcasecmp(key, "rg_radio") == 0)) && !entry->track_gain)
363 { 363 {
364 entry->track_gain = get_replaygain(value); 364 entry->track_gain = get_replaygain(value);
365 p = &(entry->track_gain_string); 365 p = &(entry->track_gain_string);
366 } 366 }
367 else if ((strcasecmp(key, "replaygain_album_gain") == 0) 367 else if (((strcasecmp(key, "replaygain_album_gain") == 0)
368 || ((strcasecmp(key, "rg_audiophile") == 0) && !entry->album_gain)) 368 || (strcasecmp(key, "rg_audiophile") == 0)) && !entry->album_gain)
369 { 369 {
370 entry->album_gain = get_replaygain(value); 370 entry->album_gain = get_replaygain(value);
371 p = &(entry->album_gain_string); 371 p = &(entry->album_gain_string);
372 } 372 }
373 else if ((strcasecmp(key, "replaygain_track_peak") == 0) 373 else if (((strcasecmp(key, "replaygain_track_peak") == 0)
374 || ((strcasecmp(key, "rg_peak") == 0) && !entry->track_peak)) 374 || (strcasecmp(key, "rg_peak") == 0)) && !entry->track_peak)
375 { 375 {
376 entry->track_peak = get_replaypeak(value); 376 entry->track_peak = get_replaypeak(value);
377 } 377 }
378 else if (strcasecmp(key, "replaygain_album_peak") == 0) 378 else if ((strcasecmp(key, "replaygain_album_peak") == 0)
379 && !entry->album_peak)
379 { 380 {
380 entry->album_peak = get_replaypeak(value); 381 entry->album_peak = get_replaypeak(value);
381 } 382 }
@@ -455,14 +456,14 @@ static long get_rva_values(const char *frame, long *gain, long *peak,
455long parse_replaygain_rva(const char* key, const char* value, 456long parse_replaygain_rva(const char* key, const char* value,
456 struct mp3entry* entry, char* buffer, int length) 457 struct mp3entry* entry, char* buffer, int length)
457{ 458{
458 if ((strcasecmp(key, "track") == 0) && *value == MASTER_CHANNEL 459 /* Values will be overwritten if they already exist. This gives priority to
459 && !entry->track_gain && !entry->track_peak) 460 replaygain in RVA2 fields over TXXX fields for ID3v2.4. */
461 if ((strcasecmp(key, "track") == 0) && *value == MASTER_CHANNEL)
460 { 462 {
461 return get_rva_values(value + 1, &(entry->track_gain), &(entry->track_peak), 463 return get_rva_values(value + 1, &(entry->track_gain), &(entry->track_peak),
462 &(entry->track_gain_string), buffer, length); 464 &(entry->track_gain_string), buffer, length);
463 } 465 }
464 else if ((strcasecmp(key, "album") == 0) && *value == MASTER_CHANNEL 466 else if ((strcasecmp(key, "album") == 0) && *value == MASTER_CHANNEL)
465 && !entry->album_gain && !entry->album_peak)
466 { 467 {
467 return get_rva_values(value + 1, &(entry->album_gain), &(entry->album_peak), 468 return get_rva_values(value + 1, &(entry->album_gain), &(entry->album_peak),
468 &(entry->album_gain_string), buffer, length); 469 &(entry->album_gain_string), buffer, length);