summaryrefslogtreecommitdiff
path: root/firmware/replaygain.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/replaygain.c')
-rw-r--r--firmware/replaygain.c23
1 files changed, 12 insertions, 11 deletions
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);