From 41ba6dad721e618c0e54315bd72ad28afbd7b622 Mon Sep 17 00:00:00 2001 From: Alessandro Ghedini Date: Tue, 25 Mar 2014 11:46:10 +0100 Subject: demux: add replaygain_data field to demuxer_t --- demux/demux_lavf.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'demux/demux_lavf.c') diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index b781971669..00dc2aee2b 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -26,15 +26,19 @@ #include #include +#include "config.h" + #include #include #include #include #include +#if HAVE_AVCODEC_REPLAYGAIN_SIDE_DATA +# include +#endif #include #include "compat/libav.h" -#include "config.h" #include "options/options.h" #include "common/msg.h" #include "common/av_opts.h" @@ -372,6 +376,37 @@ static void select_tracks(struct demuxer *demuxer, int start) } } +static void export_replaygain(demuxer_t *demuxer, AVStream *st) +{ +#if HAVE_AVCODEC_REPLAYGAIN_SIDE_DATA + for (int i = 0; i < st->nb_side_data; i++) { + AVReplayGain *av_rgain; + struct replaygain_data *rgain; + AVPacketSideData *src_sd = &st->side_data[i]; + + if (src_sd->type != AV_PKT_DATA_REPLAYGAIN) + continue; + + 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; + + demuxer->replaygain_data = rgain; + } +#endif +} + static void handle_stream(demuxer_t *demuxer, int i) { lavf_priv_t *priv = demuxer->priv; @@ -396,6 +431,8 @@ static void handle_stream(demuxer_t *demuxer, int i) sh_audio->samplerate = codec->sample_rate; sh_audio->i_bps = codec->bit_rate / 8; + export_replaygain(demuxer, st); + break; } case AVMEDIA_TYPE_VIDEO: { -- cgit v1.2.3