You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
avfilter/af_biquads: make commands work reliably within biquad filter
Previously changing single coefficient would give unexpected results.
This commit is contained in:
@@ -127,6 +127,9 @@ typedef struct BiquadsContext {
|
|||||||
double a0, a1, a2;
|
double a0, a1, a2;
|
||||||
double b0, b1, b2;
|
double b0, b1, b2;
|
||||||
|
|
||||||
|
double oa0, oa1, oa2;
|
||||||
|
double ob0, ob1, ob2;
|
||||||
|
|
||||||
ChanCache *cache;
|
ChanCache *cache;
|
||||||
int block_align;
|
int block_align;
|
||||||
|
|
||||||
@@ -480,6 +483,12 @@ static int config_filter(AVFilterLink *outlink, int reset)
|
|||||||
|
|
||||||
switch (s->filter_type) {
|
switch (s->filter_type) {
|
||||||
case biquad:
|
case biquad:
|
||||||
|
s->a0 = s->oa0;
|
||||||
|
s->a1 = s->oa1;
|
||||||
|
s->a2 = s->oa2;
|
||||||
|
s->b0 = s->ob0;
|
||||||
|
s->b1 = s->ob1;
|
||||||
|
s->b2 = s->ob2;
|
||||||
break;
|
break;
|
||||||
case equalizer:
|
case equalizer:
|
||||||
s->a0 = 1 + alpha / A;
|
s->a0 = 1 + alpha / A;
|
||||||
@@ -1154,12 +1163,12 @@ DEFINE_BIQUAD_FILTER(highshelf, "Apply a high shelf filter.");
|
|||||||
#endif /* CONFIG_HIGHSHELF_FILTER */
|
#endif /* CONFIG_HIGHSHELF_FILTER */
|
||||||
#if CONFIG_BIQUAD_FILTER
|
#if CONFIG_BIQUAD_FILTER
|
||||||
static const AVOption biquad_options[] = {
|
static const AVOption biquad_options[] = {
|
||||||
{"a0", NULL, OFFSET(a0), AV_OPT_TYPE_DOUBLE, {.dbl=1}, INT32_MIN, INT32_MAX, FLAGS},
|
{"a0", NULL, OFFSET(oa0), AV_OPT_TYPE_DOUBLE, {.dbl=1}, INT32_MIN, INT32_MAX, FLAGS},
|
||||||
{"a1", NULL, OFFSET(a1), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
{"a1", NULL, OFFSET(oa1), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
||||||
{"a2", NULL, OFFSET(a2), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
{"a2", NULL, OFFSET(oa2), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
||||||
{"b0", NULL, OFFSET(b0), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
{"b0", NULL, OFFSET(ob0), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
||||||
{"b1", NULL, OFFSET(b1), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
{"b1", NULL, OFFSET(ob1), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
||||||
{"b2", NULL, OFFSET(b2), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
{"b2", NULL, OFFSET(ob2), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS},
|
||||||
{"mix", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS},
|
{"mix", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS},
|
||||||
{"m", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS},
|
{"m", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS},
|
||||||
{"channels", "set channels to filter", OFFSET(channels), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=-1}, INT64_MIN, INT64_MAX, FLAGS},
|
{"channels", "set channels to filter", OFFSET(channels), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=-1}, INT64_MIN, INT64_MAX, FLAGS},
|
||||||
|
Reference in New Issue
Block a user