History

avfilter/af_afir: refactor crossfade code

Paul B Mahol committed 2 years ago

Commit 6579d951 parent bbdd6042 files · +52 −88Browse files

Unified · Split

2 files
  1. libavfilter/af_afir.c +2 −88
  2. libavfilter/afir_template.c +50 −0
libavfilter/af_afir.c+2−88
@@ -63,96 +63,10 @@ static int fir_channel(AVFilterContext *ctx, AVFrame *out, int ch) · 62 unmodified lines
6363 for (int offset = 0; offset < out->nb_samples; offset += min_part_size) {
6464 switch (s->format) {
6565 case AV_SAMPLE_FMT_FLTP:
66− if (ctx->is_disabled || s->prev_is_disabled) {
67− const float *in = (const float *)s->in->extended_data[ch] + offset;
68− const float *xfade0 = (const float *)s->xfade[0]->extended_data[ch];
69− const float *xfade1 = (const float *)s->xfade[1]->extended_data[ch];
70− float *src0 = (float *)s->fadein[0]->extended_data[ch];
71− float *src1 = (float *)s->fadein[1]->extended_data[ch];
72− float *dst = ((float *)out->extended_data[ch]) + offset;
73−
74− if (ctx->is_disabled && !s->prev_is_disabled) {
75− memset(src0, 0, min_part_size * sizeof(float));
76− fir_quantum_float(ctx, s->fadein[0], ch, offset, 0, selir);
77− for (int n = 0; n < min_part_size; n++)
78− dst[n] = xfade1[n] * src0[n] + xfade0[n] * in[n];
79− } else if (!ctx->is_disabled && s->prev_is_disabled) {
80− memset(src1, 0, min_part_size * sizeof(float));
81− fir_quantum_float(ctx, s->fadein[1], ch, offset, 0, selir);
82− for (int n = 0; n < min_part_size; n++)
83− dst[n] = xfade1[n] * in[n] + xfade0[n] * src1[n];
84− } else {
85− memcpy(dst, in, sizeof(float) * min_part_size);
86− }
87− } else if (prev_selir != selir && s->loading[ch] != 0) {
88− const float *xfade0 = (const float *)s->xfade[0]->extended_data[ch];
89− const float *xfade1 = (const float *)s->xfade[1]->extended_data[ch];
90− float *src0 = (float *)s->fadein[0]->extended_data[ch];
91− float *src1 = (float *)s->fadein[1]->extended_data[ch];
92− float *dst = ((float *)out->extended_data[ch]) + offset;
93−
94− memset(src0, 0, min_part_size * sizeof(float));
95− memset(src1, 0, min_part_size * sizeof(float));
96−
97− fir_quantum_float(ctx, s->fadein[0], ch, offset, 0, prev_selir);
98− fir_quantum_float(ctx, s->fadein[1], ch, offset, 0, selir);
99−
100− if (s->loading[ch] > s->max_offset[selir]) {
101− for (int n = 0; n < min_part_size; n++)
102− dst[n] = xfade1[n] * src0[n] + xfade0[n] * src1[n];
103− s->loading[ch] = 0;
104− } else {
105− memcpy(dst, src0, min_part_size * sizeof(float));
106− }
107− } else {
108− fir_quantum_float(ctx, out, ch, offset, offset, selir);
109− }
66+ fir_quantums_float(ctx, s, out, min_part_size, ch, offset, prev_selir, selir);
11067 break;
11168 case AV_SAMPLE_FMT_DBLP:
112− if (ctx->is_disabled || s->prev_is_disabled) {
113− const double *in = (const double *)s->in->extended_data[ch] + offset;
114− const double *xfade0 = (const double *)s->xfade[0]->extended_data[ch];
115− const double *xfade1 = (const double *)s->xfade[1]->extended_data[ch];
116− double *src0 = (double *)s->fadein[0]->extended_data[ch];
117− double *src1 = (double *)s->fadein[1]->extended_data[ch];
118− double *dst = ((double *)out->extended_data[ch]) + offset;
119−
120− if (ctx->is_disabled && !s->prev_is_disabled) {
121− memset(src0, 0, min_part_size * sizeof(double));
122− fir_quantum_double(ctx, s->fadein[0], ch, offset, 0, selir);
123− for (int n = 0; n < min_part_size; n++)
124− dst[n] = xfade1[n] * src0[n] + xfade0[n] * in[n];
125− } else if (!ctx->is_disabled && s->prev_is_disabled) {
126− memset(src1, 0, min_part_size * sizeof(double));
127− fir_quantum_double(ctx, s->fadein[1], ch, offset, 0, selir);
128− for (int n = 0; n < min_part_size; n++)
129− dst[n] = xfade1[n] * in[n] + xfade0[n] * src1[n];
130− } else {
131− memcpy(dst, in, sizeof(double) * min_part_size);
132− }
133− } else if (prev_selir != selir && s->loading[ch] != 0) {
134− const double *xfade0 = (const double *)s->xfade[0]->extended_data[ch];
135− const double *xfade1 = (const double *)s->xfade[1]->extended_data[ch];
136− double *src0 = (double *)s->fadein[0]->extended_data[ch];
137− double *src1 = (double *)s->fadein[1]->extended_data[ch];
138− double *dst = ((double *)out->extended_data[ch]) + offset;
139−
140− memset(src0, 0, min_part_size * sizeof(double));
141− memset(src1, 0, min_part_size * sizeof(double));
142−
143− fir_quantum_double(ctx, s->fadein[0], ch, offset, 0, prev_selir);
144− fir_quantum_double(ctx, s->fadein[1], ch, offset, 0, selir);
145−
146− if (s->loading[ch] > s->max_offset[selir]) {
147− for (int n = 0; n < min_part_size; n++)
148− dst[n] = xfade1[n] * src0[n] + xfade0[n] * src1[n];
149− s->loading[ch] = 0;
150− } else {
151− memcpy(dst, src0, min_part_size * sizeof(double));
152− }
153− } else {
154− fir_quantum_double(ctx, out, ch, offset, offset, selir);
155− }
69+ fir_quantums_double(ctx, s, out, min_part_size, ch, offset, prev_selir, selir);
15670 break;
15771 }
15872
libavfilter/afir_template.c+50−0
@@ -242,3 +242,53 @@ static int fn(fir_quantum)(AVFilterContext *ctx, AVFrame *out, int ch, int ioffs · 241 unmodified lines
242242
243243 return 0;
244244 }
245+
246+static void fn(fir_quantums)(AVFilterContext *ctx, AudioFIRContext *s, AVFrame *out,
247+ int min_part_size, int ch, int offset,
248+ int prev_selir, int selir)
249+{
250+ if (ctx->is_disabled || s->prev_is_disabled) {
251+ const ftype *in = (const ftype *)s->in->extended_data[ch] + offset;
252+ const ftype *xfade0 = (const ftype *)s->xfade[0]->extended_data[ch];
253+ const ftype *xfade1 = (const ftype *)s->xfade[1]->extended_data[ch];
254+ ftype *src0 = (ftype *)s->fadein[0]->extended_data[ch];
255+ ftype *src1 = (ftype *)s->fadein[1]->extended_data[ch];
256+ ftype *dst = ((ftype *)out->extended_data[ch]) + offset;
257+
258+ if (ctx->is_disabled && !s->prev_is_disabled) {
259+ memset(src0, 0, min_part_size * sizeof(ftype));
260+ fn(fir_quantum)(ctx, s->fadein[0], ch, offset, 0, selir);
261+ for (int n = 0; n < min_part_size; n++)
262+ dst[n] = xfade1[n] * src0[n] + xfade0[n] * in[n];
263+ } else if (!ctx->is_disabled && s->prev_is_disabled) {
264+ memset(src1, 0, min_part_size * sizeof(ftype));
265+ fn(fir_quantum)(ctx, s->fadein[1], ch, offset, 0, selir);
266+ for (int n = 0; n < min_part_size; n++)
267+ dst[n] = xfade1[n] * in[n] + xfade0[n] * src1[n];
268+ } else {
269+ memcpy(dst, in, sizeof(ftype) * min_part_size);
270+ }
271+ } else if (prev_selir != selir && s->loading[ch] != 0) {
272+ const ftype *xfade0 = (const ftype *)s->xfade[0]->extended_data[ch];
273+ const ftype *xfade1 = (const ftype *)s->xfade[1]->extended_data[ch];
274+ ftype *src0 = (ftype *)s->fadein[0]->extended_data[ch];
275+ ftype *src1 = (ftype *)s->fadein[1]->extended_data[ch];
276+ ftype *dst = ((ftype *)out->extended_data[ch]) + offset;
277+
278+ memset(src0, 0, min_part_size * sizeof(ftype));
279+ memset(src1, 0, min_part_size * sizeof(ftype));
280+
281+ fn(fir_quantum)(ctx, s->fadein[0], ch, offset, 0, prev_selir);
282+ fn(fir_quantum)(ctx, s->fadein[1], ch, offset, 0, selir);
283+
284+ if (s->loading[ch] > s->max_offset[selir]) {
285+ for (int n = 0; n < min_part_size; n++)
286+ dst[n] = xfade1[n] * src0[n] + xfade0[n] * src1[n];
287+ s->loading[ch] = 0;
288+ } else {
289+ memcpy(dst, src0, min_part_size * sizeof(ftype));
290+ }
291+ } else {
292+ fn(fir_quantum)(ctx, out, ch, offset, offset, selir);
293+ }
294+}

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