From 7d83e5c7816b5e343695a75ba58b32dbe1be969a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 1 Oct 2007 20:16:28 +0000 Subject: move all sources down to a seperate src/ tree git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@34 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce --- src/resample.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/resample.c (limited to 'src/resample.c') diff --git a/src/resample.c b/src/resample.c new file mode 100644 index 0000000..23c63a5 --- /dev/null +++ b/src/resample.c @@ -0,0 +1,42 @@ +#include "macro.h" +#include "resample.h" + +static void resample_s16(SpeexResamplerState *speex, unsigned channel, void *dst, size_t dstr, const void *src, size_t sstr, size_t in_bytes, size_t *out_bytes) { + + spx_uint32_t in_samples = in_bytes/sizeof(int16_t), out_samples = *out_bytes/sizeof(int16_t); + + speex_resampler_set_input_stride(speex, sstr/sizeof(int16_t)); + speex_resampler_set_input_stride(speex, dstr/sizeof(int16_t)); + + speex_resampler_process_int(speex, channel, src, &in_samples, dst, &out_samples); + + sa_assert(in_samples == in_bytes/sizeof(int16_t)); + + *out_bytes = out_samples * sizeof(int16_t); +} + +static void resample_f32(SpeexResamplerState *speex, unsigned channel, void *dst, size_t dstr, const void *src, size_t sstr, size_t in_bytes, size_t *out_bytes) { + + spx_uint32_t in_samples = in_bytes/sizeof(float), out_samples = *out_bytes/sizeof(float); + + speex_resampler_set_input_stride(speex, sstr/sizeof(float)); + speex_resampler_set_input_stride(speex, dstr/sizeof(float)); + + speex_resampler_process_float(speex, channel, src, &in_samples, dst, &out_samples); + + sa_assert(in_samples == in_bytes/sizeof(float)); + + *out_bytes = out_samples * sizeof(float); +} + +sa_resample_func_t sa_get_resample_func(sa_pcm_format_t f) { + + static const sa_resample_func_t funcs[_SA_PCM_FORMAT_MAX] = { + [SA_PCM_FORMAT_S16_NE] = resample_s16, + [SA_PCM_FORMAT_FLOAT32_NE] = resample_f32 + }; + + sa_assert(f < _SA_PCM_FORMAT_MAX); + + return funcs[f]; +} -- cgit