From a64e85acf96bc0c55363fe55c9e9116aef2a8584 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 12 May 2007 23:38:38 +0000 Subject: resampling works git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@4 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce --- converter.h | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 converter.h (limited to 'converter.h') diff --git a/converter.h b/converter.h new file mode 100644 index 0000000..5be03dc --- /dev/null +++ b/converter.h @@ -0,0 +1,81 @@ +#ifndef foosydneyconverterhfoo +#define foosydneyconverterhfoo + +#include "sydney.h" +#include "volscale.h" +#include "byteswap.h" +#include "zero.h" +#include "add.h" +#include "bbuffer.h" +#include "resample.h" +#include "format.h" +#include "common.h" +#include "interleave.h" + +typedef struct converter converter_t; + +struct converter { + sa_pcm_format_t from_pcm_format, to_pcm_format; + unsigned from_nchannels, to_nchannels; + unsigned from_rate, to_rate; + + int sum_required; + int remap_required; + + sa_pcm_format_t work_pcm_format; + + size_t from_sample_size, work_sample_size, to_sample_size; + + byteswap_func_t pre_byteswap_func, post_byteswap_func; + format_func_t pre_format_func, post_format_func; + volscale_func_t volscale_func; + zero_func_t zero_func; + add_func_t add_func; + resample_func_t resample_func; + interleave_func_t interleave_func; + + SpeexResamplerState *speex; + + bbuffer_t bb_pre_byteswap, + bb_pre_format, + bb_volscale, + bb_remap, + bb_resample, + bb_post_format, + bb_post_byteswap, + bb_interleave, + bb_tmp; + + void **from_process_data, **to_process_data; + size_t *from_stride, *to_stride; + + int32_t *volume_factor, *volume_divisor; + int no_volume; + + int *channel_map_table; + + void *zero_buffer; + size_t zero_size; +}; + +int converter_init(converter_t *c, const pcm_attrs_t *from, const pcm_attrs_t *to, int dynamic_rate_enabled); +void converter_done(converter_t *c); + +int converter_go( + converter_t *c, + const void *const src[], const size_t sstr[], int sinterleave, + const void **dst[], size_t *dstr[], int dinterleave, + size_t *size); + +int converter_go_interleaved( + converter_t *c, + const void *const data, + const void **dst[], size_t *dstr[], int dinterleave, + size_t *size); + +void converter_set_volume(converter_t *c, int vol[]); + +void converter_set_ratio(converter_t *c, unsigned rate1, unsigned rate2); + + +#endif -- cgit