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 | for (int offset = 0; offset < out->nb_samples; offset += min_part_size) { | 63 | for (int offset = 0; offset < out->nb_samples; offset += min_part_size) { |
| 64 | switch (s->format) { | 64 | switch (s->format) { |
| 65 | case AV_SAMPLE_FMT_FLTP: | 65 | case AV_SAMPLE_FMT_FLTP: |
| 66 | if (ctx->is_disabled || s->prev_is_disabled) { | 66 | fir_quantums_float(ctx, s, out, min_part_size, ch, offset, prev_selir, selir); |
| 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 | } | ||
| 110 | break; | 67 | break; |
| 111 | case AV_SAMPLE_FMT_DBLP: | 68 | case AV_SAMPLE_FMT_DBLP: |
| 112 | if (ctx->is_disabled || s->prev_is_disabled) { | 69 | fir_quantums_double(ctx, s, out, min_part_size, ch, offset, prev_selir, selir); |
| 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 | } | ||
| 156 | break; | 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 | return 0; | 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 | } | ||