summaryrefslogtreecommitdiff
path: root/apps/replaygain.c
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2011-04-04 15:21:44 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2011-04-04 15:21:44 +0000
commitd1766a1510b6092fa8ea0e644fdd1c1e508d9c4d (patch)
tree644a546ce4baf2b4618837d7bc9f774d0c9545ed /apps/replaygain.c
parentf0132528fdc3a966e3d5efba0fb720faabca241b (diff)
downloadrockbox-d1766a1510b6092fa8ea0e644fdd1c1e508d9c4d.tar.gz
rockbox-d1766a1510b6092fa8ea0e644fdd1c1e508d9c4d.zip
Rework parts of the replaygain code to be able to differentiate between 0.00 dB set intentionally and having no replaygain information at all. Bump codec api.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29679 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/replaygain.c')
-rw-r--r--apps/replaygain.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/apps/replaygain.c b/apps/replaygain.c
index 7875e06e72..5eb745a5f1 100644
--- a/apps/replaygain.c
+++ b/apps/replaygain.c
@@ -118,7 +118,7 @@ static long fp_atof(const char* s, int precision)
118 + (((int64_t) frac_part * int_one) / frac_max_int)); 118 + (((int64_t) frac_part * int_one) / frac_max_int));
119} 119}
120 120
121long convert_gain(long gain) 121static long convert_gain(long gain)
122{ 122{
123 /* Don't allow unreasonably low or high gain changes. 123 /* Don't allow unreasonably low or high gain changes.
124 * Our math code can't handle it properly anyway. :) */ 124 * Our math code can't handle it properly anyway. :) */
@@ -171,13 +171,15 @@ void parse_replaygain(const char* key, const char* value,
171 (strcasecmp(key, "rg_radio") == 0)) && 171 (strcasecmp(key, "rg_radio") == 0)) &&
172 !entry->track_gain) 172 !entry->track_gain)
173 { 173 {
174 entry->track_gain = get_replaygain(value); 174 entry->track_level = get_replaygain(value);
175 entry->track_gain = convert_gain(entry->track_level);
175 } 176 }
176 else if (((strcasecmp(key, "replaygain_album_gain") == 0) || 177 else if (((strcasecmp(key, "replaygain_album_gain") == 0) ||
177 (strcasecmp(key, "rg_audiophile") == 0)) && 178 (strcasecmp(key, "rg_audiophile") == 0)) &&
178 !entry->album_gain) 179 !entry->album_gain)
179 { 180 {
180 entry->album_gain = get_replaygain(value); 181 entry->album_level = get_replaygain(value);
182 entry->album_gain = convert_gain(entry->album_level);
181 } 183 }
182 else if (((strcasecmp(key, "replaygain_track_peak") == 0) || 184 else if (((strcasecmp(key, "replaygain_track_peak") == 0) ||
183 (strcasecmp(key, "rg_peak") == 0)) && 185 (strcasecmp(key, "rg_peak") == 0)) &&
@@ -207,12 +209,14 @@ void parse_replaygain_int(bool album, long gain, long peak,
207 209
208 if (album) 210 if (album)
209 { 211 {
210 entry->album_gain = gain; 212 entry->album_level = gain;
211 entry->album_peak = peak; 213 entry->album_gain = convert_gain(gain);
214 entry->album_peak = peak;
212 } 215 }
213 else 216 else
214 { 217 {
215 entry->track_gain = gain; 218 entry->track_level = gain;
216 entry->track_peak = peak; 219 entry->track_gain = convert_gain(gain);
220 entry->track_peak = peak;
217 } 221 }
218} 222}