diff options
Diffstat (limited to 'firmware/replaygain.c')
-rw-r--r-- | firmware/replaygain.c | 23 |
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, | |||
455 | long parse_replaygain_rva(const char* key, const char* value, | 456 | long 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); |