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