Unified · Split
| @@ -52,6 +52,12 @@ typedef struct · 51 unmodified lines | |||
| 52 | static void fip_reset (SRC_PRIVATE *psrc) ; | 52 | static void fip_reset (SRC_PRIVATE *psrc) ; |
| 53 | static int fip_process (SRC_PRIVATE *psrc, SRC_DATA *data) ; | 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 | static float best_coeffs [250] ; | 61 | static float best_coeffs [250] ; |
| 56 | 62 | ||
| 57 | const char* | 63 | const char* |
| @@ -185,19 +191,58 @@ fip_process (SRC_PRIVATE *psrc, SRC_DATA *data) · 127 unmodified lines | |||
| 185 | if (sizeof (fip->dummy [0]) != sizeof (data->data_in [0])) | 191 | if (sizeof (fip->dummy [0]) != sizeof (data->data_in [0])) |
| 186 | return SRC_ERR_SIZE_INCOMPATIBILITY ; | 192 | return SRC_ERR_SIZE_INCOMPATIBILITY ; |
| 187 | 193 | ||
| 188 | if (data->src_ratio < 1.0) | 194 | /* Just after an fip_reset(), the src_ratio field is invalid. */ |
| 189 | { printf ("Bad ratio %f\n", data->src_ratio) ; | 195 | if (fip->src_ratio < 1.0 / SRC_MAX_RATIO) |
| 190 | exit (1) ; | 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 | } /* fip_process */ | 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 | /* |