[FFmpeg-devel] [PATCH] avfilter/af_loudnorm: add dual_mono option
Kyle Swanson
k at ylo.ph
Thu Jun 9 23:52:39 CEST 2016
On Tue, Jun 7, 2016 at 11:55 AM, Kyle Swanson <k at ylo.ph> wrote:
> Signed-off-by: Kyle Swanson <k at 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.
>
> + at 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.
More information about the ffmpeg-devel
mailing list