#ifdef NOFMOD#include "speex_utils.h"/* BEGIN -- copied from speex_resampler.c --*/extern "C" {#ifdef FIXED_POINTtypedef spx_int16_t spx_word16_t;typedef spx_int32_t spx_word32_t;typedef spx_word32_t spx_mem_t;typedef spx_word16_t spx_coef_t;typedef spx_word16_t spx_lsp_t;typedef spx_word32_t spx_sig_t;#elsetypedef float spx_mem_t;typedef float spx_coef_t;typedef float spx_lsp_t;typedef float spx_sig_t;typedef float spx_word16_t;typedef float spx_word32_t;#endiftypedef int (*resampler_basic_func)(SpeexResamplerState *, spx_uint32_t , const spx_word16_t *, spx_uint32_t *, spx_word16_t *, spx_uint32_t *);struct SpeexResamplerState_ { spx_uint32_t in_rate; spx_uint32_t out_rate; spx_uint32_t num_rate; spx_uint32_t den_rate; int quality; spx_uint32_t nb_channels; spx_uint32_t filt_len; spx_uint32_t mem_alloc_size; spx_uint32_t buffer_size; int int_advance; int frac_advance; float cutoff; spx_uint32_t oversample; int initialised; int started; /* These are per-channel */ spx_int32_t *last_sample; spx_uint32_t *samp_frac_num; spx_uint32_t *magic_samples; spx_word16_t *mem; spx_word16_t *sinc_table; spx_uint32_t sinc_table_length; resampler_basic_func resampler_ptr; int in_stride; int out_stride;} ;}/* END -- copied from speex_resampler.c --*/int speex_resampler_in_samples_for_out_samples(SpeexResamplerState *st, spx_uint32_t channel_index, spx_uint32_t out_len, spx_uint32_t *in_len){ /* note that this function does no bounds checking. The frac_adv variable * could get very large. I've chosen for a 64bit variable here to prevent overflow. * On platforms that do not have 64 bit types (are there any?) this could be * done by deviding out_len in smaler parts, namely (MAX_INT / (2*state->den_rate)) */ SpeexResamplerState_* state = (SpeexResamplerState_*) st; *in_len = state->int_advance * out_len; unsigned long long int frac_adv = (unsigned long long int) state->samp_frac_num[channel_index] + ((unsigned long long int) state->frac_advance * (unsigned long long int) out_len); unsigned long long int frac_samples = frac_adv / (unsigned long long int)state->den_rate; *in_len += frac_samples; if (state->magic_samples[channel_index] > *in_len) { *in_len = 0; } else { *in_len-=state->magic_samples[channel_index]; } return RESAMPLER_ERR_SUCCESS;}#endif //NOFMOD