mirror of
https://github.com/mpv-player/mpv.git
synced 2025-12-26 21:00:21 +00:00
demux_lavf: simplify replaygain export
* Early exit if there is no useful data in the AVReplayGain structure (FFmpeg does check that gain of at least one thing is not INT32_MIN, but leaves the peak unchecked so it can be zero). * Less depth in the if structure.
This commit is contained in:
committed by
Kacper Michajłow
parent
1f86733bb3
commit
1b1a8a3e4f
@@ -618,8 +618,15 @@ static void export_replaygain(demuxer_t *demuxer, struct sh_stream *sh,
|
||||
if (!av_rgain)
|
||||
return;
|
||||
|
||||
struct replaygain_data *rgain = talloc_ptrtype(demuxer, rgain);
|
||||
bool track_data_available =
|
||||
av_rgain->track_gain != INT32_MIN && av_rgain->track_peak != 0;
|
||||
bool album_data_available =
|
||||
av_rgain->album_gain != INT32_MIN && av_rgain->album_peak != 0;
|
||||
|
||||
if (!track_data_available && !album_data_available)
|
||||
return;
|
||||
|
||||
struct replaygain_data *rgain = talloc_ptrtype(demuxer, rgain);
|
||||
rgain->track_gain = rgain->album_gain = 0;
|
||||
rgain->track_peak = rgain->album_peak = 1;
|
||||
|
||||
@@ -627,22 +634,17 @@ static void export_replaygain(demuxer_t *demuxer, struct sh_stream *sh,
|
||||
// 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 (track_data_available) {
|
||||
rgain->track_gain = rgain->album_gain =
|
||||
av_rgain->track_gain / 100000.0f;
|
||||
rgain->track_peak = rgain->album_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;
|
||||
}
|
||||
// If album data is actually available, fill it in with proper values.
|
||||
if (album_data_available) {
|
||||
rgain->album_gain = av_rgain->album_gain / 100000.0f;
|
||||
rgain->album_peak = av_rgain->album_peak / 100000.0f;
|
||||
}
|
||||
|
||||
// This must be run only before the stream was added, otherwise there
|
||||
|
||||
Reference in New Issue
Block a user