Unified · Split
| @@ -52,6 +52,12 @@ typedef struct · 51 unmodified lines | ||
| 52 | 52 | static void fip_reset (SRC_PRIVATE *psrc) ; |
| 53 | 53 | static int fip_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; |
| 54 | 54 | |
| 55 | +static int fip_process_var_down (FIR_IIR_POLY * fip, SRC_DATA * data) ; | |
| 56 | +static int fip_process_const_down (FIR_IIR_POLY * fip, SRC_DATA * data) ; | |
| 57 | +static int fip_process_var_up (FIR_IIR_POLY * fip, SRC_DATA * data) ; | |
| 58 | +static int fip_process_const_up (FIR_IIR_POLY * fip, SRC_DATA * data) ; | |
| 59 | + | |
| 60 | + | |
| 55 | 61 | static float best_coeffs [250] ; |
| 56 | 62 | |
| 57 | 63 | const char* |
| @@ -185,19 +191,58 @@ fip_process (SRC_PRIVATE *psrc, SRC_DATA *data) · 127 unmodified lines | ||
| 185 | 191 | if (sizeof (fip->dummy [0]) != sizeof (data->data_in [0])) |
| 186 | 192 | return SRC_ERR_SIZE_INCOMPATIBILITY ; |
| 187 | 193 | |
| 188 | − if (data->src_ratio < 1.0) | |
| 189 | − { printf ("Bad ratio %f\n", data->src_ratio) ; | |
| 190 | − exit (1) ; | |
| 194 | + /* Just after an fip_reset(), the src_ratio field is invalid. */ | |
| 195 | + if (fip->src_ratio < 1.0 / SRC_MAX_RATIO) | |
| 196 | + fip->src_ratio = data->src_ratio ; | |
| 197 | + | |
| 198 | + if (fip->src_ratio < 1.0 || data->src_ratio < 1.0) | |
| 199 | + { /* Special case code for constant and varying src_ratio downsampling. */ | |
| 200 | + if (fabs (fip->src_ratio - data->src_ratio) > 1e-20) | |
| 201 | + return fip_process_var_down (fip, data) ; | |
| 202 | + | |
| 203 | + return fip_process_const_down (fip, data) ; | |
| 191 | 204 | } ; |
| 192 | 205 | |
| 206 | + if (fabs (fip->src_ratio - data->src_ratio) > 1e-20) | |
| 207 | + return fip_process_var_up (fip, data) ; | |
| 193 | 208 | |
| 194 | − return SRC_ERR_NO_ERROR ; | |
| 209 | + return fip_process_const_up (fip, data) ; | |
| 195 | 210 | } /* fip_process */ |
| 196 | 211 | |
| 197 | 212 | /*---------------------------------------------------------------------------------------- |
| 198 | 213 | */ |
| 199 | 214 | |
| 215 | +static int | |
| 216 | +fip_process_var_down (FIR_IIR_POLY * fip, SRC_DATA * data) | |
| 217 | +{ fip = NULL ; | |
| 218 | + data = NULL ; | |
| 219 | + printf ("%s : not implemented yet.\n", __func__) ; | |
| 220 | + return SRC_ERR_NO_ERROR ; | |
| 221 | +} /* fip_process_var_down */ | |
| 200 | 222 | |
| 223 | +static int | |
| 224 | +fip_process_const_down (FIR_IIR_POLY * fip, SRC_DATA * data) | |
| 225 | +{ fip = NULL ; | |
| 226 | + data = NULL ; | |
| 227 | + printf ("%s : not implemented yet.\n", __func__) ; | |
| 228 | + return SRC_ERR_NO_ERROR ; | |
| 229 | +} /* fip_process_const_down */ | |
| 230 | + | |
| 231 | +static int | |
| 232 | +fip_process_var_up (FIR_IIR_POLY * fip, SRC_DATA * data) | |
| 233 | +{ fip = NULL ; | |
| 234 | + data = NULL ; | |
| 235 | + printf ("%s : not implemented yet.\n", __func__) ; | |
| 236 | + return SRC_ERR_NO_ERROR ; | |
| 237 | +} /* fip_process_var_up */ | |
| 238 | + | |
| 239 | +static int | |
| 240 | +fip_process_const_up (FIR_IIR_POLY * fip, SRC_DATA * data) | |
| 241 | +{ fip = NULL ; | |
| 242 | + data = NULL ; | |
| 243 | + printf ("%s : not implemented yet.\n", __func__) ; | |
| 244 | + return SRC_ERR_NO_ERROR ; | |
| 245 | +} /* fip_process_const_up */ | |
| 201 | 246 | |
| 202 | 247 | |
| 203 | 248 | /* |