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/speex_callbacks.c | |
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/speex_callbacks.c')
-rw-r--r-- | lib/rbcodec/codecs/libspeex/speex_callbacks.c | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libspeex/speex_callbacks.c b/lib/rbcodec/codecs/libspeex/speex_callbacks.c new file mode 100644 index 0000000000..f1de038488 --- /dev/null +++ b/lib/rbcodec/codecs/libspeex/speex_callbacks.c | |||
@@ -0,0 +1,160 @@ | |||
1 | /* Copyright (C) 2002 Jean-Marc Valin | ||
2 | File speex_callbacks.c | ||
3 | Callback handling and in-band signalling | ||
4 | |||
5 | |||
6 | Redistribution and use in source and binary forms, with or without | ||
7 | modification, are permitted provided that the following conditions | ||
8 | are met: | ||
9 | |||
10 | - Redistributions of source code must retain the above copyright | ||
11 | notice, this list of conditions and the following disclaimer. | ||
12 | |||
13 | - Redistributions in binary form must reproduce the above copyright | ||
14 | notice, this list of conditions and the following disclaimer in the | ||
15 | documentation and/or other materials provided with the distribution. | ||
16 | |||
17 | - Neither the name of the Xiph.org Foundation nor the names of its | ||
18 | contributors may be used to endorse or promote products derived from | ||
19 | this software without specific prior written permission. | ||
20 | |||
21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
22 | ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
23 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
24 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR | ||
25 | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
26 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
27 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
28 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
29 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
30 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
31 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
32 | |||
33 | */ | ||
34 | |||
35 | #ifdef HAVE_CONFIG_H | ||
36 | #include "config-speex.h" | ||
37 | #endif | ||
38 | |||
39 | #include "speex/speex_callbacks.h" | ||
40 | #include "arch.h" | ||
41 | #include "os_support.h" | ||
42 | |||
43 | int speex_inband_handler(SpeexBits *bits, SpeexCallback *callback_list, void *state) | ||
44 | { | ||
45 | int id; | ||
46 | SpeexCallback *callback; | ||
47 | /*speex_bits_advance(bits, 5);*/ | ||
48 | id=speex_bits_unpack_unsigned(bits, 4); | ||
49 | callback = callback_list+id; | ||
50 | |||
51 | if (callback->func) | ||
52 | { | ||
53 | return callback->func(bits, state, callback->data); | ||
54 | } else | ||
55 | /*If callback is not registered, skip the right number of bits*/ | ||
56 | { | ||
57 | int adv; | ||
58 | if (id<2) | ||
59 | adv = 1; | ||
60 | else if (id<8) | ||
61 | adv = 4; | ||
62 | else if (id<10) | ||
63 | adv = 8; | ||
64 | else if (id<12) | ||
65 | adv = 16; | ||
66 | else if (id<14) | ||
67 | adv = 32; | ||
68 | else | ||
69 | adv = 64; | ||
70 | speex_bits_advance(bits, adv); | ||
71 | } | ||
72 | return 0; | ||
73 | } | ||
74 | |||
75 | #if 0 | ||
76 | /* Rockbox: unused */ | ||
77 | int speex_std_mode_request_handler(SpeexBits *bits, void *state, void *data) | ||
78 | { | ||
79 | (void)state; | ||
80 | spx_int32_t m; | ||
81 | m = speex_bits_unpack_unsigned(bits, 4); | ||
82 | speex_encoder_ctl(data, SPEEX_SET_MODE, &m); | ||
83 | return 0; | ||
84 | } | ||
85 | |||
86 | int speex_std_low_mode_request_handler(SpeexBits *bits, void *state, void *data) | ||
87 | { | ||
88 | (void)state; | ||
89 | spx_int32_t m; | ||
90 | m = speex_bits_unpack_unsigned(bits, 4); | ||
91 | speex_encoder_ctl(data, SPEEX_SET_LOW_MODE, &m); | ||
92 | return 0; | ||
93 | } | ||
94 | |||
95 | int speex_std_high_mode_request_handler(SpeexBits *bits, void *state, void *data) | ||
96 | { | ||
97 | (void)state; | ||
98 | spx_int32_t m; | ||
99 | m = speex_bits_unpack_unsigned(bits, 4); | ||
100 | speex_encoder_ctl(data, SPEEX_SET_HIGH_MODE, &m); | ||
101 | return 0; | ||
102 | } | ||
103 | #endif | ||
104 | |||
105 | #ifndef DISABLE_VBR | ||
106 | int speex_std_vbr_request_handler(SpeexBits *bits, void *state, void *data) | ||
107 | { | ||
108 | (void)state; | ||
109 | spx_int32_t vbr; | ||
110 | vbr = speex_bits_unpack_unsigned(bits, 1); | ||
111 | speex_encoder_ctl(data, SPEEX_SET_VBR, &vbr); | ||
112 | return 0; | ||
113 | } | ||
114 | #endif /* #ifndef DISABLE_VBR */ | ||
115 | |||
116 | #if 0 | ||
117 | /* Rockbox: unused */ | ||
118 | int speex_std_enh_request_handler(SpeexBits *bits, void *state, void *data) | ||
119 | { | ||
120 | (void)state; | ||
121 | spx_int32_t enh; | ||
122 | enh = speex_bits_unpack_unsigned(bits, 1); | ||
123 | speex_decoder_ctl(data, SPEEX_SET_ENH, &enh); | ||
124 | return 0; | ||
125 | } | ||
126 | #endif | ||
127 | |||
128 | #ifndef DISABLE_VBR | ||
129 | int speex_std_vbr_quality_request_handler(SpeexBits *bits, void *state, void *data) | ||
130 | { | ||
131 | (void)state; | ||
132 | float qual; | ||
133 | qual = speex_bits_unpack_unsigned(bits, 4); | ||
134 | speex_encoder_ctl(data, SPEEX_SET_VBR_QUALITY, &qual); | ||
135 | return 0; | ||
136 | } | ||
137 | #endif /* #ifndef DISABLE_VBR */ | ||
138 | |||
139 | #if 0 | ||
140 | /* Rockbox: unused */ | ||
141 | int speex_std_char_handler(SpeexBits *bits, void *state, void *data) | ||
142 | { | ||
143 | (void)state; | ||
144 | unsigned char ch; | ||
145 | ch = speex_bits_unpack_unsigned(bits, 8); | ||
146 | _speex_putc(ch, data); | ||
147 | /*printf("speex_std_char_handler ch=%x\n", ch);*/ | ||
148 | return 0; | ||
149 | } | ||
150 | #endif | ||
151 | |||
152 | /* Default handler for user callbacks: skip it */ | ||
153 | int speex_default_user_handler(SpeexBits *bits, void *state, void *data) | ||
154 | { | ||
155 | (void)state; | ||
156 | (void)data; | ||
157 | int req_size = speex_bits_unpack_unsigned(bits, 4); | ||
158 | speex_bits_advance(bits, 5+8*req_size); | ||
159 | return 0; | ||
160 | } | ||