summaryrefslogtreecommitdiffstats
path: root/converter.h
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-05-12 23:38:38 +0000
committerLennart Poettering <lennart@poettering.net>2007-05-12 23:38:38 +0000
commita64e85acf96bc0c55363fe55c9e9116aef2a8584 (patch)
tree69ec57b46bdebe0e7496bf11ea9a54cdf5806904 /converter.h
parent2eb6dec8e9f0114bdbad59cf8f11f197f8fdaaf3 (diff)
resampling works
git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@4 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce
Diffstat (limited to 'converter.h')
-rw-r--r--converter.h81
1 files changed, 81 insertions, 0 deletions
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