/* Parse a ReplayGain tag conforming to the "VorbisGain standard". If a * valid tag is found, update mp3entry struct accordingly. Existing values * are not overwritten. * * key Name of the tag. * value Value of the tag. * entry mp3entry struct to update. */ void parse_replaygain(const char* key, const char* value, struct mp3entry* entry) { if (((strcasecmp(key, "replaygain_track_gain") == 0) || (strcasecmp(key, "rg_radio") == 0)) && !entry->track_gain) { entry->track_level = get_replaygain(value); entry->track_gain = convert_gain(entry->track_level); } else if (((strcasecmp(key, "replaygain_album_gain") == 0) || (strcasecmp(key, "rg_audiophile") == 0)) && !entry->album_gain) { entry->album_level = get_replaygain(value); entry->album_gain = convert_gain(entry->album_level); } 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) && !entry->album_peak) { entry->album_peak = get_replaypeak(value); } }
/* Parse a ReplayGain tag conforming to the "VorbisGain standard". If a * valid tag is found, update mp3entry struct accordingly. Existing values * are not overwritten. Returns number of bytes written to buffer. * * key Name of the tag. * value Value of the tag. * entry mp3entry struct to update. * buffer Where to store the text for gain values (for later display). * length Bytes left in buffer. */ long parse_replaygain(const char* key, const char* value, struct mp3entry* entry, char* buffer, int length) { char **p = NULL; 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) { 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) { entry->track_peak = get_replaypeak(value); } else if ((strcasecmp(key, "replaygain_album_peak") == 0) && !entry->album_peak) { entry->album_peak = get_replaypeak(value); } if (p) { int len = strlen(value); len = MIN(len, length - 1); /* A few characters just isn't interesting... */ if (len > 1) { strlcpy(buffer, value, len + 1); *p = buffer; return len + 1; } } return 0; }