History

avfilter/af_biquads: add tdi transform type

Paul B Mahol committed 4 years ago

Commit d1663171 parent 6c1b6852 files · +92 −0Browse files

Showing the changes to libavfilter (1 of 2 files). Show all

Unified · Split

libavfilter/af_biquads.c+83−0
@@ -99,6 +99,7 @@ enum WidthType { · 98 unmodified lines
9999 enum TransformType {
100100 DI,
101101 DII,
102+ TDI,
102103 TDII,
103104 LATT,
104105 SVF,
@@ -321,6 +322,62 @@ BIQUAD_DII_FILTER(s32, int32_t, INT32_MIN, INT32_MAX, 1) · 216 unmodified lines
321322 BIQUAD_DII_FILTER(flt, float, -1., 1., 0)
322323 BIQUAD_DII_FILTER(dbl, double, -1., 1., 0)
323324
325+#define BIQUAD_TDI_FILTER(name, type, min, max, need_clipping) \
326+static void biquad_tdi_## name (BiquadsContext *s, \
327+ const void *input, void *output, int len, \
328+ double *z1, double *z2, \
329+ double *z3, double *z4, \
330+ double b0, double b1, double b2, \
331+ double a1, double a2, int *clippings, \
332+ int disabled) \
333+{ \
334+ const type *ibuf = input; \
335+ type *obuf = output; \
336+ double s1 = *z1; \
337+ double s2 = *z2; \
338+ double s3 = *z3; \
339+ double s4 = *z4; \
340+ double wet = s->mix; \
341+ double dry = 1. - wet; \
342+ double in, out; \
343+ \
344+ a1 = -a1; \
345+ a2 = -a2; \
346+ \
347+ for (int i = 0; i < len; i++) { \
348+ double t1, t2, t3, t4; \
349+ in = ibuf[i] + s1; \
350+ t1 = in * a1 + s2; \
351+ t2 = in * a2; \
352+ t3 = in * b1 + s4; \
353+ t4 = in * b2; \
354+ out = b0 * in + s3; \
355+ out = out * wet + in * dry; \
356+ s1 = t1; s2 = t2; s3 = t3; s4 = t4; \
357+ if (disabled) { \
358+ obuf[i] = in; \
359+ } else if (need_clipping && out < min) { \
360+ (*clippings)++; \
361+ obuf[i] = min; \
362+ } else if (need_clipping && out > max) { \
363+ (*clippings)++; \
364+ obuf[i] = max; \
365+ } else { \
366+ obuf[i] = out; \
367+ } \
368+ } \
369+ \
370+ *z1 = s1; \
371+ *z2 = s2; \
372+ *z3 = s3; \
373+ *z4 = s4; \
374+}
375+
376+BIQUAD_TDI_FILTER(s16, int16_t, INT16_MIN, INT16_MAX, 1)
377+BIQUAD_TDI_FILTER(s32, int32_t, INT32_MIN, INT32_MAX, 1)
378+BIQUAD_TDI_FILTER(flt, float, -1., 1., 0)
379+BIQUAD_TDI_FILTER(dbl, double, -1., 1., 0)
380+
324381 #define BIQUAD_TDII_FILTER(name, type, min, max, need_clipping) \
325382 static void biquad_tdii_## name (BiquadsContext *s, \
326383 const void *input, void *output, int len, \
@@ -760,6 +817,23 @@ static int config_filter(AVFilterLink *outlink, int reset) · 433 unmodified lines
760817 default: av_assert0(0);
761818 }
762819 break;
820+ case TDI:
821+ switch (inlink->format) {
822+ case AV_SAMPLE_FMT_S16P:
823+ s->filter = biquad_tdi_s16;
824+ break;
825+ case AV_SAMPLE_FMT_S32P:
826+ s->filter = biquad_tdi_s32;
827+ break;
828+ case AV_SAMPLE_FMT_FLTP:
829+ s->filter = biquad_tdi_flt;
830+ break;
831+ case AV_SAMPLE_FMT_DBLP:
832+ s->filter = biquad_tdi_dbl;
833+ break;
834+ default: av_assert0(0);
835+ }
836+ break;
763837 case TDII:
764838 switch (inlink->format) {
765839 case AV_SAMPLE_FMT_S16P:
@@ -1006,6 +1080,7 @@ static const AVOption equalizer_options[] = { · 240 unmodified lines
10061080 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
10071081 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
10081082 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1083+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
10091084 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
10101085 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
10111086 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
@@ -1048,6 +1123,7 @@ static const AVOption bass_lowshelf_options[] = { · 36 unmodified lines
10481123 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
10491124 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
10501125 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1126+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
10511127 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
10521128 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
10531129 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
@@ -1097,6 +1173,7 @@ static const AVOption treble_highshelf_options[] = { · 43 unmodified lines
10971173 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
10981174 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
10991175 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1176+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
11001177 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
11011178 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
11021179 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
@@ -1145,6 +1222,7 @@ static const AVOption bandpass_options[] = { · 42 unmodified lines
11451222 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
11461223 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
11471224 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1225+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
11481226 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
11491227 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
11501228 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
@@ -1183,6 +1261,7 @@ static const AVOption bandreject_options[] = { · 32 unmodified lines
11831261 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
11841262 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
11851263 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1264+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
11861265 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
11871266 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
11881267 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
@@ -1223,6 +1302,7 @@ static const AVOption lowpass_options[] = { · 34 unmodified lines
12231302 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
12241303 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
12251304 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1305+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
12261306 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
12271307 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
12281308 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
@@ -1263,6 +1343,7 @@ static const AVOption highpass_options[] = { · 34 unmodified lines
12631343 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
12641344 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
12651345 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1346+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
12661347 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
12671348 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
12681349 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
@@ -1303,6 +1384,7 @@ static const AVOption allpass_options[] = { · 34 unmodified lines
13031384 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
13041385 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
13051386 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1387+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
13061388 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
13071389 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
13081390 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},
@@ -1336,6 +1418,7 @@ static const AVOption biquad_options[] = { · 27 unmodified lines
13361418 {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_TTYPE-1, AF, "transform_type"},
13371419 {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"},
13381420 {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"},
1421+ {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"},
13391422 {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"},
13401423 {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"},
13411424 {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"},

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