History

avfilter/af_crystalizer: refactor code

Paul B Mahol committed 4 years ago

Commit 353195f1 parent b9493e01 file · +83 −189Browse files

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

Unified · Split

libavfilter/af_crystalizer.c+83−189
@@ -52,197 +52,91 @@ typedef struct ThreadData { · 51 unmodified lines
5252 float mult;
5353 } ThreadData;
5454
55−static av_always_inline int filter_flt(AVFilterContext *ctx, void *arg,
56− int jobnr, int nb_jobs,
57− int inverse, int clip)
58−{
59− ThreadData *td = arg;
60− void **d = td->d;
61− void **p = td->p;
62− const void **s = td->s;
63− const int nb_samples = td->nb_samples;
64− const int channels = td->channels;
65− const float mult = td->mult;
66− const float scale = 1.f / (-mult + 1.f);
67− const int start = (channels * jobnr) / nb_jobs;
68− const int end = (channels * (jobnr+1)) / nb_jobs;
69− float *prv = p[0];
70− int n, c;
71−
72− for (c = start; c < end; c++) {
73− const float *src = s[0];
74− float *dst = d[0];
75−
76− for (n = 0; n < nb_samples; n++) {
77− float current = src[c];
78−
79− if (inverse) {
80− dst[c] = (current - prv[c] * mult) * scale;
81− prv[c] = dst[c];
82− } else {
83− dst[c] = current + (current - prv[c]) * mult;
84− prv[c] = current;
85− }
86− if (clip) {
87− dst[c] = av_clipf(dst[c], -1.f, 1.f);
88− }
89−
90− dst += channels;
91− src += channels;
92− }
93− }
94−
95− return 0;
55+#define filters(fmt, type, inverse, clp, inverset, clip, one, clip_fn, packed) \
56+static int filter_## inverse ##_## fmt ##_## clp(AVFilterContext *ctx, \
57+ void *arg, int jobnr,\
58+ int nb_jobs) \
59+{ \
60+ ThreadData *td = arg; \
61+ void **d = td->d; \
62+ void **p = td->p; \
63+ const void **s = td->s; \
64+ const int nb_samples = td->nb_samples; \
65+ const int channels = td->channels; \
66+ const type mult = td->mult; \
67+ const type scale = one / (-mult + one); \
68+ const int start = (channels * jobnr) / nb_jobs; \
69+ const int end = (channels * (jobnr+1)) / nb_jobs; \
70+ \
71+ if (packed) { \
72+ type *prv = p[0]; \
73+ for (int c = start; c < end; c++) { \
74+ const type *src = s[0]; \
75+ type *dst = d[0]; \
76+ \
77+ for (int n = 0; n < nb_samples; n++) { \
78+ type current = src[c]; \
79+ \
80+ if (inverset) { \
81+ dst[c] = (current - prv[c] * mult) * scale; \
82+ prv[c] = dst[c]; \
83+ } else { \
84+ dst[c] = current + (current - prv[c]) * mult; \
85+ prv[c] = current; \
86+ } \
87+ if (clip) { \
88+ dst[c] = clip_fn(dst[c], -one, one); \
89+ } \
90+ \
91+ dst += channels; \
92+ src += channels; \
93+ } \
94+ } \
95+ } else { \
96+ for (int c = start; c < end; c++) { \
97+ const type *src = s[c]; \
98+ type *dst = d[c]; \
99+ type *prv = p[c]; \
100+ \
101+ for (int n = 0; n < nb_samples; n++) { \
102+ type current = src[n]; \
103+ \
104+ if (inverset) { \
105+ dst[n] = (current - prv[0] * mult) * scale; \
106+ prv[0] = dst[n]; \
107+ } else { \
108+ dst[n] = current + (current - prv[0]) * mult; \
109+ prv[0] = current; \
110+ } \
111+ if (clip) { \
112+ dst[n] = clip_fn(dst[n], -one, one); \
113+ } \
114+ } \
115+ } \
116+ } \
117+ \
118+ return 0; \
96119 }
97120
98−static av_always_inline int filter_dbl(AVFilterContext *ctx, void *arg,
99− int jobnr, int nb_jobs,
100− int inverse, int clip)
101−{
102− ThreadData *td = arg;
103− void **d = td->d;
104− void **p = td->p;
105− const void **s = td->s;
106− const int nb_samples = td->nb_samples;
107− const int channels = td->channels;
108− const double mult = td->mult;
109− const double scale = 1.0 / (-mult + 1.0);
110− const int start = (channels * jobnr) / nb_jobs;
111− const int end = (channels * (jobnr+1)) / nb_jobs;
112− double *prv = p[0];
113− int n, c;
114−
115− for (c = start; c < end; c++) {
116− const double *src = s[0];
117− double *dst = d[0];
118−
119− for (n = 0; n < nb_samples; n++) {
120− double current = src[c];
121−
122− if (inverse) {
123− dst[c] = (current - prv[c] * mult) * scale;
124− prv[c] = dst[c];
125− } else {
126− dst[c] = current + (current - prv[c]) * mult;
127− prv[c] = current;
128− }
129− if (clip) {
130− dst[c] = av_clipd(dst[c], -1., 1.);
131− }
132−
133− dst += channels;
134− src += channels;
135− }
136− }
137−
138− return 0;
139−}
140−
141−static av_always_inline int filter_fltp(AVFilterContext *ctx, void *arg,
142− int jobnr, int nb_jobs,
143− int inverse, int clip)
144−{
145− ThreadData *td = arg;
146− void **d = td->d;
147− void **p = td->p;
148− const void **s = td->s;
149− const int nb_samples = td->nb_samples;
150− const int channels = td->channels;
151− const float mult = td->mult;
152− const float scale = 1.f / (-mult + 1.f);
153− const int start = (channels * jobnr) / nb_jobs;
154− const int end = (channels * (jobnr+1)) / nb_jobs;
155− int n, c;
156−
157− for (c = start; c < end; c++) {
158− const float *src = s[c];
159− float *dst = d[c];
160− float *prv = p[c];
161−
162− for (n = 0; n < nb_samples; n++) {
163− float current = src[n];
164−
165− if (inverse) {
166− dst[n] = (current - prv[0] * mult) * scale;
167− prv[0] = dst[n];
168− } else {
169− dst[n] = current + (current - prv[0]) * mult;
170− prv[0] = current;
171− }
172− if (clip) {
173− dst[n] = av_clipf(dst[n], -1.f, 1.f);
174− }
175− }
176− }
177−
178− return 0;
179−}
180−
181−static av_always_inline int filter_dblp(AVFilterContext *ctx, void *arg,
182− int jobnr, int nb_jobs,
183− int inverse, int clip)
184−{
185− ThreadData *td = arg;
186− void **d = td->d;
187− void **p = td->p;
188− const void **s = td->s;
189− const int nb_samples = td->nb_samples;
190− const int channels = td->channels;
191− const double mult = td->mult;
192− const double scale = 1.0 / (-mult + 1.0);
193− const int start = (channels * jobnr) / nb_jobs;
194− const int end = (channels * (jobnr+1)) / nb_jobs;
195− int n, c;
196−
197− for (c = start; c < end; c++) {
198− const double *src = s[c];
199− double *dst = d[c];
200− double *prv = p[c];
201−
202− for (n = 0; n < nb_samples; n++) {
203− double current = src[n];
204−
205− if (inverse) {
206− dst[n] = (current - prv[0] * mult) * scale;
207− prv[0] = dst[n];
208− } else {
209− dst[n] = current + (current - prv[0]) * mult;
210− prv[0] = current;
211− }
212− if (clip) {
213− dst[n] = av_clipd(dst[n], -1., 1.);
214− }
215− }
216− }
217−
218− return 0;
219−}
220−
221−#define filters(fmt, inverse, clip, i, c) \
222−static int filter_## inverse ##_## fmt ##_## clip(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) \
223−{ \
224− return filter_## fmt(ctx, arg, jobnr, nb_jobs, i, c); \
225−}
226−
227−filters(flt, inverse, noclip, 1, 0)
228−filters(flt, inverse, clip, 1, 1)
229−filters(flt, noinverse, noclip, 0, 0)
230−filters(flt, noinverse, clip, 0, 1)
231−
232−filters(fltp, inverse, noclip, 1, 0)
233−filters(fltp, inverse, clip, 1, 1)
234−filters(fltp, noinverse, noclip, 0, 0)
235−filters(fltp, noinverse, clip, 0, 1)
236−
237−filters(dbl, inverse, noclip, 1, 0)
238−filters(dbl, inverse, clip, 1, 1)
239−filters(dbl, noinverse, noclip, 0, 0)
240−filters(dbl, noinverse, clip, 0, 1)
241−
242−filters(dblp, inverse, noclip, 1, 0)
243−filters(dblp, inverse, clip, 1, 1)
244−filters(dblp, noinverse, noclip, 0, 0)
245−filters(dblp, noinverse, clip, 0, 1)
121+filters(flt, float, inverse, noclip, 1, 0, 1.f, av_clipf, 1)
122+filters(flt, float, inverse, clip, 1, 1, 1.f, av_clipf, 1)
123+filters(flt, float, noinverse, noclip, 0, 0, 1.f, av_clipf, 1)
124+filters(flt, float, noinverse, clip, 0, 1, 1.f, av_clipf, 1)
125+
126+filters(fltp, float, inverse, noclip, 1, 0, 1.f, av_clipf, 0)
127+filters(fltp, float, inverse, clip, 1, 1, 1.f, av_clipf, 0)
128+filters(fltp, float, noinverse, noclip, 0, 0, 1.f, av_clipf, 0)
129+filters(fltp, float, noinverse, clip, 0, 1, 1.f, av_clipf, 0)
130+
131+filters(dbl, double, inverse, noclip, 1, 0, 1.0, av_clipd, 1)
132+filters(dbl, double, inverse, clip, 1, 1, 1.0, av_clipd, 1)
133+filters(dbl, double, noinverse, noclip, 0, 0, 1.0, av_clipd, 1)
134+filters(dbl, double, noinverse, clip, 0, 1, 1.0, av_clipd, 1)
135+
136+filters(dblp, double, inverse, noclip, 1, 0, 1.0, av_clipd, 0)
137+filters(dblp, double, inverse, clip, 1, 1, 1.0, av_clipd, 0)
138+filters(dblp, double, noinverse, noclip, 0, 0, 1.0, av_clipd, 0)
139+filters(dblp, double, noinverse, clip, 0, 1, 1.0, av_clipd, 0)
246140
247141 static int config_input(AVFilterLink *inlink)
248142 {

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