avfilter/af_sidechaincompress: add forgotten option
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
@@ -2383,6 +2383,10 @@ reduction. Default is @code{average}.
|
|||||||
@item detection
|
@item detection
|
||||||
Should the exact signal be taken in case of @code{peak} or an RMS one in case
|
Should the exact signal be taken in case of @code{peak} or an RMS one in case
|
||||||
of @code{rms}. Default is @code{rms} which is mainly smoother.
|
of @code{rms}. Default is @code{rms} which is mainly smoother.
|
||||||
|
|
||||||
|
@item mix
|
||||||
|
How much to use compressed signal in output. Default is 1.
|
||||||
|
Range is between 0 and 1.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@subsection Examples
|
@subsection Examples
|
||||||
|
@@ -44,6 +44,7 @@ typedef struct SidechainCompressContext {
|
|||||||
double ratio;
|
double ratio;
|
||||||
double threshold;
|
double threshold;
|
||||||
double makeup;
|
double makeup;
|
||||||
|
double mix;
|
||||||
double thres;
|
double thres;
|
||||||
double knee;
|
double knee;
|
||||||
double knee_start;
|
double knee_start;
|
||||||
@@ -73,6 +74,7 @@ static const AVOption sidechaincompress_options[] = {
|
|||||||
{ "detection", "set detection", OFFSET(detection), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, A|F, "detection" },
|
{ "detection", "set detection", OFFSET(detection), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, A|F, "detection" },
|
||||||
{ "peak", 0, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, A|F, "detection" },
|
{ "peak", 0, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, A|F, "detection" },
|
||||||
{ "rms", 0, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, A|F, "detection" },
|
{ "rms", 0, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, A|F, "detection" },
|
||||||
|
{ "mix", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, A|F },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -131,6 +133,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *frame)
|
|||||||
AVFilterLink *sclink = ctx->inputs[1];
|
AVFilterLink *sclink = ctx->inputs[1];
|
||||||
AVFilterLink *outlink = ctx->outputs[0];
|
AVFilterLink *outlink = ctx->outputs[0];
|
||||||
const double makeup = s->makeup;
|
const double makeup = s->makeup;
|
||||||
|
const double mix = s->mix;
|
||||||
const double *scsrc;
|
const double *scsrc;
|
||||||
double *sample;
|
double *sample;
|
||||||
int nb_samples;
|
int nb_samples;
|
||||||
@@ -177,7 +180,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *frame)
|
|||||||
s->compressed_knee_stop, s->detection);
|
s->compressed_knee_stop, s->detection);
|
||||||
|
|
||||||
for (c = 0; c < outlink->channels; c++)
|
for (c = 0; c < outlink->channels; c++)
|
||||||
sample[c] *= gain * makeup;
|
sample[c] *= (gain * makeup * mix + (1. - mix));
|
||||||
|
|
||||||
sample += outlink->channels;
|
sample += outlink->channels;
|
||||||
scsrc += sclink->channels;
|
scsrc += sclink->channels;
|
||||||
|
Reference in New Issue
Block a user