Unified · Split
| @@ -38,13 +38,13 @@ typedef struct · 37 unmodified lines | ||
| 38 | 38 | double src_ratio, input_index ; |
| 39 | 39 | |
| 40 | 40 | float *input_buffer ; |
| 41 | − int in_buf_len ; | |
| 41 | + int in_buf_len, in_start, in_end ; | |
| 42 | 42 | |
| 43 | 43 | float *fir_out ; |
| 44 | − int fir_out_len ; | |
| 44 | + int fir_out_len, fir_start, fir_end ; | |
| 45 | 45 | |
| 46 | 46 | float *iir_out ; |
| 47 | − int iir_out_len ; | |
| 47 | + int iir_out_len, iir_start, iir_end ; | |
| 48 | 48 | |
| 49 | 49 | float dummy [1] ; |
| 50 | 50 | } FIR_IIR_POLY ; |
| @@ -52,7 +52,6 @@ typedef struct · 1 unmodified line | ||
| 52 | 52 | static void fip_reset (SRC_PRIVATE *psrc) ; |
| 53 | 53 | static int fip_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; |
| 54 | 54 | |
| 55 | − | |
| 56 | 55 | static float best_coeffs [250] ; |
| 57 | 56 | |
| 58 | 57 | const char* |
| @@ -61,12 +60,13 @@ fip_get_name (int src_enum) · 2 unmodified lines | ||
| 61 | 60 | switch (src_enum) |
| 62 | 61 | { case SRC_FIR_IIR_POLY_BEST : |
| 63 | 62 | return "Best FIR/IIR/Polynomial Interpolator" ; |
| 64 | − | |
| 63 | +#if 0 | |
| 65 | 64 | case SRC_FIR_IIR_POLY_MEDIUM : |
| 66 | 65 | return "Medium FIR/IIR/Polynomial Interpolator" ; |
| 67 | 66 | |
| 68 | 67 | case SRC_FIR_IIR_POLY_FASTEST : |
| 69 | 68 | return "Fastest FIR/IIR/Polynomial Interpolator" ; |
| 69 | +#endif | |
| 70 | 70 | } ; |
| 71 | 71 | |
| 72 | 72 | return NULL ; |
| @@ -78,12 +78,13 @@ fip_get_description (int src_enum) · 5 unmodified lines | ||
| 78 | 78 | switch (src_enum) |
| 79 | 79 | { case SRC_FIR_IIR_POLY_BEST : |
| 80 | 80 | return "Three stage FIR/IIR/Polynomial Interpolator, best quality, XXdb SNR, XX% BW." ; |
| 81 | − | |
| 81 | +#if 0 | |
| 82 | 82 | case SRC_FIR_IIR_POLY_MEDIUM : |
| 83 | 83 | return "Three stage FIR/IIR/Polynomial Interpolator, medium quality, XXdb SNR, XX% BW." ; |
| 84 | 84 | |
| 85 | 85 | case SRC_FIR_IIR_POLY_FASTEST : |
| 86 | 86 | return "Three stage FIR/IIR/Polynomial Interpolator, fastest, XXdb SNR, XX% BW." ; |
| 87 | +#endif | |
| 87 | 88 | } ; |
| 88 | 89 | |
| 89 | 90 | return NULL ; |
| @@ -152,11 +153,23 @@ fip_reset (SRC_PRIVATE *psrc) · 62 unmodified lines | ||
| 152 | 153 | { FIR_IIR_POLY *fip ; |
| 153 | 154 | |
| 154 | 155 | fip = (FIR_IIR_POLY *) psrc->private_data ; |
| 156 | + if (fip == NULL) | |
| 157 | + return ; | |
| 155 | 158 | |
| 159 | + memset (fip->input_buffer, 0, fip->channels * fip->in_buf_len * sizeof (fip->dummy [0])) ; | |
| 160 | + memset (fip->fir_out, 0, fip->channels * fip->fir_out_len * sizeof (fip->dummy [0])) ; | |
| 161 | + memset (fip->iir_out, 0, fip->channels * fip->iir_out_len * sizeof (fip->dummy [0])) ; | |
| 162 | + | |
| 163 | + fip->in_start = fip->in_end = ARRAY_LEN (best_coeffs) ; | |
| 164 | + fip->fir_start = fip->fir_end = 0 ; | |
| 165 | + fip->iir_start = fip->iir_end = 0 ; | |
| 166 | + | |
| 167 | + fip->src_ratio = fip->input_index = 0.0 ; | |
| 168 | + | |
| 169 | + return ; | |
| 156 | 170 | } /* fip_reset */ |
| 157 | 171 | |
| 158 | 172 | /*======================================================================================== |
| 159 | −** Beware all ye who dare pass this point. There be dragons here. | |
| 160 | 173 | */ |
| 161 | 174 | |
| 162 | 175 | static int |
| @@ -172,6 +185,11 @@ fip_process (SRC_PRIVATE *psrc, SRC_DATA *data) · 9 unmodified lines | ||
| 172 | 185 | if (sizeof (fip->dummy [0]) != sizeof (data->data_in [0])) |
| 173 | 186 | return SRC_ERR_SIZE_INCOMPATIBILITY ; |
| 174 | 187 | |
| 188 | + if (data->src_ratio < 1.0) | |
| 189 | + { printf ("Bad ratio %f\n", data->src_ratio) ; | |
| 190 | + exit (1) ; | |
| 191 | + } ; | |
| 192 | + | |
| 175 | 193 | |
| 176 | 194 | return SRC_ERR_NO_ERROR ; |
| 177 | 195 | } /* fip_process */ |
| @@ -184,9 +202,8 @@ fip_process (SRC_PRIVATE *psrc, SRC_DATA *data) · 6 unmodified lines | ||
| 184 | 202 | |
| 185 | 203 | /* |
| 186 | 204 | ** Do not edit or modify anything in this comment block. |
| 187 | −** The arch-tag line is a file identity tag for the GNU Arch | |
| 205 | +** The arch-tag line is a file identity tag for the GNU Arch | |
| 188 | 206 | ** revision control system. |
| 189 | 207 | ** |
| 190 | 208 | ** arch-tag: a6c8bad4-740c-4e4f-99f1-e274174ab540 |
| 191 | 209 | */ |
| 192 | − | |