History

avfilter/af_biquads: add zdf transform type

Paul B Mahol committed 4 years ago

Commit cbc1b8a1 parent 80162192 files · +248 −11Browse files

Unified · Split

2 files
  1. doc/filters.texi +9 −0
  2. libavfilter/af_biquads.c +239 −11
doc/filters.texi+9−0
@@ -2054,6 +2054,7 @@ Set transform type of IIR filter. · 2053 unmodified lines
2054@item tdii2054@item tdii
2055@item latt2055@item latt
2056@item svf2056@item svf
2057@item zdf
2057@end table2058@end table
2058 2059
2059@item precision, r2060@item precision, r
@@ -3484,6 +3485,7 @@ Set transform type of IIR filter. · 1424 unmodified lines
3484@item tdii3485@item tdii
3485@item latt3486@item latt
3486@item svf3487@item svf
3488@item zdf
3487@end table3489@end table
3488 3490
3489@item precision, r3491@item precision, r
@@ -3580,6 +3582,7 @@ Set transform type of IIR filter. · 90 unmodified lines
3580@item tdii3582@item tdii
3581@item latt3583@item latt
3582@item svf3584@item svf
3585@item zdf
3583@end table3586@end table
3584 3587
3585@item precision, r3588@item precision, r
@@ -3686,6 +3689,7 @@ Set transform type of IIR filter. · 100 unmodified lines
3686@item tdii3689@item tdii
3687@item latt3690@item latt
3688@item svf3691@item svf
3692@item zdf
3689@end table3693@end table
3690 3694
3691@item precision, r3695@item precision, r
@@ -3777,6 +3781,7 @@ Set transform type of IIR filter. · 85 unmodified lines
3777@item tdii3781@item tdii
3778@item latt3782@item latt
3779@item svf3783@item svf
3784@item zdf
3780@end table3785@end table
3781 3786
3782@item precision, r3787@item precision, r
@@ -4585,6 +4590,7 @@ Set transform type of IIR filter. · 802 unmodified lines
4585@item tdii4590@item tdii
4586@item latt4591@item latt
4587@item svf4592@item svf
4593@item zdf
4588@end table4594@end table
4589 4595
4590@item precision, r4596@item precision, r
@@ -5095,6 +5101,7 @@ Set transform type of IIR filter. · 504 unmodified lines
5095@item tdii5101@item tdii
5096@item latt5102@item latt
5097@item svf5103@item svf
5104@item zdf
5098@end table5105@end table
5099 5106
5100@item precision, r5107@item precision, r
@@ -5454,6 +5461,7 @@ Set transform type of IIR filter. · 353 unmodified lines
5454@item tdii5461@item tdii
5455@item latt5462@item latt
5456@item svf5463@item svf
5464@item zdf
5457@end table5465@end table
5458 5466
5459@item precision, r5467@item precision, r
@@ -6699,6 +6707,7 @@ Set transform type of IIR filter. · 1239 unmodified lines
6699@item tdii6707@item tdii
6700@item latt6708@item latt
6701@item svf6709@item svf
6710@item zdf
6702@end table6711@end table
6703 6712
6704@item precision, r6713@item precision, r
libavfilter/af_biquads.c+239−11
@@ -104,6 +104,7 @@ enum TransformType { · 103 unmodified lines
104 TDII,104 TDII,
105 LATT,105 LATT,
106 SVF,106 SVF,
107 ZDF,
107 NB_TTYPE,108 NB_TTYPE,
108};109};
109 110
@@ -150,7 +151,7 @@ typedef struct BiquadsContext { · 40 unmodified lines
150 151
151 void (*filter)(struct BiquadsContext *s, const void *ibuf, void *obuf, int len,152 void (*filter)(struct BiquadsContext *s, const void *ibuf, void *obuf, int len,
152 double *i1, double *i2, double *o1, double *o2,153 double *i1, double *i2, double *o1, double *o2,
153 double b0, double b1, double b2, double a1, double a2, int *clippings,154 double b0, double b1, double b2, double a0, double a1, double a2, int *clippings,
154 int disabled);155 int disabled);
155} BiquadsContext;156} BiquadsContext;
156 157
@@ -203,7 +204,7 @@ static void biquad_## name (BiquadsContext *s, \ · 46 unmodified lines
203 double *in1, double *in2, \204 double *in1, double *in2, \
204 double *out1, double *out2, \205 double *out1, double *out2, \
205 double b0, double b1, double b2, \206 double b0, double b1, double b2, \
206 double a1, double a2, int *clippings, \207 double a0, double a1, double a2, int *clippings, \
207 int disabled) \208 int disabled) \
208{ \209{ \
209 const type *ibuf = input; \210 const type *ibuf = input; \
@@ -286,7 +287,7 @@ static void biquad_dii_## name (BiquadsContext *s, \ · 76 unmodified lines
286 double *z1, double *z2, \287 double *z1, double *z2, \
287 double *unused1, double *unused2, \288 double *unused1, double *unused2, \
288 double b0, double b1, double b2, \289 double b0, double b1, double b2, \
289 double a1, double a2, int *clippings, \290 double a0, double a1, double a2, int *clippings, \
290 int disabled) \291 int disabled) \
291{ \292{ \
292 const type *ibuf = input; \293 const type *ibuf = input; \
@@ -334,7 +335,7 @@ static void biquad_tdi_## name (BiquadsContext *s, \ · 41 unmodified lines
334 double *z1, double *z2, \335 double *z1, double *z2, \
335 double *z3, double *z4, \336 double *z3, double *z4, \
336 double b0, double b1, double b2, \337 double b0, double b1, double b2, \
337 double a1, double a2, int *clippings, \338 double a0, double a1, double a2, int *clippings, \
338 int disabled) \339 int disabled) \
339{ \340{ \
340 const type *ibuf = input; \341 const type *ibuf = input; \
@@ -390,7 +391,7 @@ static void biquad_tdii_## name (BiquadsContext *s, \ · 49 unmodified lines
390 double *z1, double *z2, \391 double *z1, double *z2, \
391 double *unused1, double *unused2, \392 double *unused1, double *unused2, \
392 double b0, double b1, double b2, \393 double b0, double b1, double b2, \
393 double a1, double a2, int *clippings, \394 double a0, double a1, double a2, int *clippings, \
394 int disabled) \395 int disabled) \
395{ \396{ \
396 const type *ibuf = input; \397 const type *ibuf = input; \
@@ -437,7 +438,8 @@ static void biquad_latt_## name (BiquadsContext *s, \ · 40 unmodified lines
437 double *z1, double *z2, \438 double *z1, double *z2, \
438 double *unused1, double *unused2, \439 double *unused1, double *unused2, \
439 double v0, double v1, double v2, \440 double v0, double v1, double v2, \
440 double k0, double k1, int *clippings, \441 double unused, double k0, double k1, \
442 int *clippings, \
441 int disabled) \443 int disabled) \
442{ \444{ \
443 const type *ibuf = input; \445 const type *ibuf = input; \
@@ -492,7 +494,7 @@ static void biquad_svf_## name (BiquadsContext *s, \ · 48 unmodified lines
492 double *y0, double *y1, \494 double *y0, double *y1, \
493 double *unused1, double *unused2, \495 double *unused1, double *unused2, \
494 double b0, double b1, double b2, \496 double b0, double b1, double b2, \
495 double a1, double a2, int *clippings, \497 double a0, double a1, double a2, int *clippings, \
496 int disabled) \498 int disabled) \
497{ \499{ \
498 const type *ibuf = input; \500 const type *ibuf = input; \
@@ -534,6 +536,56 @@ BIQUAD_SVF_FILTER(s32, int32_t, INT32_MIN, INT32_MAX, 1) · 35 unmodified lines
534BIQUAD_SVF_FILTER(flt, float, -1., 1., 0)536BIQUAD_SVF_FILTER(flt, float, -1., 1., 0)
535BIQUAD_SVF_FILTER(dbl, double, -1., 1., 0)537BIQUAD_SVF_FILTER(dbl, double, -1., 1., 0)
536 538
539#define BIQUAD_ZDF_FILTER(name, type, min, max, need_clipping) \
540static void biquad_zdf_## name (BiquadsContext *s, \
541 const void *input, void *output, int len, \
542 double *y0, double *y1, \
543 double *unused1, double *unused2, \
544 double m0, double m1, double m2, \
545 double a0, double a1, double a2, int *clippings, \
546 int disabled) \
547{ \
548 const type *ibuf = input; \
549 type *obuf = output; \
550 double b0 = *y0; \
551 double b1 = *y1; \
552 double wet = s->mix; \
553 double dry = 1. - wet; \
554 double out; \
555 \
556 for (int i = 0; i < len; i++) { \
557 const double in = ibuf[i]; \
558 const double v0 = in; \
559 const double v3 = v0 - b1; \
560 const double v1 = a0 * b0 + a1 * v3; \
561 const double v2 = b1 + a1 * b0 + a2 * v3; \
562 \
563 b0 = 2. * v1 - b0; \
564 b1 = 2. * v2 - b1; \
565 \
566 out = m0 * v0 + m1 * v1 + m2 * v2; \
567 out = out * wet + in * dry; \
568 if (disabled) { \
569 obuf[i] = in; \
570 } else if (need_clipping && out < min) { \
571 (*clippings)++; \
572 obuf[i] = min; \
573 } else if (need_clipping && out > max) { \
574 (*clippings)++; \
575 obuf[i] = max; \
576 } else { \
577 obuf[i] = out; \
578 } \
579 } \
580 *y0 = b0; \
581 *y1 = b1; \
582}
583
584BIQUAD_ZDF_FILTER(s16, int16_t, INT16_MIN, INT16_MAX, 1)
585BIQUAD_ZDF_FILTER(s32, int32_t, INT32_MIN, INT32_MAX, 1)
586BIQUAD_ZDF_FILTER(flt, float, -1., 1., 0)
587BIQUAD_ZDF_FILTER(dbl, double, -1., 1., 0)
588
537static void convert_dir2latt(BiquadsContext *s)589static void convert_dir2latt(BiquadsContext *s)
538{590{
539 double k0, k1, v0, v1, v2;591 double k0, k1, v0, v1, v2;
@@ -569,6 +621,154 @@ static void convert_dir2svf(BiquadsContext *s) · 29 unmodified lines
569 s->b2 = b[2];621 s->b2 = b[2];
570}622}
571 623
624static double convert_width2qfactor(double width,
625 double frequency,
626 double gain,
627 double sample_rate,
628 int width_type)
629{
630 double w0 = 2. * M_PI * frequency / sample_rate;
631 double A = ff_exp10(gain / 40.);
632 double ret;
633
634 switch (width_type) {
635 case NONE:
636 case QFACTOR:
637 ret = width;
638 break;
639 case HERTZ:
640 ret = frequency / width;
641 break;
642 case KHERTZ:
643 ret = frequency / (width * 1000.);
644 break;
645 case OCTAVE:
646 ret = 1. / (2. * sinh(log(2.) / 2. * width * w0 / sin(w0)));
647 break;
648 case SLOPE:
649 ret = 1. / sqrt((A + 1. / A) * (1. / width - 1.) + 2.);
650 break;
651 default:
652 av_assert0(0);
653 break;
654 }
655
656 return ret;
657}
658
659static void convert_dir2zdf(BiquadsContext *s, int sample_rate)
660{
661 double Q = convert_width2qfactor(s->width, s->frequency, s->gain, sample_rate, s->width_type);
662 double g, k, A;
663 double a[3];
664 double m[3];
665
666 switch (s->filter_type) {
667 case biquad:
668 a[0] = s->oa0;
669 a[1] = s->oa1;
670 a[2] = s->oa2;
671 m[0] = s->ob0;
672 m[1] = s->ob1;
673 m[2] = s->ob2;
674 break;
675 case equalizer:
676 A = ff_exp10(s->gain / 40.);
677 g = tan(M_PI * s->frequency / sample_rate);
678 k = 1. / (Q * A);
679 a[0] = 1. / (1. + g * (g + k));
680 a[1] = g * a[0];
681 a[2] = g * a[1];
682 m[0] = 1.;
683 m[1] = k * (A * A - 1.);
684 m[2] = 0.;
685 break;
686 case bass:
687 case lowshelf:
688 A = ff_exp10(s->gain / 40.);
689 g = tan(M_PI * s->frequency / sample_rate) / sqrt(A);
690 k = 1. / (Q * A);
691 a[0] = 1. / (1. + g * (g + k));
692 a[1] = g * a[0];
693 a[2] = g * a[1];
694 m[0] = 1.;
695 m[1] = k * (A - 1.);
696 m[2] = A * A - 1.;
697 break;
698 case treble:
699 case highshelf:
700 A = ff_exp10(s->gain / 40.);
701 g = tan(M_PI * s->frequency / sample_rate) / sqrt(A);
702 k = 1. / (Q * A);
703 a[0] = 1. / (1. + g * (g + k));
704 a[1] = g * a[0];
705 a[2] = g * a[1];
706 m[0] = A * A;
707 m[1] = k * (1. - A) * A;
708 m[2] = 1. - A * A;
709 break;
710 case bandpass:
711 g = tan(M_PI * s->frequency / sample_rate);
712 k = 1. / Q;
713 a[0] = 1. / (1. + g * (g + k));
714 a[1] = g * a[0];
715 a[2] = g * a[1];
716 m[0] = 0.;
717 m[1] = s->csg ? 1. : 2.;
718 m[2] = 0.;
719 break;
720 case bandreject:
721 g = tan(M_PI * s->frequency / sample_rate);
722 k = 1. / Q;
723 a[0] = 1. / (1. + g * (g + k));
724 a[1] = g * a[0];
725 a[2] = g * a[1];
726 m[0] = 1.;
727 m[1] = -k;
728 m[2] = 0.;
729 break;
730 case lowpass:
731 g = tan(M_PI * s->frequency / sample_rate);
732 k = 1. / Q;
733 a[0] = 1. / (1. + g * (g + k));
734 a[1] = g * a[0];
735 a[2] = g * a[1];
736 m[0] = 0.;
737 m[1] = 0.;
738 m[2] = 1.;
739 break;
740 case highpass:
741 g = tan(M_PI * s->frequency / sample_rate);
742 k = 1. / Q;
743 a[0] = 1. / (1. + g * (g + k));
744 a[1] = g * a[0];
745 a[2] = g * a[1];
746 m[0] = 1.;
747 m[1] = -k;
748 m[2] = -1.;
749 break;
750 case allpass:
751 g = tan(M_PI * s->frequency / sample_rate);
752 k = 1. / Q;
753 a[0] = 1. / (1. + g * (g + k));
754 a[1] = g * a[0];
755 a[2] = g * a[1];
756 m[0] = 1.;
757 m[1] = -2. * k;
758 m[2] = 0.;
759 break;
760 default:
761 av_assert0(0);
762 }
763
764 s->a0 = a[0];
765 s->a1 = a[1];
766 s->a2 = a[2];
767 s->b0 = m[0];
768 s->b1 = m[1];
769 s->b2 = m[2];
770}
771
572static int config_filter(AVFilterLink *outlink, int reset)772static int config_filter(AVFilterLink *outlink, int reset)
573{773{
574 AVFilterContext *ctx = outlink->src;774 AVFilterContext *ctx = outlink->src;
@@ -902,6 +1102,23 @@ static int config_filter(AVFilterLink *outlink, int reset) · 327 unmodified lines
902 default: av_assert0(0);1102 default: av_assert0(0);
903 }1103 }
904 break;1104 break;
1105 case ZDF:
1106 switch (inlink->format) {
1107 case AV_SAMPLE_FMT_S16P:
1108 s->filter = biquad_zdf_s16;
1109 break;
1110 case AV_SAMPLE_FMT_S32P:
1111 s->filter = biquad_zdf_s32;
1112 break;
1113 case AV_SAMPLE_FMT_FLTP:
1114 s->filter = biquad_zdf_flt;
1115 break;
1116 case AV_SAMPLE_FMT_DBLP:
1117 s->filter = biquad_zdf_dbl;
1118 break;
1119 default: av_assert0(0);
1120 }
1121 break;
905 default:1122 default:
906 av_assert0(0);1123 av_assert0(0);
907 }1124 }
@@ -912,6 +1129,8 @@ static int config_filter(AVFilterLink *outlink, int reset) · 4 unmodified lines
912 convert_dir2latt(s);1129 convert_dir2latt(s);
913 else if (s->transform_type == SVF)1130 else if (s->transform_type == SVF)
914 convert_dir2svf(s);1131 convert_dir2svf(s);
1132 else if (s->transform_type == ZDF)
1133 convert_dir2zdf(s, inlink->sample_rate);
915 1134
916 return 0;1135 return 0;
917}1136}
@@ -985,13 +1204,13 @@ static int filter_channel(AVFilterContext *ctx, void *arg, int jobnr, int nb_job · 67 unmodified lines
985 if (!s->block_samples) {1204 if (!s->block_samples) {
986 s->filter(s, buf->extended_data[ch], out_buf->extended_data[ch], buf->nb_samples,1205 s->filter(s, buf->extended_data[ch], out_buf->extended_data[ch], buf->nb_samples,
987 &s->cache[ch].i1, &s->cache[ch].i2, &s->cache[ch].o1, &s->cache[ch].o2,1206 &s->cache[ch].i1, &s->cache[ch].i2, &s->cache[ch].o1, &s->cache[ch].o2,
988 s->b0, s->b1, s->b2, s->a1, s->a2, &s->cache[ch].clippings, ctx->is_disabled);1207 s->b0, s->b1, s->b2, s->a0, s->a1, s->a2, &s->cache[ch].clippings, ctx->is_disabled);
989 } else {1208 } else {
990 memcpy(s->block[0]->extended_data[ch] + s->block_align * s->block_samples, buf->extended_data[ch],1209 memcpy(s->block[0]->extended_data[ch] + s->block_align * s->block_samples, buf->extended_data[ch],
991 buf->nb_samples * s->block_align);1210 buf->nb_samples * s->block_align);
992 s->filter(s, s->block[0]->extended_data[ch], s->block[1]->extended_data[ch], s->block_samples,1211 s->filter(s, s->block[0]->extended_data[ch], s->block[1]->extended_data[ch], s->block_samples,
993 &s->cache[ch].i1, &s->cache[ch].i2, &s->cache[ch].o1, &s->cache[ch].o2,1212 &s->cache[ch].i1, &s->cache[ch].i2, &s->cache[ch].o1, &s->cache[ch].o2,
994 s->b0, s->b1, s->b2, s->a1, s->a2, &s->cache[ch].clippings, ctx->is_disabled);1213 s->b0, s->b1, s->b2, s->a0, s->a1, s->a2, &s->cache[ch].clippings, ctx->is_disabled);
995 s->cache[ch].ri1 = s->cache[ch].i1;1214 s->cache[ch].ri1 = s->cache[ch].i1;
996 s->cache[ch].ri2 = s->cache[ch].i2;1215 s->cache[ch].ri2 = s->cache[ch].i2;
997 s->cache[ch].ro1 = s->cache[ch].o1;1216 s->cache[ch].ro1 = s->cache[ch].o1;
@@ -1000,7 +1219,7 @@ static int filter_channel(AVFilterContext *ctx, void *arg, int jobnr, int nb_job · 2 unmodified lines
1000 s->block[1]->extended_data[ch] + s->block_samples * s->block_align,1219 s->block[1]->extended_data[ch] + s->block_samples * s->block_align,
1001 s->block_samples,1220 s->block_samples,
1002 &s->cache[ch].ri1, &s->cache[ch].ri2, &s->cache[ch].ro1, &s->cache[ch].ro2,1221 &s->cache[ch].ri1, &s->cache[ch].ri2, &s->cache[ch].ro1, &s->cache[ch].ro2,
1003 s->b0, s->b1, s->b2, s->a1, s->a2, &s->cache[ch].clippings, ctx->is_disabled);1222 s->b0, s->b1, s->b2, s->a0, s->a1, s->a2, &s->cache[ch].clippings, ctx->is_disabled);
1004 reverse_samples(s->block[2], s->block[1], ch, 0, 0, s->block_samples * 2);1223 reverse_samples(s->block[2], s->block[1], ch, 0, 0, s->block_samples * 2);
1005 s->cache[ch].ri1 = 0.;1224 s->cache[ch].ri1 = 0.;
1006 s->cache[ch].ri2 = 0.;1225 s->cache[ch].ri2 = 0.;
@@ -1008,7 +1227,7 @@ static int filter_channel(AVFilterContext *ctx, void *arg, int jobnr, int nb_job · 1 unmodified line
1008 s->cache[ch].ro2 = 0.;1227 s->cache[ch].ro2 = 0.;
1009 s->filter(s, s->block[2]->extended_data[ch], s->block[2]->extended_data[ch], s->block[2]->nb_samples,1228 s->filter(s, s->block[2]->extended_data[ch], s->block[2]->extended_data[ch], s->block[2]->nb_samples,
1010 &s->cache[ch].ri1, &s->cache[ch].ri2, &s->cache[ch].ro1, &s->cache[ch].ro2,1229 &s->cache[ch].ri1, &s->cache[ch].ri2, &s->cache[ch].ro1, &s->cache[ch].ro2,
1011 s->b0, s->b1, s->b2, s->a1, s->a2, &s->cache[ch].clippings, ctx->is_disabled);1230 s->b0, s->b1, s->b2, s->a0, s->a1, s->a2, &s->cache[ch].clippings, ctx->is_disabled);
1012 reverse_samples(out_buf, s->block[2], ch, 0, s->block_samples, out_buf->nb_samples);1231 reverse_samples(out_buf, s->block[2], ch, 0, s->block_samples, out_buf->nb_samples);
1013 memmove(s->block[0]->extended_data[ch], s->block[0]->extended_data[ch] + s->block_align * s->block_samples,1232 memmove(s->block[0]->extended_data[ch], s->block[0]->extended_data[ch] + s->block_align * s->block_samples,
1014 s->block_samples * s->block_align);1233 s->block_samples * s->block_align);
@@ -1197,6 +1416,7 @@ static const AVOption equalizer_options[] = { · 182 unmodified lines
1197 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1416 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1198 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1417 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1199 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1418 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1419 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1200 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1420 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1201 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1421 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1202 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1422 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},
@@ -1242,6 +1462,7 @@ static const AVOption bass_lowshelf_options[] = { · 39 unmodified lines
1242 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1462 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1243 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1463 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1244 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1464 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1465 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1245 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1466 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1246 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1467 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1247 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1468 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},
@@ -1294,6 +1515,7 @@ static const AVOption treble_highshelf_options[] = { · 46 unmodified lines
1294 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1515 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1295 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1516 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1296 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1517 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1518 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1297 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1519 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1298 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1520 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1299 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1521 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},
@@ -1345,6 +1567,7 @@ static const AVOption bandpass_options[] = { · 45 unmodified lines
1345 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1567 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1346 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1568 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1347 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1569 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1570 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1348 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1571 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1349 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1572 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1350 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1573 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},
@@ -1386,6 +1609,7 @@ static const AVOption bandreject_options[] = { · 35 unmodified lines
1386 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1609 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1387 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1610 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1388 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1611 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1612 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1389 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1613 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1390 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1614 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1391 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1615 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},
@@ -1429,6 +1653,7 @@ static const AVOption lowpass_options[] = { · 37 unmodified lines
1429 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1653 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1430 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1654 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1431 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1655 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1656 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1432 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1657 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1433 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1658 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1434 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1659 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},
@@ -1472,6 +1697,7 @@ static const AVOption highpass_options[] = { · 37 unmodified lines
1472 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1697 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1473 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1698 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1474 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1699 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1700 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1475 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1701 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1476 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1702 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1477 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1703 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},
@@ -1515,6 +1741,7 @@ static const AVOption allpass_options[] = { · 37 unmodified lines
1515 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1741 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1516 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1742 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1517 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1743 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1744 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1518 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1745 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1519 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1746 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1520 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1747 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},
@@ -1549,6 +1776,7 @@ static const AVOption biquad_options[] = { · 28 unmodified lines
1549 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},1776 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
1550 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},1777 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
1551 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},1778 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
1779 {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"},
1552 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1780 {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1553 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},1781 {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=-1}, -1, 3, AF, "precision"},
1554 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},1782 {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"},

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t