All pastes #1985357 Raw Edit

Anonymous

public c v1 · immutable
#1985357 ·published 2010-11-08 14:46 UTC
rendered paste body
#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