summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlessandro Ghedini <alessandro@ghedini.me>2014-03-25 11:57:43 +0100
committerwm4 <wm4@nowhere>2014-04-04 18:35:29 +0200
commitda984c3648b98f982824c9fadc3a85eff03a5f52 (patch)
treea926e75d96eaf9335319906aeaf492fb43314a3e
parente7977ec87574331510d11751551109cf4794084d (diff)
downloadmpv-da984c3648b98f982824c9fadc3a85eff03a5f52.tar.bz2
mpv-da984c3648b98f982824c9fadc3a85eff03a5f52.tar.xz
af_volume: use replaygain side data
-rw-r--r--audio/filter/af_volume.c26
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);