Previously changing single coefficient would give unexpected results.
Unified · Split
| @@ -127,6 +127,9 @@ typedef struct BiquadsContext { · 126 unmodified lines | |||
| 127 | double a0, a1, a2; | 127 | double a0, a1, a2; |
| 128 | double b0, b1, b2; | 128 | double b0, b1, b2; |
| 129 | 129 | ||
| 130 | double oa0, oa1, oa2; | ||
| 131 | double ob0, ob1, ob2; | ||
| 132 | |||
| 130 | ChanCache *cache; | 133 | ChanCache *cache; |
| 131 | int block_align; | 134 | int block_align; |
| 132 | 135 | ||
| @@ -480,6 +483,12 @@ static int config_filter(AVFilterLink *outlink, int reset) · 347 unmodified lines | |||
| 480 | 483 | ||
| 481 | switch (s->filter_type) { | 484 | switch (s->filter_type) { |
| 482 | case biquad: | 485 | case biquad: |
| 486 | s->a0 = s->oa0; | ||
| 487 | s->a1 = s->oa1; | ||
| 488 | s->a2 = s->oa2; | ||
| 489 | s->b0 = s->ob0; | ||
| 490 | s->b1 = s->ob1; | ||
| 491 | s->b2 = s->ob2; | ||
| 483 | break; | 492 | break; |
| 484 | case equalizer: | 493 | case equalizer: |
| 485 | s->a0 = 1 + alpha / A; | 494 | s->a0 = 1 + alpha / A; |
| @@ -1154,12 +1163,12 @@ DEFINE_BIQUAD_FILTER(highshelf, "Apply a high shelf filter."); · 668 unmodified lines | |||
| 1154 | #endif /* CONFIG_HIGHSHELF_FILTER */ | 1163 | #endif /* CONFIG_HIGHSHELF_FILTER */ |
| 1155 | #if CONFIG_BIQUAD_FILTER | 1164 | #if CONFIG_BIQUAD_FILTER |
| 1156 | static const AVOption biquad_options[] = { | 1165 | static const AVOption biquad_options[] = { |
| 1157 | {"a0", NULL, OFFSET(a0), AV_OPT_TYPE_DOUBLE, {.dbl=1}, INT32_MIN, INT32_MAX, FLAGS}, | 1166 | {"a0", NULL, OFFSET(oa0), AV_OPT_TYPE_DOUBLE, {.dbl=1}, INT32_MIN, INT32_MAX, FLAGS}, |
| 1158 | {"a1", NULL, OFFSET(a1), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, | 1167 | {"a1", NULL, OFFSET(oa1), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, |
| 1159 | {"a2", NULL, OFFSET(a2), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, | 1168 | {"a2", NULL, OFFSET(oa2), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, |
| 1160 | {"b0", NULL, OFFSET(b0), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, | 1169 | {"b0", NULL, OFFSET(ob0), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, |
| 1161 | {"b1", NULL, OFFSET(b1), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, | 1170 | {"b1", NULL, OFFSET(ob1), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, |
| 1162 | {"b2", NULL, OFFSET(b2), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, | 1171 | {"b2", NULL, OFFSET(ob2), AV_OPT_TYPE_DOUBLE, {.dbl=0}, INT32_MIN, INT32_MAX, FLAGS}, |
| 1163 | {"mix", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS}, | 1172 | {"mix", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS}, |
| 1164 | {"m", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS}, | 1173 | {"m", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS}, |
| 1165 | {"channels", "set channels to filter", OFFSET(channels), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=-1}, INT64_MIN, INT64_MAX, FLAGS}, | 1174 | {"channels", "set channels to filter", OFFSET(channels), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=-1}, INT64_MIN, INT64_MAX, FLAGS}, |