a5fdf522885af7cc90fa84e99299b382cb60bad1
[speexdsp.git] / include / speex / speex_resampler.h
1 /* Copyright (C) 2007 Jean-Marc Valin
2       
3    File: speex_resampler.h
4    Resampling code
5       
6    The design goals of this code are:
7       - Very fast algorithm
8       - Low memory requirement
9       - Good *perceptual* quality (and not best SNR)
10
11    Redistribution and use in source and binary forms, with or without
12    modification, are permitted provided that the following conditions are
13    met:
14
15    1. Redistributions of source code must retain the above copyright notice,
16    this list of conditions and the following disclaimer.
17
18    2. Redistributions in binary form must reproduce the above copyright
19    notice, this list of conditions and the following disclaimer in the
20    documentation and/or other materials provided with the distribution.
21
22    3. The name of the author may not be used to endorse or promote products
23    derived from this software without specific prior written permission.
24
25    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
26    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28    DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
29    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35    POSSIBILITY OF SUCH DAMAGE.
36 */
37
38
39 #ifndef SPEEX_RESAMPLER_H
40 #define SPEEX_RESAMPLER_H
41
42 #ifdef OUTSIDE_SPEEX
43
44 #define spx_int16_t short
45 #ifdef FIXED_POINT
46 #define spx_word16_t short
47 #define spx_word32_t int
48 #else
49 #define spx_word16_t float
50 #define spx_word32_t float
51 #define MULT16_16(a,b) ((a)*(b))
52 #define PSHR32(a,b) (a)
53 #endif
54
55 #else
56
57 #include "speex/speex_types.h"
58
59 #endif
60
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64
65 struct SpeexResamplerState_;
66 typedef struct SpeexResamplerState_ SpeexResamplerState;
67 //typedef SpeexResamplerState;
68
69 SpeexResamplerState *speex_resampler_init(int nb_channels, int ratio_num, int ratio_den, int in_rate, int out_rate, int quality);
70
71 void speex_resampler_destroy(SpeexResamplerState *st);
72
73 void speex_resampler_process_float(SpeexResamplerState *st, int channel_index, const float *in, int *in_len, float *out, int *out_len);
74
75 void speex_resampler_process_int(SpeexResamplerState *st, int channel_index, const spx_int16_t *in, int *in_len, spx_int16_t *out, int *out_len);
76
77 void speex_resampler_process_interleaved_float(SpeexResamplerState *st, const float *in, int *in_len, float *out, int *out_len);
78
79 void speex_resample_set_rate(SpeexResamplerState *st, int ratio_num, int ratio_den, int in_rate, int out_rate);
80
81 void speex_resample_set_quality(SpeexResamplerState *st, int quality);
82
83 void speex_resample_set_input_stride(SpeexResamplerState *st, int stride);
84
85 void speex_resample_set_output_stride(SpeexResamplerState *st, int stride);
86
87 void speex_resample_skip_zeros(SpeexResamplerState *st);
88
89 void speex_resample_reset_mem(SpeexResamplerState *st);
90
91 #ifdef __cplusplus
92 }
93 #endif
94
95 #endif