summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/libopus/celt/celt.h
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2013-05-20 22:25:57 +0200
committerNils Wallménius <nils@rockbox.org>2013-08-31 08:30:51 +0200
commit580b307fd791c0997a8831bc800bba87797bfb7e (patch)
tree807846056f06fd944a750ce41217a877910ebd59 /lib/rbcodec/codecs/libopus/celt/celt.h
parent74761b70acd96cecc0d35450dd56a98ad9ee7d3d (diff)
downloadrockbox-580b307fd791c0997a8831bc800bba87797bfb7e.tar.gz
rockbox-580b307fd791c0997a8831bc800bba87797bfb7e.zip
Sync opus codec to upstream git
Sync opus codec to upstream commit 02fed471a4568852d6618e041c4f2af0d7730ee2 (August 30 2013) This brings in a lot of optimizations but also makes the diff between our codec and the upstream much smaller as most of our optimizations have been upstreamed or supeceded. Speedups across the board for CELT mode files: 64kbps 128kbps H300 9.82MHz 15.48MHz c200 4.86MHz 9.63MHz fuze v1 10.32MHz 15.92MHz For the silk mode test file (16kbps) arm targets get a speedup of about 2MHz while the H300 is 7.8MHz slower, likely because it's now using the pseudostack more rather than the real stack which is in iram. Patches to get around that are upcomming. Change-Id: Ifecf963e461c51ac42e09dac1e91bc4bc3b12fa3
Diffstat (limited to 'lib/rbcodec/codecs/libopus/celt/celt.h')
-rw-r--r--lib/rbcodec/codecs/libopus/celt/celt.h100
1 files changed, 98 insertions, 2 deletions
diff --git a/lib/rbcodec/codecs/libopus/celt/celt.h b/lib/rbcodec/codecs/libopus/celt/celt.h
index 218cd883df..0911c72f72 100644
--- a/lib/rbcodec/codecs/libopus/celt/celt.h
+++ b/lib/rbcodec/codecs/libopus/celt/celt.h
@@ -50,7 +50,19 @@ extern "C" {
50#define CELTDecoder OpusCustomDecoder 50#define CELTDecoder OpusCustomDecoder
51#define CELTMode OpusCustomMode 51#define CELTMode OpusCustomMode
52 52
53#define _celt_check_mode_ptr_ptr(ptr) ((ptr) + ((ptr) - (const CELTMode**)(ptr))) 53typedef struct {
54 int valid;
55 opus_val16 tonality;
56 opus_val16 tonality_slope;
57 opus_val16 noisiness;
58 opus_val16 activity;
59 opus_val16 music_prob;
60 int bandwidth;
61}AnalysisInfo;
62
63#define __celt_check_mode_ptr_ptr(ptr) ((ptr) + ((ptr) - (const CELTMode**)(ptr)))
64
65#define __celt_check_analysis_ptr(ptr) ((ptr) + ((ptr) - (const AnalysisInfo*)(ptr)))
54 66
55/* Encoder/decoder Requests */ 67/* Encoder/decoder Requests */
56 68
@@ -81,12 +93,27 @@ extern "C" {
81 93
82#define CELT_GET_MODE_REQUEST 10015 94#define CELT_GET_MODE_REQUEST 10015
83/** Get the CELTMode used by an encoder or decoder */ 95/** Get the CELTMode used by an encoder or decoder */
84#define CELT_GET_MODE(x) CELT_GET_MODE_REQUEST, _celt_check_mode_ptr_ptr(x) 96#define CELT_GET_MODE(x) CELT_GET_MODE_REQUEST, __celt_check_mode_ptr_ptr(x)
85 97
86#define CELT_SET_SIGNALLING_REQUEST 10016 98#define CELT_SET_SIGNALLING_REQUEST 10016
87#define CELT_SET_SIGNALLING(x) CELT_SET_SIGNALLING_REQUEST, __opus_check_int(x) 99#define CELT_SET_SIGNALLING(x) CELT_SET_SIGNALLING_REQUEST, __opus_check_int(x)
88 100
101#define CELT_SET_TONALITY_REQUEST 10018
102#define CELT_SET_TONALITY(x) CELT_SET_TONALITY_REQUEST, __opus_check_int(x)
103#define CELT_SET_TONALITY_SLOPE_REQUEST 10020
104#define CELT_SET_TONALITY_SLOPE(x) CELT_SET_TONALITY_SLOPE_REQUEST, __opus_check_int(x)
105
106#define CELT_SET_ANALYSIS_REQUEST 10022
107#define CELT_SET_ANALYSIS(x) CELT_SET_ANALYSIS_REQUEST, __celt_check_analysis_ptr(x)
108
109#define OPUS_SET_LFE_REQUEST 10024
110#define OPUS_SET_LFE(x) OPUS_SET_LFE_REQUEST, __opus_check_int(x)
111
112#define OPUS_SET_ENERGY_SAVE_REQUEST 10026
113#define OPUS_SET_ENERGY_SAVE(x) OPUS_SET_ENERGY_SAVE_REQUEST, __opus_check_val16_ptr(x)
89 114
115#define OPUS_SET_ENERGY_MASK_REQUEST 10028
116#define OPUS_SET_ENERGY_MASK(x) OPUS_SET_ENERGY_MASK_REQUEST, __opus_check_val16_ptr(x)
90 117
91/* Encoder stuff */ 118/* Encoder stuff */
92 119
@@ -110,6 +137,75 @@ int celt_decode_with_ec(OpusCustomDecoder * OPUS_RESTRICT st, const unsigned cha
110#define celt_encoder_ctl opus_custom_encoder_ctl 137#define celt_encoder_ctl opus_custom_encoder_ctl
111#define celt_decoder_ctl opus_custom_decoder_ctl 138#define celt_decoder_ctl opus_custom_decoder_ctl
112 139
140
141#ifdef CUSTOM_MODES
142#define OPUS_CUSTOM_NOSTATIC
143#else
144#define OPUS_CUSTOM_NOSTATIC static inline
145#endif
146
147static const unsigned char trim_icdf[11] = {126, 124, 119, 109, 87, 41, 19, 9, 4, 2, 0};
148/* Probs: NONE: 21.875%, LIGHT: 6.25%, NORMAL: 65.625%, AGGRESSIVE: 6.25% */
149static const unsigned char spread_icdf[4] = {25, 23, 2, 0};
150
151static const unsigned char tapset_icdf[3]={2,1,0};
152
153#ifdef CUSTOM_MODES
154static const unsigned char toOpusTable[20] = {
155 0xE0, 0xE8, 0xF0, 0xF8,
156 0xC0, 0xC8, 0xD0, 0xD8,
157 0xA0, 0xA8, 0xB0, 0xB8,
158 0x00, 0x00, 0x00, 0x00,
159 0x80, 0x88, 0x90, 0x98,
160};
161
162static const unsigned char fromOpusTable[16] = {
163 0x80, 0x88, 0x90, 0x98,
164 0x40, 0x48, 0x50, 0x58,
165 0x20, 0x28, 0x30, 0x38,
166 0x00, 0x08, 0x10, 0x18
167};
168
169static inline int toOpus(unsigned char c)
170{
171 int ret=0;
172 if (c<0xA0)
173 ret = toOpusTable[c>>3];
174 if (ret == 0)
175 return -1;
176 else
177 return ret|(c&0x7);
178}
179
180static inline int fromOpus(unsigned char c)
181{
182 if (c<0x80)
183 return -1;
184 else
185 return fromOpusTable[(c>>3)-16] | (c&0x7);
186}
187#endif /* CUSTOM_MODES */
188
189#define COMBFILTER_MAXPERIOD 1024
190#define COMBFILTER_MINPERIOD 15
191
192extern const signed char tf_select_table[4][8];
193
194int resampling_factor(opus_int32 rate);
195
196void comb_filter(opus_val32 *y, opus_val32 *x, int T0, int T1, int N,
197 opus_val16 g0, opus_val16 g1, int tapset0, int tapset1,
198 const opus_val16 *window, int overlap);
199
200void init_caps(const CELTMode *m,int *cap,int LM,int C);
201
202#ifdef RESYNTH
203void deemphasis(celt_sig *in[], opus_val16 *pcm, int N, int C, int downsample, const opus_val16 *coef, celt_sig *mem, celt_sig * OPUS_RESTRICT scratch);
204
205void compute_inv_mdcts(const CELTMode *mode, int shortBlocks, celt_sig *X,
206 celt_sig * OPUS_RESTRICT out_mem[], int C, int LM);
207#endif
208
113#ifdef __cplusplus 209#ifdef __cplusplus
114} 210}
115#endif 211#endif