| @@ -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 | |