On Tue, Jun 7, 2016 at 11:55 AM, Kyle Swanson <k...@ylo.ph> wrote: > Signed-off-by: Kyle Swanson <k...@ylo.ph> > --- > doc/filters.texi | 7 +++++++ > libavfilter/af_loudnorm.c | 7 +++++++ > 2 files changed, 14 insertions(+) > > diff --git a/doc/filters.texi b/doc/filters.texi > index d9330e3..439baf9 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -2765,6 +2765,13 @@ measured_I, measured_LRA, measured_TP, and > measured_thresh must also > to be specified in order to use this mode. > Options are true or false. Default is true. > > +@item dual_mono > +Treat mono input files as "dual-mono". If a mono file is intended for > playback > +on a stereo system, its EBU R128 measurement will be perceptually incorrect. > +If set to @code{true}, this option will compensate for this effect. > +Multi-channel input files are not affected by this option. > +Options are true or false. Default is false. > + > @item print_format > Set print format for stats. Options are summary, json, or none. > Default value is none. > diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c > index 9d27c16..604697e 100644 > --- a/libavfilter/af_loudnorm.c > +++ b/libavfilter/af_loudnorm.c > @@ -60,6 +60,7 @@ typedef struct LoudNormContext { > double measured_thresh; > double offset; > int linear; > + int dual_mono; > enum PrintFormat print_format; > > double *buf; > @@ -113,6 +114,7 @@ static const AVOption loudnorm_options[] = { > { "measured_thresh", "measured threshold of input file", > OFFSET(measured_thresh), AV_OPT_TYPE_DOUBLE, {.dbl = -70.}, -99., > 0., FLAGS }, > { "offset", "set offset gain", > OFFSET(offset), AV_OPT_TYPE_DOUBLE, {.dbl = 0.}, -99., > 99., FLAGS }, > { "linear", "normalize linearly if possible", > OFFSET(linear), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, > 1, FLAGS }, > + { "dual_mono", "treat mono input as dual-mono", > OFFSET(dual_mono), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, > 1, FLAGS }, > { "print_format", "set print format for stats", > OFFSET(print_format), AV_OPT_TYPE_INT, {.i64 = NONE}, NONE, PF_NB > -1, FLAGS, "print_format" }, > { "none", 0, 0, > AV_OPT_TYPE_CONST, {.i64 = NONE}, 0, 0, FLAGS, > "print_format" }, > { "json", 0, 0, > AV_OPT_TYPE_CONST, {.i64 = JSON}, 0, 0, FLAGS, > "print_format" }, > @@ -731,6 +733,11 @@ static int config_input(AVFilterLink *inlink) > if (!s->r128_out) > return AVERROR(ENOMEM); > > + if (inlink->channels == 1 && s->dual_mono) { > + ebur128_set_channel(s->r128_in, 0, EBUR128_DUAL_MONO); > + ebur128_set_channel(s->r128_out, 0, EBUR128_DUAL_MONO); > + } > + > s->buf_size = frame_size(inlink->sample_rate, 3000) * inlink->channels; > s->buf = av_malloc_array(s->buf_size, sizeof(*s->buf)); > if (!s->buf) > -- > 2.5.4 (Apple Git-61) >
Pushed. Thanks. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel