xref: /aosp_15_r20/external/libopus/silk/structs.h (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
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