| @@ -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 |
| 534 | BIQUAD_SVF_FILTER(flt, float, -1., 1., 0) | 536 | BIQUAD_SVF_FILTER(flt, float, -1., 1., 0) |
| 535 | BIQUAD_SVF_FILTER(dbl, double, -1., 1., 0) | 537 | BIQUAD_SVF_FILTER(dbl, double, -1., 1., 0) |
| 536 | | 538 | |
| | 539 | #define BIQUAD_ZDF_FILTER(name, type, min, max, need_clipping) \ |
| | 540 | static 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 | |
| | 584 | BIQUAD_ZDF_FILTER(s16, int16_t, INT16_MIN, INT16_MAX, 1) |
| | 585 | BIQUAD_ZDF_FILTER(s32, int32_t, INT32_MIN, INT32_MAX, 1) |
| | 586 | BIQUAD_ZDF_FILTER(flt, float, -1., 1., 0) |
| | 587 | BIQUAD_ZDF_FILTER(dbl, double, -1., 1., 0) |
| | 588 | |
| 537 | static void convert_dir2latt(BiquadsContext *s) | 589 | static 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 | |
| | 624 | static 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 | |
| | 659 | static 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 | |
| 572 | static int config_filter(AVFilterLink *outlink, int reset) | 772 | static 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"}, |