Mercurial > hg > sv-dependency-builds
comparison src/opus-1.3/silk/structs.h @ 69:7aeed7906520
Add Opus sources and macOS builds
author | Chris Cannam |
---|---|
date | Wed, 23 Jan 2019 13:48:08 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
68:85d5306e114e | 69:7aeed7906520 |
---|---|
1 /*********************************************************************** | |
2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. | |
3 Redistribution and use in source and binary forms, with or without | |
4 modification, are permitted provided that the following conditions | |
5 are met: | |
6 - Redistributions of source code must retain the above copyright notice, | |
7 this list of conditions and the following disclaimer. | |
8 - Redistributions in binary form must reproduce the above copyright | |
9 notice, this list of conditions and the following disclaimer in the | |
10 documentation and/or other materials provided with the distribution. | |
11 - Neither the name of Internet Society, IETF or IETF Trust, nor the | |
12 names of specific contributors, may be used to endorse or promote | |
13 products derived from this software without specific prior written | |
14 permission. | |
15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 POSSIBILITY OF SUCH DAMAGE. | |
26 ***********************************************************************/ | |
27 | |
28 #ifndef SILK_STRUCTS_H | |
29 #define SILK_STRUCTS_H | |
30 | |
31 #include "typedef.h" | |
32 #include "SigProc_FIX.h" | |
33 #include "define.h" | |
34 #include "entenc.h" | |
35 #include "entdec.h" | |
36 | |
37 #ifdef __cplusplus | |
38 extern "C" | |
39 { | |
40 #endif | |
41 | |
42 /************************************/ | |
43 /* Noise shaping quantization state */ | |
44 /************************************/ | |
45 typedef struct { | |
46 opus_int16 xq[ 2 * MAX_FRAME_LENGTH ]; /* Buffer for quantized output signal */ | |
47 opus_int32 sLTP_shp_Q14[ 2 * MAX_FRAME_LENGTH ]; | |
48 opus_int32 sLPC_Q14[ MAX_SUB_FRAME_LENGTH + NSQ_LPC_BUF_LENGTH ]; | |
49 opus_int32 sAR2_Q14[ MAX_SHAPE_LPC_ORDER ]; | |
50 opus_int32 sLF_AR_shp_Q14; | |
51 opus_int32 sDiff_shp_Q14; | |
52 opus_int lagPrev; | |
53 opus_int sLTP_buf_idx; | |
54 opus_int sLTP_shp_buf_idx; | |
55 opus_int32 rand_seed; | |
56 opus_int32 prev_gain_Q16; | |
57 opus_int rewhite_flag; | |
58 } silk_nsq_state; | |
59 | |
60 /********************************/ | |
61 /* VAD state */ | |
62 /********************************/ | |
63 typedef struct { | |
64 opus_int32 AnaState[ 2 ]; /* Analysis filterbank state: 0-8 kHz */ | |
65 opus_int32 AnaState1[ 2 ]; /* Analysis filterbank state: 0-4 kHz */ | |
66 opus_int32 AnaState2[ 2 ]; /* Analysis filterbank state: 0-2 kHz */ | |
67 opus_int32 XnrgSubfr[ VAD_N_BANDS ]; /* Subframe energies */ | |
68 opus_int32 NrgRatioSmth_Q8[ VAD_N_BANDS ]; /* Smoothed energy level in each band */ | |
69 opus_int16 HPstate; /* State of differentiator in the lowest band */ | |
70 opus_int32 NL[ VAD_N_BANDS ]; /* Noise energy level in each band */ | |
71 opus_int32 inv_NL[ VAD_N_BANDS ]; /* Inverse noise energy level in each band */ | |
72 opus_int32 NoiseLevelBias[ VAD_N_BANDS ]; /* Noise level estimator bias/offset */ | |
73 opus_int32 counter; /* Frame counter used in the initial phase */ | |
74 } silk_VAD_state; | |
75 | |
76 /* Variable cut-off low-pass filter state */ | |
77 typedef struct { | |
78 opus_int32 In_LP_State[ 2 ]; /* Low pass filter state */ | |
79 opus_int32 transition_frame_no; /* Counter which is mapped to a cut-off frequency */ | |
80 opus_int mode; /* Operating mode, <0: switch down, >0: switch up; 0: do nothing */ | |
81 opus_int32 saved_fs_kHz; /* If non-zero, holds the last sampling rate before a bandwidth switching reset. */ | |
82 } silk_LP_state; | |
83 | |
84 /* Structure containing NLSF codebook */ | |
85 typedef struct { | |
86 const opus_int16 nVectors; | |
87 const opus_int16 order; | |
88 const opus_int16 quantStepSize_Q16; | |
89 const opus_int16 invQuantStepSize_Q6; | |
90 const opus_uint8 *CB1_NLSF_Q8; | |
91 const opus_int16 *CB1_Wght_Q9; | |
92 const opus_uint8 *CB1_iCDF; | |
93 const opus_uint8 *pred_Q8; | |
94 const opus_uint8 *ec_sel; | |
95 const opus_uint8 *ec_iCDF; | |
96 const opus_uint8 *ec_Rates_Q5; | |
97 const opus_int16 *deltaMin_Q15; | |
98 } silk_NLSF_CB_struct; | |
99 | |
100 typedef struct { | |
101 opus_int16 pred_prev_Q13[ 2 ]; | |
102 opus_int16 sMid[ 2 ]; | |
103 opus_int16 sSide[ 2 ]; | |
104 opus_int32 mid_side_amp_Q0[ 4 ]; | |
105 opus_int16 smth_width_Q14; | |
106 opus_int16 width_prev_Q14; | |
107 opus_int16 silent_side_len; | |
108 opus_int8 predIx[ MAX_FRAMES_PER_PACKET ][ 2 ][ 3 ]; | |
109 opus_int8 mid_only_flags[ MAX_FRAMES_PER_PACKET ]; | |
110 } stereo_enc_state; | |
111 | |
112 typedef struct { | |
113 opus_int16 pred_prev_Q13[ 2 ]; | |
114 opus_int16 sMid[ 2 ]; | |
115 opus_int16 sSide[ 2 ]; | |
116 } stereo_dec_state; | |
117 | |
118 typedef struct { | |
119 opus_int8 GainsIndices[ MAX_NB_SUBFR ]; | |
120 opus_int8 LTPIndex[ MAX_NB_SUBFR ]; | |
121 opus_int8 NLSFIndices[ MAX_LPC_ORDER + 1 ]; | |
122 opus_int16 lagIndex; | |
123 opus_int8 contourIndex; | |
124 opus_int8 signalType; | |
125 opus_int8 quantOffsetType; | |
126 opus_int8 NLSFInterpCoef_Q2; | |
127 opus_int8 PERIndex; | |
128 opus_int8 LTP_scaleIndex; | |
129 opus_int8 Seed; | |
130 } SideInfoIndices; | |
131 | |
132 /********************************/ | |
133 /* Encoder state */ | |
134 /********************************/ | |
135 typedef struct { | |
136 opus_int32 In_HP_State[ 2 ]; /* High pass filter state */ | |
137 opus_int32 variable_HP_smth1_Q15; /* State of first smoother */ | |
138 opus_int32 variable_HP_smth2_Q15; /* State of second smoother */ | |
139 silk_LP_state sLP; /* Low pass filter state */ | |
140 silk_VAD_state sVAD; /* Voice activity detector state */ | |
141 silk_nsq_state sNSQ; /* Noise Shape Quantizer State */ | |
142 opus_int16 prev_NLSFq_Q15[ MAX_LPC_ORDER ]; /* Previously quantized NLSF vector */ | |
143 opus_int speech_activity_Q8; /* Speech activity */ | |
144 opus_int allow_bandwidth_switch; /* Flag indicating that switching of internal bandwidth is allowed */ | |
145 opus_int8 LBRRprevLastGainIndex; | |
146 opus_int8 prevSignalType; | |
147 opus_int prevLag; | |
148 opus_int pitch_LPC_win_length; | |
149 opus_int max_pitch_lag; /* Highest possible pitch lag (samples) */ | |
150 opus_int32 API_fs_Hz; /* API sampling frequency (Hz) */ | |
151 opus_int32 prev_API_fs_Hz; /* Previous API sampling frequency (Hz) */ | |
152 opus_int maxInternal_fs_Hz; /* Maximum internal sampling frequency (Hz) */ | |
153 opus_int minInternal_fs_Hz; /* Minimum internal sampling frequency (Hz) */ | |
154 opus_int desiredInternal_fs_Hz; /* Soft request for internal sampling frequency (Hz) */ | |
155 opus_int fs_kHz; /* Internal sampling frequency (kHz) */ | |
156 opus_int nb_subfr; /* Number of 5 ms subframes in a frame */ | |
157 opus_int frame_length; /* Frame length (samples) */ | |
158 opus_int subfr_length; /* Subframe length (samples) */ | |
159 opus_int ltp_mem_length; /* Length of LTP memory */ | |
160 opus_int la_pitch; /* Look-ahead for pitch analysis (samples) */ | |
161 opus_int la_shape; /* Look-ahead for noise shape analysis (samples) */ | |
162 opus_int shapeWinLength; /* Window length for noise shape analysis (samples) */ | |
163 opus_int32 TargetRate_bps; /* Target bitrate (bps) */ | |
164 opus_int PacketSize_ms; /* Number of milliseconds to put in each packet */ | |
165 opus_int PacketLoss_perc; /* Packet loss rate measured by farend */ | |
166 opus_int32 frameCounter; | |
167 opus_int Complexity; /* Complexity setting */ | |
168 opus_int nStatesDelayedDecision; /* Number of states in delayed decision quantization */ | |
169 opus_int useInterpolatedNLSFs; /* Flag for using NLSF interpolation */ | |
170 opus_int shapingLPCOrder; /* Filter order for noise shaping filters */ | |
171 opus_int predictLPCOrder; /* Filter order for prediction filters */ | |
172 opus_int pitchEstimationComplexity; /* Complexity level for pitch estimator */ | |
173 opus_int pitchEstimationLPCOrder; /* Whitening filter order for pitch estimator */ | |
174 opus_int32 pitchEstimationThreshold_Q16; /* Threshold for pitch estimator */ | |
175 opus_int32 sum_log_gain_Q7; /* Cumulative max prediction gain */ | |
176 opus_int NLSF_MSVQ_Survivors; /* Number of survivors in NLSF MSVQ */ | |
177 opus_int first_frame_after_reset; /* Flag for deactivating NLSF interpolation, pitch prediction */ | |
178 opus_int controlled_since_last_payload; /* Flag for ensuring codec_control only runs once per packet */ | |
179 opus_int warping_Q16; /* Warping parameter for warped noise shaping */ | |
180 opus_int useCBR; /* Flag to enable constant bitrate */ | |
181 opus_int prefillFlag; /* Flag to indicate that only buffers are prefilled, no coding */ | |
182 const opus_uint8 *pitch_lag_low_bits_iCDF; /* Pointer to iCDF table for low bits of pitch lag index */ | |
183 const opus_uint8 *pitch_contour_iCDF; /* Pointer to iCDF table for pitch contour index */ | |
184 const silk_NLSF_CB_struct *psNLSF_CB; /* Pointer to NLSF codebook */ | |
185 opus_int input_quality_bands_Q15[ VAD_N_BANDS ]; | |
186 opus_int input_tilt_Q15; | |
187 opus_int SNR_dB_Q7; /* Quality setting */ | |
188 | |
189 opus_int8 VAD_flags[ MAX_FRAMES_PER_PACKET ]; | |
190 opus_int8 LBRR_flag; | |
191 opus_int LBRR_flags[ MAX_FRAMES_PER_PACKET ]; | |
192 | |
193 SideInfoIndices indices; | |
194 opus_int8 pulses[ MAX_FRAME_LENGTH ]; | |
195 | |
196 int arch; | |
197 | |
198 /* Input/output buffering */ | |
199 opus_int16 inputBuf[ MAX_FRAME_LENGTH + 2 ]; /* Buffer containing input signal */ | |
200 opus_int inputBufIx; | |
201 opus_int nFramesPerPacket; | |
202 opus_int nFramesEncoded; /* Number of frames analyzed in current packet */ | |
203 | |
204 opus_int nChannelsAPI; | |
205 opus_int nChannelsInternal; | |
206 opus_int channelNb; | |
207 | |
208 /* Parameters For LTP scaling Control */ | |
209 opus_int frames_since_onset; | |
210 | |
211 /* Specifically for entropy coding */ | |
212 opus_int ec_prevSignalType; | |
213 opus_int16 ec_prevLagIndex; | |
214 | |
215 silk_resampler_state_struct resampler_state; | |
216 | |
217 /* DTX */ | |
218 opus_int useDTX; /* Flag to enable DTX */ | |
219 opus_int inDTX; /* Flag to signal DTX period */ | |
220 opus_int noSpeechCounter; /* Counts concecutive nonactive frames, used by DTX */ | |
221 | |
222 /* Inband Low Bitrate Redundancy (LBRR) data */ | |
223 opus_int useInBandFEC; /* Saves the API setting for query */ | |
224 opus_int LBRR_enabled; /* Depends on useInBandFRC, bitrate and packet loss rate */ | |
225 opus_int LBRR_GainIncreases; /* Gains increment for coding LBRR frames */ | |
226 SideInfoIndices indices_LBRR[ MAX_FRAMES_PER_PACKET ]; | |
227 opus_int8 pulses_LBRR[ MAX_FRAMES_PER_PACKET ][ MAX_FRAME_LENGTH ]; | |
228 } silk_encoder_state; | |
229 | |
230 | |
231 /* Struct for Packet Loss Concealment */ | |
232 typedef struct { | |
233 opus_int32 pitchL_Q8; /* Pitch lag to use for voiced concealment */ | |
234 opus_int16 LTPCoef_Q14[ LTP_ORDER ]; /* LTP coeficients to use for voiced concealment */ | |
235 opus_int16 prevLPC_Q12[ MAX_LPC_ORDER ]; | |
236 opus_int last_frame_lost; /* Was previous frame lost */ | |
237 opus_int32 rand_seed; /* Seed for unvoiced signal generation */ | |
238 opus_int16 randScale_Q14; /* Scaling of unvoiced random signal */ | |
239 opus_int32 conc_energy; | |
240 opus_int conc_energy_shift; | |
241 opus_int16 prevLTP_scale_Q14; | |
242 opus_int32 prevGain_Q16[ 2 ]; | |
243 opus_int fs_kHz; | |
244 opus_int nb_subfr; | |
245 opus_int subfr_length; | |
246 } silk_PLC_struct; | |
247 | |
248 /* Struct for CNG */ | |
249 typedef struct { | |
250 opus_int32 CNG_exc_buf_Q14[ MAX_FRAME_LENGTH ]; | |
251 opus_int16 CNG_smth_NLSF_Q15[ MAX_LPC_ORDER ]; | |
252 opus_int32 CNG_synth_state[ MAX_LPC_ORDER ]; | |
253 opus_int32 CNG_smth_Gain_Q16; | |
254 opus_int32 rand_seed; | |
255 opus_int fs_kHz; | |
256 } silk_CNG_struct; | |
257 | |
258 /********************************/ | |
259 /* Decoder state */ | |
260 /********************************/ | |
261 typedef struct { | |
262 opus_int32 prev_gain_Q16; | |
263 opus_int32 exc_Q14[ MAX_FRAME_LENGTH ]; | |
264 opus_int32 sLPC_Q14_buf[ MAX_LPC_ORDER ]; | |
265 opus_int16 outBuf[ MAX_FRAME_LENGTH + 2 * MAX_SUB_FRAME_LENGTH ]; /* Buffer for output signal */ | |
266 opus_int lagPrev; /* Previous Lag */ | |
267 opus_int8 LastGainIndex; /* Previous gain index */ | |
268 opus_int fs_kHz; /* Sampling frequency in kHz */ | |
269 opus_int32 fs_API_hz; /* API sample frequency (Hz) */ | |
270 opus_int nb_subfr; /* Number of 5 ms subframes in a frame */ | |
271 opus_int frame_length; /* Frame length (samples) */ | |
272 opus_int subfr_length; /* Subframe length (samples) */ | |
273 opus_int ltp_mem_length; /* Length of LTP memory */ | |
274 opus_int LPC_order; /* LPC order */ | |
275 opus_int16 prevNLSF_Q15[ MAX_LPC_ORDER ]; /* Used to interpolate LSFs */ | |
276 opus_int first_frame_after_reset; /* Flag for deactivating NLSF interpolation */ | |
277 const opus_uint8 *pitch_lag_low_bits_iCDF; /* Pointer to iCDF table for low bits of pitch lag index */ | |
278 const opus_uint8 *pitch_contour_iCDF; /* Pointer to iCDF table for pitch contour index */ | |
279 | |
280 /* For buffering payload in case of more frames per packet */ | |
281 opus_int nFramesDecoded; | |
282 opus_int nFramesPerPacket; | |
283 | |
284 /* Specifically for entropy coding */ | |
285 opus_int ec_prevSignalType; | |
286 opus_int16 ec_prevLagIndex; | |
287 | |
288 opus_int VAD_flags[ MAX_FRAMES_PER_PACKET ]; | |
289 opus_int LBRR_flag; | |
290 opus_int LBRR_flags[ MAX_FRAMES_PER_PACKET ]; | |
291 | |
292 silk_resampler_state_struct resampler_state; | |
293 | |
294 const silk_NLSF_CB_struct *psNLSF_CB; /* Pointer to NLSF codebook */ | |
295 | |
296 /* Quantization indices */ | |
297 SideInfoIndices indices; | |
298 | |
299 /* CNG state */ | |
300 silk_CNG_struct sCNG; | |
301 | |
302 /* Stuff used for PLC */ | |
303 opus_int lossCnt; | |
304 opus_int prevSignalType; | |
305 int arch; | |
306 | |
307 silk_PLC_struct sPLC; | |
308 | |
309 } silk_decoder_state; | |
310 | |
311 /************************/ | |
312 /* Decoder control */ | |
313 /************************/ | |
314 typedef struct { | |
315 /* Prediction and coding parameters */ | |
316 opus_int pitchL[ MAX_NB_SUBFR ]; | |
317 opus_int32 Gains_Q16[ MAX_NB_SUBFR ]; | |
318 /* Holds interpolated and final coefficients, 4-byte aligned */ | |
319 silk_DWORD_ALIGN opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ]; | |
320 opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ]; | |
321 opus_int LTP_scale_Q14; | |
322 } silk_decoder_control; | |
323 | |
324 | |
325 #ifdef __cplusplus | |
326 } | |
327 #endif | |
328 | |
329 #endif |