diff options
author | Sean Bartell <wingedtachikoma@gmail.com> | 2011-06-25 21:32:25 -0400 |
---|---|---|
committer | Nils Wallménius <nils@rockbox.org> | 2012-04-25 22:13:20 +0200 |
commit | f40bfc9267b13b54e6379dfe7539447662879d24 (patch) | |
tree | 9b20069d5e62809ff434061ad730096836f916f2 /lib/rbcodec/codecs/libspeex/modes.h | |
parent | a0009907de7a0107d49040d8a180f140e2eff299 (diff) | |
download | rockbox-f40bfc9267b13b54e6379dfe7539447662879d24.tar.gz rockbox-f40bfc9267b13b54e6379dfe7539447662879d24.zip |
Add codecs to librbcodec.
Change-Id: Id7f4717d51ed02d67cb9f9cb3c0ada4a81843f97
Reviewed-on: http://gerrit.rockbox.org/137
Reviewed-by: Nils Wallménius <nils@rockbox.org>
Tested-by: Nils Wallménius <nils@rockbox.org>
Diffstat (limited to 'lib/rbcodec/codecs/libspeex/modes.h')
-rw-r--r-- | lib/rbcodec/codecs/libspeex/modes.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libspeex/modes.h b/lib/rbcodec/codecs/libspeex/modes.h new file mode 100644 index 0000000000..0fa1c3460e --- /dev/null +++ b/lib/rbcodec/codecs/libspeex/modes.h | |||
@@ -0,0 +1,161 @@ | |||
1 | /* Copyright (C) 2002-2006 Jean-Marc Valin */ | ||
2 | /** | ||
3 | @file modes.h | ||
4 | @brief Describes the different modes of the codec | ||
5 | */ | ||
6 | /* | ||
7 | Redistribution and use in source and binary forms, with or without | ||
8 | modification, are permitted provided that the following conditions | ||
9 | are met: | ||
10 | |||
11 | - Redistributions of source code must retain the above copyright | ||
12 | notice, this list of conditions and the following disclaimer. | ||
13 | |||
14 | - Redistributions in binary form must reproduce the above copyright | ||
15 | notice, this list of conditions and the following disclaimer in the | ||
16 | documentation and/or other materials provided with the distribution. | ||
17 | |||
18 | - Neither the name of the Xiph.org Foundation nor the names of its | ||
19 | contributors may be used to endorse or promote products derived from | ||
20 | this software without specific prior written permission. | ||
21 | |||
22 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
23 | ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
24 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
25 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR | ||
26 | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
27 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
28 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
29 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
30 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
31 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
32 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
33 | |||
34 | */ | ||
35 | |||
36 | #ifndef MODES_H | ||
37 | #define MODES_H | ||
38 | |||
39 | #include "speex/speex.h" | ||
40 | #include "speex/speex_bits.h" | ||
41 | #include "arch.h" | ||
42 | |||
43 | #define NB_SUBMODES 16 | ||
44 | #define NB_SUBMODE_BITS 4 | ||
45 | |||
46 | #define SB_SUBMODES 8 | ||
47 | #define SB_SUBMODE_BITS 3 | ||
48 | |||
49 | /* Used internally, NOT TO BE USED in applications */ | ||
50 | /** Used internally*/ | ||
51 | #define SPEEX_GET_PI_GAIN 100 | ||
52 | /** Used internally*/ | ||
53 | #define SPEEX_GET_EXC 101 | ||
54 | /** Used internally*/ | ||
55 | #define SPEEX_GET_INNOV 102 | ||
56 | /** Used internally*/ | ||
57 | #define SPEEX_GET_DTX_STATUS 103 | ||
58 | /** Used internally*/ | ||
59 | #define SPEEX_SET_INNOVATION_SAVE 104 | ||
60 | /** Used internally*/ | ||
61 | #define SPEEX_SET_WIDEBAND 105 | ||
62 | |||
63 | /** Used internally*/ | ||
64 | #define SPEEX_GET_STACK 106 | ||
65 | |||
66 | |||
67 | /** Quantizes LSPs */ | ||
68 | typedef void (*lsp_quant_func)(spx_lsp_t *, spx_lsp_t *, int, SpeexBits *); | ||
69 | |||
70 | /** Decodes quantized LSPs */ | ||
71 | typedef void (*lsp_unquant_func)(spx_lsp_t *, int, SpeexBits *); | ||
72 | |||
73 | |||
74 | /** Long-term predictor quantization */ | ||
75 | typedef int (*ltp_quant_func)(spx_word16_t *, spx_word16_t *, spx_coef_t *, spx_coef_t *, | ||
76 | spx_coef_t *, spx_sig_t *, const void *, int, int, spx_word16_t, | ||
77 | int, int, SpeexBits*, char *, spx_word16_t *, spx_word16_t *, int, int, int, spx_word32_t *); | ||
78 | |||
79 | /** Long-term un-quantize */ | ||
80 | typedef void (*ltp_unquant_func)(spx_word16_t *, spx_word32_t *, int, int, spx_word16_t, const void *, int, int *, | ||
81 | spx_word16_t *, SpeexBits*, char*, int, int, spx_word16_t, int); | ||
82 | |||
83 | |||
84 | /** Innovation quantization function */ | ||
85 | typedef void (*innovation_quant_func)(spx_word16_t *, spx_coef_t *, spx_coef_t *, spx_coef_t *, const void *, int, int, | ||
86 | spx_sig_t *, spx_word16_t *, SpeexBits *, char *, int, int); | ||
87 | |||
88 | /** Innovation unquantization function */ | ||
89 | typedef void (*innovation_unquant_func)(spx_sig_t *, const void *, int, SpeexBits*, char *, spx_int32_t *); | ||
90 | |||
91 | /** Description of a Speex sub-mode (wither narrowband or wideband */ | ||
92 | typedef struct SpeexSubmode { | ||
93 | int lbr_pitch; /**< Set to -1 for "normal" modes, otherwise encode pitch using a global pitch and allowing a +- lbr_pitch variation (for low not-rates)*/ | ||
94 | int forced_pitch_gain; /**< Use the same (forced) pitch gain for all sub-frames */ | ||
95 | int have_subframe_gain; /**< Number of bits to use as sub-frame innovation gain */ | ||
96 | int double_codebook; /**< Apply innovation quantization twice for higher quality (and higher bit-rate)*/ | ||
97 | /*LSP functions*/ | ||
98 | lsp_quant_func lsp_quant; /**< LSP quantization function */ | ||
99 | lsp_unquant_func lsp_unquant; /**< LSP unquantization function */ | ||
100 | |||
101 | /*Long-term predictor functions*/ | ||
102 | ltp_quant_func ltp_quant; /**< Long-term predictor (pitch) quantizer */ | ||
103 | ltp_unquant_func ltp_unquant; /**< Long-term predictor (pitch) un-quantizer */ | ||
104 | const void *ltp_params; /**< Pitch parameters (options) */ | ||
105 | |||
106 | /*Quantization of innovation*/ | ||
107 | innovation_quant_func innovation_quant; /**< Innovation quantization */ | ||
108 | innovation_unquant_func innovation_unquant; /**< Innovation un-quantization */ | ||
109 | const void *innovation_params; /**< Innovation quantization parameters*/ | ||
110 | |||
111 | spx_word16_t comb_gain; /**< Gain of enhancer comb filter */ | ||
112 | |||
113 | int bits_per_frame; /**< Number of bits per frame after encoding*/ | ||
114 | } SpeexSubmode; | ||
115 | |||
116 | /** Struct defining the encoding/decoding mode*/ | ||
117 | typedef struct SpeexNBMode { | ||
118 | int frameSize; /**< Size of frames used for encoding */ | ||
119 | int subframeSize; /**< Size of sub-frames used for encoding */ | ||
120 | int lpcSize; /**< Order of LPC filter */ | ||
121 | int pitchStart; /**< Smallest pitch value allowed */ | ||
122 | int pitchEnd; /**< Largest pitch value allowed */ | ||
123 | |||
124 | spx_word16_t gamma1; /**< Perceptual filter parameter #1 */ | ||
125 | spx_word16_t gamma2; /**< Perceptual filter parameter #2 */ | ||
126 | spx_word16_t lpc_floor; /**< Noise floor for LPC analysis */ | ||
127 | |||
128 | const SpeexSubmode *submodes[NB_SUBMODES]; /**< Sub-mode data for the mode */ | ||
129 | int defaultSubmode; /**< Default sub-mode to use when encoding */ | ||
130 | int quality_map[11]; /**< Mode corresponding to each quality setting */ | ||
131 | } SpeexNBMode; | ||
132 | |||
133 | |||
134 | /** Struct defining the encoding/decoding mode for SB-CELP (wideband) */ | ||
135 | typedef struct SpeexSBMode { | ||
136 | const SpeexMode *nb_mode; /**< Embedded narrowband mode */ | ||
137 | int frameSize; /**< Size of frames used for encoding */ | ||
138 | int subframeSize; /**< Size of sub-frames used for encoding */ | ||
139 | int lpcSize; /**< Order of LPC filter */ | ||
140 | spx_word16_t gamma1; /**< Perceptual filter parameter #1 */ | ||
141 | spx_word16_t gamma2; /**< Perceptual filter parameter #1 */ | ||
142 | spx_word16_t lpc_floor; /**< Noise floor for LPC analysis */ | ||
143 | spx_word16_t folding_gain; | ||
144 | |||
145 | const SpeexSubmode *submodes[SB_SUBMODES]; /**< Sub-mode data for the mode */ | ||
146 | int defaultSubmode; /**< Default sub-mode to use when encoding */ | ||
147 | int low_quality_map[11]; /**< Mode corresponding to each quality setting */ | ||
148 | int quality_map[11]; /**< Mode corresponding to each quality setting */ | ||
149 | #ifndef DISABLE_VBR | ||
150 | const float (*vbr_thresh)[11]; | ||
151 | #endif | ||
152 | int nb_modes; | ||
153 | } SpeexSBMode; | ||
154 | |||
155 | int speex_encode_native(void *state, spx_word16_t *in, SpeexBits *bits); | ||
156 | int speex_decode_native(void *state, SpeexBits *bits, spx_word16_t *out); | ||
157 | |||
158 | int nb_mode_query(const void *mode, int request, void *ptr); | ||
159 | int wb_mode_query(const void *mode, int request, void *ptr); | ||
160 | |||
161 | #endif | ||