diff options
author | Alessandro Ghedini <alessandro@ghedini.me> | 2014-03-25 11:57:43 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-04-04 18:35:29 +0200 |
commit | da984c3648b98f982824c9fadc3a85eff03a5f52 (patch) | |
tree | a926e75d96eaf9335319906aeaf492fb43314a3e | |
parent | e7977ec87574331510d11751551109cf4794084d (diff) | |
download | mpv-da984c3648b98f982824c9fadc3a85eff03a5f52.tar.bz2 mpv-da984c3648b98f982824c9fadc3a85eff03a5f52.tar.xz |
af_volume: use replaygain side data
-rw-r--r-- | audio/filter/af_volume.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/audio/filter/af_volume.c b/audio/filter/af_volume.c index 20131eb8aa..b215ba4da6 100644 --- a/audio/filter/af_volume.c +++ b/audio/filter/af_volume.c @@ -116,20 +116,32 @@ static int control(struct af_instance *af, int cmd, void *arg) if (af_fmt_is_planar(in->format)) mp_audio_set_format(af->data, af_fmt_to_planar(af->data->format)); s->rgain = 1.0; - if ((s->rgain_track || s->rgain_album) && af->metadata) { + if ((s->rgain_track || s->rgain_album) && + (af->replaygain_data || af->metadata)) { float gain, peak; char *gain_tag = NULL, *peak_tag = NULL; if (s->rgain_track) { - gain_tag = "REPLAYGAIN_TRACK_GAIN"; - peak_tag = "REPLAYGAIN_TRACK_PEAK"; + if (af->replaygain_data) { + gain = af->replaygain_data->track_gain; + peak = af->replaygain_data->track_peak; + } else { + gain_tag = "REPLAYGAIN_TRACK_GAIN"; + peak_tag = "REPLAYGAIN_TRACK_PEAK"; + } } else if (s->rgain_album) { - gain_tag = "REPLAYGAIN_ALBUM_GAIN"; - peak_tag = "REPLAYGAIN_ALBUM_PEAK"; + if (af->replaygain_data) { + gain = af->replaygain_data->album_gain; + peak = af->replaygain_data->album_peak; + } else { + gain_tag = "REPLAYGAIN_ALBUM_GAIN"; + peak_tag = "REPLAYGAIN_ALBUM_PEAK"; + } } - if (!decode_gain(af, gain_tag, &gain) && - !decode_peak(af, peak_tag, &peak)) + if (af->replaygain_data || + (!decode_gain(af, gain_tag, &gain) && + !decode_peak(af, peak_tag, &peak))) { gain += s->rgain_preamp; af_from_dB(1, &gain, &s->rgain, 20.0, -200.0, 60.0); |