diff options
author | Jan Ekström <jeebjp@gmail.com> | 2019-03-11 01:00:27 +0200 |
---|---|---|
committer | Jan Ekström <jeebjp@gmail.com> | 2019-03-11 01:00:27 +0200 |
commit | 199aabddcc0105b504cc8e0cb240bc3c89288c1a (patch) | |
tree | fa7eb297a8e11b5e0d9339196f23918d6a4d0b85 /demux/demux_lavf.c | |
parent | 7c565547b80fdc2a1bfdf31f9725129bcb16aa9d (diff) | |
parent | 1d0349d3b5d9a263251fcb3b0d7e135d4731bfd0 (diff) | |
download | mpv-199aabddcc0105b504cc8e0cb240bc3c89288c1a.tar.bz2 mpv-199aabddcc0105b504cc8e0cb240bc3c89288c1a.tar.xz |
Merge branch 'master' into pr6360
Manual changes done:
* Merged the interface-changes under the already master'd changes.
* Moved the hwdec-related option changes to video/decode/vd_lavc.c.
Diffstat (limited to 'demux/demux_lavf.c')
-rw-r--r-- | demux/demux_lavf.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index ad71937580..8ec856d0c8 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2004 Michael Niedermayer <michaelni@gmx.at> + * Copyright (C) 2018 Google LLC * * This file is part of mpv. * @@ -588,17 +589,27 @@ static void export_replaygain(demuxer_t *demuxer, struct sh_stream *sh, av_rgain = (AVReplayGain*)src_sd->data; rgain = talloc_ptrtype(demuxer, rgain); - rgain->track_gain = (av_rgain->track_gain != INT32_MIN) ? - av_rgain->track_gain / 100000.0f : 0.0; - - rgain->track_peak = (av_rgain->track_peak != 0.0) ? - av_rgain->track_peak / 100000.0f : 1.0; - - rgain->album_gain = (av_rgain->album_gain != INT32_MIN) ? - av_rgain->album_gain / 100000.0f : 0.0; - - rgain->album_peak = (av_rgain->album_peak != 0.0) ? - av_rgain->album_peak / 100000.0f : 1.0; + // Set values in *rgain, using track gain as a fallback for album gain + // if the latter is not present. This behavior matches that in + // demux/demux.c's decode_rgain; if you change this, please make + // equivalent changes there too. + if (av_rgain->track_gain != INT32_MIN && av_rgain->track_peak != 0.0) { + // Track gain is defined. + rgain->track_gain = av_rgain->track_gain / 100000.0f; + rgain->track_peak = av_rgain->track_peak / 100000.0f; + + if (av_rgain->album_gain != INT32_MIN && + av_rgain->album_peak != 0.0) + { + // Album gain is also defined. + rgain->album_gain = av_rgain->album_gain / 100000.0f; + rgain->album_peak = av_rgain->album_peak / 100000.0f; + } else { + // Album gain is undefined; fall back to track gain. + rgain->album_gain = rgain->track_gain; + rgain->album_peak = rgain->track_peak; + } + } // This must be run only before the stream was added, otherwise there // will be race conditions with accesses from the user thread. |