Showing the changes to libavfilter (2 of 2 files). Show all
Unified · Split
| @@ -63,96 +63,10 @@ static int fir_channel(AVFilterContext *ctx, AVFrame *out, int ch) · 62 unmodified lines | ||
| 63 | 63 | for (int offset = 0; offset < out->nb_samples; offset += min_part_size) { |
| 64 | 64 | switch (s->format) { |
| 65 | 65 | 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); | |
| 110 | 67 | break; |
| 111 | 68 | 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); | |
| 156 | 70 | break; |
| 157 | 71 | } |
| 158 | 72 | |
| @@ -242,3 +242,53 @@ static int fn(fir_quantum)(AVFilterContext *ctx, AVFrame *out, int ch, int ioffs · 241 unmodified lines | ||
| 242 | 242 | |
| 243 | 243 | return 0; |
| 244 | 244 | } |
| 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 | +} | |