avfilter/af_afir: remove again option, merge it with gtype
This commit is contained in:
parent
a628fa1fec
commit
7a6d88ee62
@ -1173,14 +1173,15 @@ Set wet gain. This sets final output gain.
|
|||||||
@item length
|
@item length
|
||||||
Set Impulse Response filter length. Default is 1, which means whole IR is processed.
|
Set Impulse Response filter length. Default is 1, which means whole IR is processed.
|
||||||
|
|
||||||
@item again
|
|
||||||
Enable applying gain measured from power of IR. For approach to use for measuring power
|
|
||||||
of IR see next option.
|
|
||||||
|
|
||||||
@item gtype
|
@item gtype
|
||||||
|
Enable applying gain measured from power of IR.
|
||||||
|
|
||||||
Set which approach to use for auto gain measurement.
|
Set which approach to use for auto gain measurement.
|
||||||
|
|
||||||
@table @option
|
@table @option
|
||||||
|
@item none
|
||||||
|
Do not apply any gain.
|
||||||
|
|
||||||
@item peak
|
@item peak
|
||||||
select peak gain, very conservative approach. This is default value.
|
select peak gain, very conservative approach. This is default value.
|
||||||
|
|
||||||
|
|||||||
@ -335,38 +335,39 @@ static int convert_coeffs(AVFilterContext *ctx)
|
|||||||
|
|
||||||
s->gain = 1;
|
s->gain = 1;
|
||||||
|
|
||||||
if (s->again) {
|
switch (s->gtype) {
|
||||||
switch (s->gtype) {
|
case -1:
|
||||||
case 0:
|
/* nothinkg to do */
|
||||||
for (ch = 0; ch < ctx->inputs[1]->channels; ch++) {
|
break;
|
||||||
float *time = (float *)s->in[1]->extended_data[!s->one2many * ch];
|
case 0:
|
||||||
|
for (ch = 0; ch < ctx->inputs[1]->channels; ch++) {
|
||||||
|
float *time = (float *)s->in[1]->extended_data[!s->one2many * ch];
|
||||||
|
|
||||||
for (i = 0; i < s->nb_taps; i++)
|
for (i = 0; i < s->nb_taps; i++)
|
||||||
power += FFABS(time[i]);
|
power += FFABS(time[i]);
|
||||||
}
|
|
||||||
s->gain = ctx->inputs[1]->channels / power;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
for (ch = 0; ch < ctx->inputs[1]->channels; ch++) {
|
|
||||||
float *time = (float *)s->in[1]->extended_data[!s->one2many * ch];
|
|
||||||
|
|
||||||
for (i = 0; i < s->nb_taps; i++)
|
|
||||||
power += time[i];
|
|
||||||
}
|
|
||||||
s->gain = ctx->inputs[1]->channels / power;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
for (ch = 0; ch < ctx->inputs[1]->channels; ch++) {
|
|
||||||
float *time = (float *)s->in[1]->extended_data[!s->one2many * ch];
|
|
||||||
|
|
||||||
for (i = 0; i < s->nb_taps; i++)
|
|
||||||
power += time[i] * time[i];
|
|
||||||
}
|
|
||||||
s->gain = sqrtf(ch / power);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return AVERROR_BUG;
|
|
||||||
}
|
}
|
||||||
|
s->gain = ctx->inputs[1]->channels / power;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
for (ch = 0; ch < ctx->inputs[1]->channels; ch++) {
|
||||||
|
float *time = (float *)s->in[1]->extended_data[!s->one2many * ch];
|
||||||
|
|
||||||
|
for (i = 0; i < s->nb_taps; i++)
|
||||||
|
power += time[i];
|
||||||
|
}
|
||||||
|
s->gain = ctx->inputs[1]->channels / power;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
for (ch = 0; ch < ctx->inputs[1]->channels; ch++) {
|
||||||
|
float *time = (float *)s->in[1]->extended_data[!s->one2many * ch];
|
||||||
|
|
||||||
|
for (i = 0; i < s->nb_taps; i++)
|
||||||
|
power += time[i] * time[i];
|
||||||
|
}
|
||||||
|
s->gain = sqrtf(ch / power);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return AVERROR_BUG;
|
||||||
}
|
}
|
||||||
|
|
||||||
s->gain = FFMIN(s->gain * s->ir_gain, 1.f);
|
s->gain = FFMIN(s->gain * s->ir_gain, 1.f);
|
||||||
@ -738,8 +739,8 @@ static const AVOption afir_options[] = {
|
|||||||
{ "dry", "set dry gain", OFFSET(dry_gain), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 10, AF },
|
{ "dry", "set dry gain", OFFSET(dry_gain), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 10, AF },
|
||||||
{ "wet", "set wet gain", OFFSET(wet_gain), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 10, AF },
|
{ "wet", "set wet gain", OFFSET(wet_gain), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 10, AF },
|
||||||
{ "length", "set IR length", OFFSET(length), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 1, AF },
|
{ "length", "set IR length", OFFSET(length), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 1, AF },
|
||||||
{ "again", "enable auto gain", OFFSET(again), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, AF },
|
{ "gtype", "set IR auto gain type",OFFSET(gtype), AV_OPT_TYPE_INT, {.i64=0}, -1, 2, AF, "gtype" },
|
||||||
{ "gtype", "set auto gain type",OFFSET(gtype), AV_OPT_TYPE_INT, {.i64=0}, 0, 2, AF, "gtype" },
|
{ "none", "without auto gain", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "gtype" },
|
||||||
{ "peak", "peak gain", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "gtype" },
|
{ "peak", "peak gain", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "gtype" },
|
||||||
{ "dc", "DC gain", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "gtype" },
|
{ "dc", "DC gain", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "gtype" },
|
||||||
{ "gn", "gain to noise", 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, AF, "gtype" },
|
{ "gn", "gain to noise", 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, AF, "gtype" },
|
||||||
|
|||||||
@ -38,7 +38,6 @@ typedef struct AudioFIRContext {
|
|||||||
float wet_gain;
|
float wet_gain;
|
||||||
float dry_gain;
|
float dry_gain;
|
||||||
float length;
|
float length;
|
||||||
int again;
|
|
||||||
int gtype;
|
int gtype;
|
||||||
float ir_gain;
|
float ir_gain;
|
||||||
int ir_format;
|
int ir_format;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user