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