You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
avfilter/af_loudnorm: add dual_mono option
Signed-off-by: Kyle Swanson <k@ylo.ph>
This commit is contained in:
@@ -2765,6 +2765,13 @@ measured_I, measured_LRA, measured_TP, and measured_thresh must also
|
|||||||
to be specified in order to use this mode.
|
to be specified in order to use this mode.
|
||||||
Options are true or false. Default is true.
|
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
|
@item print_format
|
||||||
Set print format for stats. Options are summary, json, or none.
|
Set print format for stats. Options are summary, json, or none.
|
||||||
Default value is none.
|
Default value is none.
|
||||||
|
@@ -60,6 +60,7 @@ typedef struct LoudNormContext {
|
|||||||
double measured_thresh;
|
double measured_thresh;
|
||||||
double offset;
|
double offset;
|
||||||
int linear;
|
int linear;
|
||||||
|
int dual_mono;
|
||||||
enum PrintFormat print_format;
|
enum PrintFormat print_format;
|
||||||
|
|
||||||
double *buf;
|
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 },
|
{ "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 },
|
{ "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 },
|
{ "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" },
|
{ "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" },
|
{ "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" },
|
{ "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)
|
if (!s->r128_out)
|
||||||
return AVERROR(ENOMEM);
|
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_size = frame_size(inlink->sample_rate, 3000) * inlink->channels;
|
||||||
s->buf = av_malloc_array(s->buf_size, sizeof(*s->buf));
|
s->buf = av_malloc_array(s->buf_size, sizeof(*s->buf));
|
||||||
if (!s->buf)
|
if (!s->buf)
|
||||||
|
Reference in New Issue
Block a user