summaryrefslogtreecommitdiff
path: root/streamer.c
diff options
context:
space:
mode:
authorGravatar David Bryant <david@wavpack.com>2010-05-26 21:40:28 -0700
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-27 20:00:11 +0200
commita91cc5615297f805245d1473e5e58a32f4990b3b (patch)
tree1c96e875b8e0d352f0977b89e9a4286f0bd20f44 /streamer.c
parente68ebdc183812edc60e5a3ccac833ab5789e85bc (diff)
fix for inconsistent use of replaygain_xxxxx_gain field and incorrect handling of replaygain peak scale option
Diffstat (limited to 'streamer.c')
-rw-r--r--streamer.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/streamer.c b/streamer.c
index 1d4b11d1..082ccb19 100644
--- a/streamer.c
+++ b/streamer.c
@@ -1140,22 +1140,22 @@ apply_replay_gain_int16 (playItem_t *it, char *bytes, int size) {
if (it->replaygain_track_gain == 0) {
return;
}
+ vol = db_to_amp (streaming_track->replaygain_track_gain) * 1000;
if (conf_replaygain_scale && replaygain_scale) {
- vol = db_to_amp (streaming_track->replaygain_track_gain)/streaming_track->replaygain_track_peak * 1000;
- }
- else {
- vol = db_to_amp (streaming_track->replaygain_track_gain) * 1000;
+ if (vol * streaming_track->replaygain_track_peak > 1000) {
+ vol = 1000 / streaming_track->replaygain_track_peak;
+ }
}
}
else if (conf_replaygain_mode == 2) {
if (it->replaygain_album_gain == 0) {
return;
}
+ vol = db_to_amp (streaming_track->replaygain_album_gain) * 1000;
if (conf_replaygain_scale && replaygain_scale) {
- vol = db_to_amp (streaming_track->replaygain_album_gain)/streaming_track->replaygain_album_peak * 1000;
- }
- else {
- vol = db_to_amp (streaming_track->replaygain_album_gain) * 1000;
+ if (vol * streaming_track->replaygain_album_peak > 1000) {
+ vol = 1000 / streaming_track->replaygain_album_peak;
+ }
}
}
int16_t *s = (int16_t*)bytes;
@@ -1182,22 +1182,22 @@ apply_replay_gain_float32 (playItem_t *it, char *bytes, int size) {
if (it->replaygain_track_gain == 0) {
return;
}
+ vol = db_to_amp (it->replaygain_track_gain);
if (conf_replaygain_scale && replaygain_scale) {
- vol = db_to_amp (it->replaygain_track_gain)/it->replaygain_track_peak;
- }
- else {
- vol = db_to_amp (it->replaygain_track_gain);
+ if (vol * it->replaygain_track_peak > 1.f) {
+ vol = 1.f / it->replaygain_track_peak;
+ }
}
}
else if (conf_replaygain_mode == 2) {
if (it->replaygain_album_gain == 0) {
return;
}
+ vol = db_to_amp (it->replaygain_album_gain);
if (conf_replaygain_scale && replaygain_scale) {
- vol = db_to_amp (it->replaygain_album_gain)/it->replaygain_album_peak;
- }
- else {
- vol = db_to_amp (it->replaygain_album_gain);
+ if (vol * it->replaygain_album_peak > 1.f) {
+ vol = 1.f / it->replaygain_album_peak;
+ }
}
}
float *s = (float*)bytes;