| OLD | NEW |
| (Empty) | |
| 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_LEN
GTH ]; |
| 49 opus_int32 sAR2_Q14[ MAX_SHAPE_LPC_ORDER ]; |
| 50 opus_int32 sLF_AR_shp_Q14; |
| 51 opus_int lagPrev; |
| 52 opus_int sLTP_buf_idx; |
| 53 opus_int sLTP_shp_buf_idx; |
| 54 opus_int32 rand_seed; |
| 55 opus_int32 prev_gain_Q16; |
| 56 opus_int rewhite_flag; |
| 57 } silk_nsq_state; |
| 58 |
| 59 /********************************/ |
| 60 /* VAD state */ |
| 61 /********************************/ |
| 62 typedef struct { |
| 63 opus_int32 AnaState[ 2 ]; /* Analysis filt
erbank state: 0-8 kHz */ |
| 64 opus_int32 AnaState1[ 2 ]; /* Analysis filt
erbank state: 0-4 kHz */ |
| 65 opus_int32 AnaState2[ 2 ]; /* Analysis filt
erbank state: 0-2 kHz */ |
| 66 opus_int32 XnrgSubfr[ VAD_N_BANDS ]; /* Subframe ener
gies */ |
| 67 opus_int32 NrgRatioSmth_Q8[ VAD_N_BANDS ]; /* Smoothed ener
gy level in each band */ |
| 68 opus_int16 HPstate; /* State of diff
erentiator in the lowest band */ |
| 69 opus_int32 NL[ VAD_N_BANDS ]; /* Noise energy
level in each band */ |
| 70 opus_int32 inv_NL[ VAD_N_BANDS ]; /* Inverse noise
energy level in each band */ |
| 71 opus_int32 NoiseLevelBias[ VAD_N_BANDS ]; /* Noise level e
stimator bias/offset */ |
| 72 opus_int32 counter; /* Frame counter
used in the initial phase */ |
| 73 } silk_VAD_state; |
| 74 |
| 75 /* Variable cut-off low-pass filter state */ |
| 76 typedef struct { |
| 77 opus_int32 In_LP_State[ 2 ]; /* Low pass filter
state */ |
| 78 opus_int32 transition_frame_no; /* Counter which is
mapped to a cut-off frequency */ |
| 79 opus_int mode; /* Operating mode,
<0: switch down, >0: switch up; 0: do nothing */ |
| 80 } silk_LP_state; |
| 81 |
| 82 /* Structure containing NLSF codebook */ |
| 83 typedef struct { |
| 84 const opus_int16 nVectors; |
| 85 const opus_int16 order; |
| 86 const opus_int16 quantStepSize_Q16; |
| 87 const opus_int16 invQuantStepSize_Q6; |
| 88 const opus_uint8 *CB1_NLSF_Q8; |
| 89 const opus_uint8 *CB1_iCDF; |
| 90 const opus_uint8 *pred_Q8; |
| 91 const opus_uint8 *ec_sel; |
| 92 const opus_uint8 *ec_iCDF; |
| 93 const opus_uint8 *ec_Rates_Q5; |
| 94 const opus_int16 *deltaMin_Q15; |
| 95 } silk_NLSF_CB_struct; |
| 96 |
| 97 typedef struct { |
| 98 opus_int16 pred_prev_Q13[ 2 ]; |
| 99 opus_int16 sMid[ 2 ]; |
| 100 opus_int16 sSide[ 2 ]; |
| 101 opus_int32 mid_side_amp_Q0[ 4 ]; |
| 102 opus_int16 smth_width_Q14; |
| 103 opus_int16 width_prev_Q14; |
| 104 opus_int16 silent_side_len; |
| 105 opus_int8 predIx[ MAX_FRAMES_PER_PACKET ][ 2 ][ 3 ]; |
| 106 opus_int8 mid_only_flags[ MAX_FRAMES_PER_PACKET ]; |
| 107 } stereo_enc_state; |
| 108 |
| 109 typedef struct { |
| 110 opus_int16 pred_prev_Q13[ 2 ]; |
| 111 opus_int16 sMid[ 2 ]; |
| 112 opus_int16 sSide[ 2 ]; |
| 113 } stereo_dec_state; |
| 114 |
| 115 typedef struct { |
| 116 opus_int8 GainsIndices[ MAX_NB_SUBFR ]; |
| 117 opus_int8 LTPIndex[ MAX_NB_SUBFR ]; |
| 118 opus_int8 NLSFIndices[ MAX_LPC_ORDER + 1 ]; |
| 119 opus_int16 lagIndex; |
| 120 opus_int8 contourIndex; |
| 121 opus_int8 signalType; |
| 122 opus_int8 quantOffsetType; |
| 123 opus_int8 NLSFInterpCoef_Q2; |
| 124 opus_int8 PERIndex; |
| 125 opus_int8 LTP_scaleIndex; |
| 126 opus_int8 Seed; |
| 127 } SideInfoIndices; |
| 128 |
| 129 /********************************/ |
| 130 /* Encoder state */ |
| 131 /********************************/ |
| 132 typedef struct { |
| 133 opus_int32 In_HP_State[ 2 ]; /* High pass
filter state */ |
| 134 opus_int32 variable_HP_smth1_Q15; /* State of
first smoother */ |
| 135 opus_int32 variable_HP_smth2_Q15; /* State of
second smoother */ |
| 136 silk_LP_state sLP; /* Low pass
filter state */ |
| 137 silk_VAD_state sVAD; /* Voice act
ivity detector state */ |
| 138 silk_nsq_state sNSQ; /* Noise Sha
pe Quantizer State */ |
| 139 opus_int16 prev_NLSFq_Q15[ MAX_LPC_ORDER ]; /* Previousl
y quantized NLSF vector */ |
| 140 opus_int speech_activity_Q8; /* Speech ac
tivity */ |
| 141 opus_int allow_bandwidth_switch; /* Flag indi
cating that switching of internal bandwidth is allowed */ |
| 142 opus_int8 LBRRprevLastGainIndex; |
| 143 opus_int8 prevSignalType; |
| 144 opus_int prevLag; |
| 145 opus_int pitch_LPC_win_length; |
| 146 opus_int max_pitch_lag; /* Highest p
ossible pitch lag (samples) */ |
| 147 opus_int32 API_fs_Hz; /* API sampl
ing frequency (Hz) */ |
| 148 opus_int32 prev_API_fs_Hz; /* Previous
API sampling frequency (Hz) */ |
| 149 opus_int maxInternal_fs_Hz; /* Maximum i
nternal sampling frequency (Hz) */ |
| 150 opus_int minInternal_fs_Hz; /* Minimum i
nternal sampling frequency (Hz) */ |
| 151 opus_int desiredInternal_fs_Hz; /* Soft requ
est for internal sampling frequency (Hz) */ |
| 152 opus_int fs_kHz; /* Internal
sampling frequency (kHz) */ |
| 153 opus_int nb_subfr; /* Number of
5 ms subframes in a frame */ |
| 154 opus_int frame_length; /* Frame len
gth (samples) */ |
| 155 opus_int subfr_length; /* Subframe
length (samples) */ |
| 156 opus_int ltp_mem_length; /* Length of
LTP memory */ |
| 157 opus_int la_pitch; /* Look-ahea
d for pitch analysis (samples) */ |
| 158 opus_int la_shape; /* Look-ahea
d for noise shape analysis (samples) */ |
| 159 opus_int shapeWinLength; /* Window le
ngth for noise shape analysis (samples) */ |
| 160 opus_int32 TargetRate_bps; /* Target bi
trate (bps) */ |
| 161 opus_int PacketSize_ms; /* Number of
milliseconds to put in each packet */ |
| 162 opus_int PacketLoss_perc; /* Packet lo
ss rate measured by farend */ |
| 163 opus_int32 frameCounter; |
| 164 opus_int Complexity; /* Complexit
y setting */ |
| 165 opus_int nStatesDelayedDecision; /* Number of
states in delayed decision quantization */ |
| 166 opus_int useInterpolatedNLSFs; /* Flag for
using NLSF interpolation */ |
| 167 opus_int shapingLPCOrder; /* Filter or
der for noise shaping filters */ |
| 168 opus_int predictLPCOrder; /* Filter or
der for prediction filters */ |
| 169 opus_int pitchEstimationComplexity; /* Complexit
y level for pitch estimator */ |
| 170 opus_int pitchEstimationLPCOrder; /* Whitening
filter order for pitch estimator */ |
| 171 opus_int32 pitchEstimationThreshold_Q16; /* Threshold
for pitch estimator */ |
| 172 opus_int LTPQuantLowComplexity; /* Flag for
low complexity LTP quantization */ |
| 173 opus_int mu_LTP_Q9; /* Rate-dist
ortion tradeoff in LTP quantization */ |
| 174 opus_int NLSF_MSVQ_Survivors; /* Number of
survivors in NLSF MSVQ */ |
| 175 opus_int first_frame_after_reset; /* Flag for
deactivating NLSF interpolation, pitch prediction */ |
| 176 opus_int controlled_since_last_payload; /* Flag for
ensuring codec_control only runs once per packet */ |
| 177 opus_int warping_Q16; /* Warping p
arameter for warped noise shaping */ |
| 178 opus_int useCBR; /* Flag to e
nable constant bitrate */ |
| 179 opus_int prefillFlag; /* Flag to i
ndicate that only buffers are prefilled, no coding */ |
| 180 const opus_uint8 *pitch_lag_low_bits_iCDF; /* Pointer t
o iCDF table for low bits of pitch lag index */ |
| 181 const opus_uint8 *pitch_contour_iCDF; /* Pointer t
o iCDF table for pitch contour index */ |
| 182 const silk_NLSF_CB_struct *psNLSF_CB; /* Pointer t
o NLSF codebook */ |
| 183 opus_int input_quality_bands_Q15[ VAD_N_BANDS ]; |
| 184 opus_int input_tilt_Q15; |
| 185 opus_int SNR_dB_Q7; /* Quality s
etting */ |
| 186 |
| 187 opus_int8 VAD_flags[ MAX_FRAMES_PER_PACKET ]; |
| 188 opus_int8 LBRR_flag; |
| 189 opus_int LBRR_flags[ MAX_FRAMES_PER_PACKET ]; |
| 190 |
| 191 SideInfoIndices indices; |
| 192 opus_int8 pulses[ MAX_FRAME_LENGTH ]; |
| 193 |
| 194 /* Input/output buffering */ |
| 195 opus_int16 inputBuf[ MAX_FRAME_LENGTH + 2 ]; /* Buffer co
ntaining input signal */ |
| 196 opus_int inputBufIx; |
| 197 opus_int nFramesPerPacket; |
| 198 opus_int nFramesEncoded; /* Number of
frames analyzed in current packet */ |
| 199 |
| 200 opus_int nChannelsAPI; |
| 201 opus_int nChannelsInternal; |
| 202 opus_int channelNb; |
| 203 |
| 204 /* Parameters For LTP scaling Control */ |
| 205 opus_int frames_since_onset; |
| 206 |
| 207 /* Specifically for entropy coding */ |
| 208 opus_int ec_prevSignalType; |
| 209 opus_int16 ec_prevLagIndex; |
| 210 |
| 211 silk_resampler_state_struct resampler_state; |
| 212 |
| 213 /* DTX */ |
| 214 opus_int useDTX; /* Flag to e
nable DTX */ |
| 215 opus_int inDTX; /* Flag to s
ignal DTX period */ |
| 216 opus_int noSpeechCounter; /* Counts co
ncecutive nonactive frames, used by DTX */ |
| 217 |
| 218 /* Inband Low Bitrate Redundancy (LBRR) data */ |
| 219 opus_int useInBandFEC; /* Saves the
API setting for query */ |
| 220 opus_int LBRR_enabled; /* Depends o
n useInBandFRC, bitrate and packet loss rate */ |
| 221 opus_int LBRR_GainIncreases; /* Gains inc
rement for coding LBRR frames */ |
| 222 SideInfoIndices indices_LBRR[ MAX_FRAMES_PER_PACKET ]; |
| 223 opus_int8 pulses_LBRR[ MAX_FRAMES_PER_PACKET ][ MAX_FRAME
_LENGTH ]; |
| 224 } silk_encoder_state; |
| 225 |
| 226 |
| 227 /* Struct for Packet Loss Concealment */ |
| 228 typedef struct { |
| 229 opus_int32 pitchL_Q8; /* Pitch lag
to use for voiced concealment */ |
| 230 opus_int16 LTPCoef_Q14[ LTP_ORDER ]; /* LTP coefi
cients to use for voiced concealment */ |
| 231 opus_int16 prevLPC_Q12[ MAX_LPC_ORDER ]; |
| 232 opus_int last_frame_lost; /* Was previ
ous frame lost */ |
| 233 opus_int32 rand_seed; /* Seed for
unvoiced signal generation */ |
| 234 opus_int16 randScale_Q14; /* Scaling o
f unvoiced random signal */ |
| 235 opus_int32 conc_energy; |
| 236 opus_int conc_energy_shift; |
| 237 opus_int16 prevLTP_scale_Q14; |
| 238 opus_int32 prevGain_Q16[ 2 ]; |
| 239 opus_int fs_kHz; |
| 240 opus_int nb_subfr; |
| 241 opus_int subfr_length; |
| 242 } silk_PLC_struct; |
| 243 |
| 244 /* Struct for CNG */ |
| 245 typedef struct { |
| 246 opus_int32 CNG_exc_buf_Q14[ MAX_FRAME_LENGTH ]; |
| 247 opus_int16 CNG_smth_NLSF_Q15[ MAX_LPC_ORDER ]; |
| 248 opus_int32 CNG_synth_state[ MAX_LPC_ORDER ]; |
| 249 opus_int32 CNG_smth_Gain_Q16; |
| 250 opus_int32 rand_seed; |
| 251 opus_int fs_kHz; |
| 252 } silk_CNG_struct; |
| 253 |
| 254 /********************************/ |
| 255 /* Decoder state */ |
| 256 /********************************/ |
| 257 typedef struct { |
| 258 opus_int32 prev_gain_Q16; |
| 259 opus_int32 exc_Q14[ MAX_FRAME_LENGTH ]; |
| 260 opus_int32 sLPC_Q14_buf[ MAX_LPC_ORDER ]; |
| 261 opus_int16 outBuf[ MAX_FRAME_LENGTH + 2 * MAX_SUB_FRAME_LEN
GTH ]; /* Buffer for output signal */ |
| 262 opus_int lagPrev; /* Previous
Lag */ |
| 263 opus_int8 LastGainIndex; /* Previous
gain index */ |
| 264 opus_int fs_kHz; /* Sampling
frequency in kHz */ |
| 265 opus_int32 fs_API_hz; /* API sampl
e frequency (Hz) */ |
| 266 opus_int nb_subfr; /* Number of
5 ms subframes in a frame */ |
| 267 opus_int frame_length; /* Frame len
gth (samples) */ |
| 268 opus_int subfr_length; /* Subframe
length (samples) */ |
| 269 opus_int ltp_mem_length; /* Length of
LTP memory */ |
| 270 opus_int LPC_order; /* LPC order
*/ |
| 271 opus_int16 prevNLSF_Q15[ MAX_LPC_ORDER ]; /* Used to i
nterpolate LSFs */ |
| 272 opus_int first_frame_after_reset; /* Flag for
deactivating NLSF interpolation */ |
| 273 const opus_uint8 *pitch_lag_low_bits_iCDF; /* Pointer t
o iCDF table for low bits of pitch lag index */ |
| 274 const opus_uint8 *pitch_contour_iCDF; /* Pointer t
o iCDF table for pitch contour index */ |
| 275 |
| 276 /* For buffering payload in case of more frames per packet */ |
| 277 opus_int nFramesDecoded; |
| 278 opus_int nFramesPerPacket; |
| 279 |
| 280 /* Specifically for entropy coding */ |
| 281 opus_int ec_prevSignalType; |
| 282 opus_int16 ec_prevLagIndex; |
| 283 |
| 284 opus_int VAD_flags[ MAX_FRAMES_PER_PACKET ]; |
| 285 opus_int LBRR_flag; |
| 286 opus_int LBRR_flags[ MAX_FRAMES_PER_PACKET ]; |
| 287 |
| 288 silk_resampler_state_struct resampler_state; |
| 289 |
| 290 const silk_NLSF_CB_struct *psNLSF_CB; /* Pointer t
o NLSF codebook */ |
| 291 |
| 292 /* Quantization indices */ |
| 293 SideInfoIndices indices; |
| 294 |
| 295 /* CNG state */ |
| 296 silk_CNG_struct sCNG; |
| 297 |
| 298 /* Stuff used for PLC */ |
| 299 opus_int lossCnt; |
| 300 opus_int prevSignalType; |
| 301 |
| 302 silk_PLC_struct sPLC; |
| 303 |
| 304 } silk_decoder_state; |
| 305 |
| 306 /************************/ |
| 307 /* Decoder control */ |
| 308 /************************/ |
| 309 typedef struct { |
| 310 /* Prediction and coding parameters */ |
| 311 opus_int pitchL[ MAX_NB_SUBFR ]; |
| 312 opus_int32 Gains_Q16[ MAX_NB_SUBFR ]; |
| 313 /* Holds interpolated and final coefficients, 4-byte aligned */ |
| 314 silk_DWORD_ALIGN opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ]; |
| 315 opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ]; |
| 316 opus_int LTP_scale_Q14; |
| 317 } silk_decoder_control; |
| 318 |
| 319 |
| 320 #ifdef __cplusplus |
| 321 } |
| 322 #endif |
| 323 |
| 324 #endif |
| OLD | NEW |