Line data Source code
1 : /*====================================================================================
2 : EVS Codec 3GPP TS26.452 Aug 12, 2021. Version 16.3.0
3 : ====================================================================================*/
4 :
5 : #include "options.h" /* Compilation switches */
6 : #include "prot_fx.h"
7 : #include "cnst.h" /* Common constants */
8 : #include "rom_com.h" /* Static table prototypes */
9 : #include "stl.h" /* required for wmc_tool */
10 : #include "basop_util.h"
11 : #include "ivas_prot_fx.h"
12 :
13 : /*----------------------------------------------------------------------*
14 : * init_decoder()
15 : *
16 : * Initialization of static variables for the decoder
17 : *----------------------------------------------------------------------*/
18 :
19 3 : ivas_error init_decoder_fx(
20 : Decoder_State *st_fx, /* o: Decoder static variables structure */
21 : const Word16 idchan /* i : channel ID */
22 : )
23 : {
24 : Word16 i;
25 : ivas_error error;
26 :
27 3 : error = IVAS_ERR_OK;
28 3 : move16();
29 : Word16 newCldfbBands;
30 3 : st_fx->total_num_bits = -1;
31 3 : move16();
32 :
33 : /*-----------------------------------------------------------------*
34 : * ACELP core parameters
35 : *-----------------------------------------------------------------*/
36 :
37 3 : st_fx->codec_mode = MODE1;
38 3 : move16();
39 3 : st_fx->last_codec_mode = MODE1;
40 3 : move16();
41 3 : st_fx->core = ACELP_CORE;
42 3 : move16();
43 3 : st_fx->L_frame = L_FRAME;
44 3 : move16();
45 3 : st_fx->extl = -1;
46 3 : move16();
47 3 : st_fx->total_brate = 8000;
48 3 : move16();
49 3 : st_fx->last_total_brate = -1;
50 3 : move16();
51 3 : st_fx->last_total_brate_ber = -1;
52 3 : move32();
53 3 : st_fx->core_brate = 8000;
54 3 : move16();
55 3 : st_fx->ini_frame = 0;
56 3 : move16();
57 3 : st_fx->bwidth = NB;
58 3 : move16();
59 3 : st_fx->extl_brate = 0;
60 3 : move16();
61 :
62 :
63 3 : st_fx->last_coder_type = GENERIC;
64 3 : move16();
65 3 : st_fx->last_L_frame = st_fx->L_frame;
66 3 : move16();
67 3 : st_fx->last_core_brate = st_fx->core_brate;
68 3 : move16();
69 :
70 3 : st_fx->last_core = -1;
71 3 : move16();
72 3 : st_fx->last_extl = st_fx->extl;
73 3 : move16();
74 :
75 :
76 : /* LSF initilaizations */
77 3 : Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M );
78 :
79 3 : init_lvq_fx( st_fx->offset_scale1_fx, st_fx->offset_scale2_fx, st_fx->offset_scale1_p_fx, st_fx->offset_scale2_p_fx, st_fx->no_scales_fx, st_fx->no_scales_p_fx );
80 :
81 3 : set16_fx( st_fx->mem_MA_fx, 0, M );
82 :
83 3 : st_fx->dm_fx.prev_state = 0; // Q0
84 3 : move16(); /* This corresponds to st_fx->dispMem in FLP */
85 3 : st_fx->dm_fx.prev_gain_code = L_deposit_l( 0 ); // Q16
86 21 : FOR( i = 2; i < 8; i++ )
87 : {
88 18 : st_fx->dm_fx.prev_gain_pit[i - 2] = 0; // Q14
89 18 : move16();
90 : }
91 :
92 3 : st_fx->tilt_code_fx = 0; // Q15
93 3 : move16();
94 3 : st_fx->gc_threshold_fx = L_deposit_l( 0 ); // Q16
95 3 : st_fx->last_good = UNVOICED_CLAS;
96 3 : move16();
97 3 : st_fx->clas_dec = UNVOICED_CLAS;
98 3 : move16();
99 :
100 3 : st_fx->lp_gainp_fx = 0; // Q14
101 3 : move16();
102 3 : st_fx->lp_gainc_fx = 0; // Q3
103 3 : move16();
104 :
105 3 : set16_fx( st_fx->old_exc_fx, 0, L_EXC_MEM_DEC ); // Q_exc
106 :
107 : /* AVQ pre-quantizer memory */
108 3 : st_fx->mem_preemp_preQ_fx = 0;
109 3 : move16();
110 3 : st_fx->last_nq_preQ = 0;
111 3 : move16();
112 3 : st_fx->use_acelp_preq = 0;
113 3 : move16();
114 :
115 3 : st_fx->mem_deemph_fx = 0; // Q_syn
116 3 : move16();
117 : /*-----------------------------------------------------------------*
118 : * SWB BWE parameters
119 : *-----------------------------------------------------------------*/
120 :
121 3 : test();
122 3 : IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
123 : {
124 3 : IF( ( st_fx->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL )
125 : {
126 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
127 : }
128 :
129 3 : fd_bwe_dec_init_fx( st_fx->hBWE_FD );
130 : }
131 : ELSE
132 : {
133 0 : st_fx->hBWE_FD = NULL;
134 : }
135 :
136 : /*-----------------------------------------------------------------*
137 : * IGF
138 : *-----------------------------------------------------------------*/
139 :
140 3 : test();
141 3 : IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
142 : {
143 3 : IF( ( st_fx->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL )
144 : {
145 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) );
146 : }
147 :
148 3 : st_fx->igf = 0;
149 3 : move16();
150 3 : init_igf_dec( st_fx->hIGFDec );
151 : }
152 : ELSE
153 : {
154 0 : st_fx->hIGFDec = NULL;
155 : }
156 :
157 : /*-----------------------------------------------------------------*
158 : * HR SWB BWE parameters
159 : *-----------------------------------------------------------------*/
160 :
161 3 : IF( st_fx->element_mode == EVS_MONO )
162 : {
163 3 : IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL )
164 : {
165 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) );
166 : }
167 :
168 3 : hr_bwe_dec_init( st_fx->hBWE_FD_HR );
169 : }
170 : ELSE
171 : {
172 0 : st_fx->hBWE_FD_HR = NULL;
173 : }
174 3 : set16_fx( st_fx->mem_syn1_fx, 0, M );
175 3 : set16_fx( st_fx->mem_syn2_fx, 0, M );
176 3 : st_fx->stab_fac_fx = 0; // Q15
177 3 : move16();
178 3 : st_fx->stab_fac_smooth_fx = 0; // Q15
179 3 : move16();
180 3 : set16_fx( st_fx->agc_mem_fx, 0, 2 ); // Q0
181 3 : set32_fx( st_fx->L_mem_hp_out_fx, 0, 5 );
182 3 : set16_fx( st_fx->mem_syn3_fx, 0, M );
183 :
184 :
185 3 : Copy( GEWB_Ave_fx, st_fx->lsf_old_fx, M );
186 3 : lsf2lsp_fx( st_fx->lsf_old_fx, st_fx->lsp_old_fx, M, INT_FS_FX );
187 3 : st_fx->mid_lsf_int = 0;
188 3 : move16();
189 3 : st_fx->safety_net = 0;
190 3 : move16();
191 3 : st_fx->GSC_noisy_speech = 0;
192 3 : move16();
193 3 : st_fx->last_voice_factor_fx = 0; // Q6
194 3 : move16();
195 :
196 :
197 3 : test();
198 3 : test();
199 3 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
200 : {
201 3 : IF( ( st_fx->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL )
202 : {
203 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) );
204 : }
205 :
206 3 : GSC_dec_init( st_fx->hGSCDec );
207 : }
208 : ELSE
209 : {
210 0 : st_fx->hGSCDec = NULL;
211 : }
212 :
213 : /*-----------------------------------------------------------------*
214 : * parameters for fast recovery (WI)
215 : *-----------------------------------------------------------------*/
216 3 : test();
217 3 : IF( EQ_32( st_fx->output_Fs, 16000 ) && ( st_fx->element_mode == EVS_MONO ) )
218 : {
219 0 : IF( ( st_fx->hWIDec = (WI_DEC_HANDLE) malloc( sizeof( WI_DEC_DATA ) ) ) == NULL )
220 : {
221 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) );
222 : }
223 :
224 0 : set16_fx( st_fx->hWIDec->old_exc2_fx, 0, L_EXC_MEM );
225 0 : set16_fx( st_fx->hWIDec->old_syn2_fx, 0, L_EXC_MEM );
226 : }
227 : ELSE
228 : {
229 3 : st_fx->hWIDec = NULL;
230 : }
231 :
232 : /* NB post-filter */
233 : /*-----------------------------------------------------------------*
234 : * NB/formant post-filter
235 : *-----------------------------------------------------------------*/
236 3 : test();
237 3 : test();
238 3 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
239 : {
240 3 : IF( ( st_fx->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL )
241 : {
242 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) );
243 : }
244 :
245 3 : Init_post_filter_fx( st_fx->hPFstat );
246 3 : st_fx->psf_lp_noise_fx = 0; // Q8
247 3 : move16();
248 : }
249 : ELSE
250 : {
251 0 : st_fx->hPFstat = NULL;
252 : }
253 3 : st_fx->psf_lp_noise_fx = 0; // Q8
254 3 : move16();
255 :
256 : /* FEC */
257 3 : st_fx->scaling_flag = 0;
258 3 : move16();
259 3 : st_fx->lp_ener_FEC_av = 500000; // Q0
260 3 : move32();
261 3 : st_fx->lp_ener_FEC_max = 500000; // Q0
262 3 : move32();
263 3 : st_fx->prev_bfi = 0;
264 3 : move16();
265 3 : st_fx->lp_ener_FER_fx = 15360; // Q8
266 3 : move16(); /*60 in Q8*/
267 3 : st_fx->old_enr_LP = 0; // Q5
268 3 : move16();
269 3 : st_fx->lp_ener_fx = L_deposit_l( 0 ); // Q6
270 3 : st_fx->enr_old_fx = L_deposit_l( 0 ); // Q0
271 3 : st_fx->bfi_pitch_fx = L_SUBFR_Q6;
272 3 : move16();
273 3 : st_fx->bfi_pitch_frame = L_SUBFR;
274 3 : move16();
275 3 : set16_fx( st_fx->mem_syn_clas_estim_fx, 0, L_SYN_MEM_CLAS_ESTIM );
276 3 : st_fx->classifier_Q_mem_syn = 0;
277 3 : move16();
278 3 : st_fx->last_con_tcx = 0;
279 3 : move16();
280 :
281 33 : FOR( i = 0; i < 2 * NB_SUBFR16k; i++ )
282 : {
283 30 : st_fx->old_pitch_buf_fx[i] = L_SUBFR << 16; // Q16
284 30 : move32(); /*15Q16*/
285 : }
286 :
287 3 : st_fx->upd_cnt = MAX_UPD_CNT;
288 3 : move16();
289 3 : Copy( GEWB_Ave_fx, st_fx->lsfoldbfi0_fx, M );
290 3 : Copy( GEWB_Ave_fx, st_fx->lsfoldbfi1_fx, M );
291 3 : Copy( GEWB_Ave_fx, st_fx->lsf_adaptive_mean_fx, M );
292 :
293 3 : st_fx->seed_acelp = RANDOM_INITSEED;
294 3 : move16();
295 3 : st_fx->seed = RANDOM_INITSEED;
296 3 : move16();
297 3 : st_fx->nbLostCmpt = 0;
298 3 : move16();
299 3 : st_fx->decision_hyst = 0;
300 3 : move16();
301 :
302 :
303 : /* Stationary noise UV modification */
304 3 : st_fx->unv_cnt = 0;
305 3 : move16();
306 3 : st_fx->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/
307 3 : st_fx->uv_count = 0;
308 3 : move16();
309 3 : st_fx->act_count = 3;
310 3 : move16();
311 3 : Copy( st_fx->lsp_old_fx, st_fx->lspold_s_fx, M ); // Q15
312 3 : st_fx->noimix_seed = RANDOM_INITSEED;
313 3 : move16();
314 3 : st_fx->min_alpha_fx = 32767; // Q15
315 3 : move16(); /*1; Q15*/
316 3 : st_fx->exc_pe_fx = 0; // Q_stat_noise
317 3 : move16();
318 3 : st_fx->Q_stat_noise = 31;
319 3 : move16();
320 : /*-----------------------------------------------------------------*
321 : * LD music post-filter
322 : *-----------------------------------------------------------------*/
323 3 : test();
324 3 : test();
325 3 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
326 : {
327 3 : IF( ( st_fx->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL )
328 : {
329 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) );
330 : }
331 :
332 3 : music_postfilt_init( st_fx->hMusicPF );
333 : }
334 : ELSE
335 : {
336 0 : st_fx->hMusicPF = NULL;
337 : }
338 :
339 : /* CNG and DTX */
340 3 : test();
341 3 : test();
342 3 : test();
343 3 : IF( idchan == 0 && ( ( st_fx->element_mode == EVS_MONO ) || EQ_16( st_fx->element_mode, IVAS_CPE_DFT ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) )
344 : {
345 3 : IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL )
346 : {
347 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
348 : }
349 :
350 3 : td_cng_dec_init_fx( st_fx );
351 : }
352 : ELSE
353 : {
354 0 : st_fx->hTdCngDec = NULL;
355 : }
356 3 : st_fx->cng_type = -1;
357 3 : move16();
358 3 : st_fx->first_CNG = 0;
359 3 : move16();
360 3 : Copy( st_fx->lsp_old_fx, st_fx->lspCNG_fx, M ); // Q15
361 :
362 3 : st_fx->CNG_mode = -1;
363 3 : move16();
364 3 : st_fx->last_active_brate = ACELP_7k20;
365 3 : move32();
366 3 : st_fx->last_CNG_L_frame = L_FRAME;
367 3 : move16();
368 :
369 :
370 3 : st_fx->last_vad_fx = 0;
371 3 : move16();
372 :
373 : /* HF (6-7kHz) BWE */
374 3 : move16();
375 3 : st_fx->Q_stat_noise_ge = GE_SHIFT; // Q of ge_sm_fx
376 3 : move16();
377 3 : st_fx->cngTDLevel = 0;
378 3 : move16();
379 3 : st_fx->cngTDLevel_e = 0;
380 3 : move16();
381 :
382 :
383 : /*-----------------------------------------------------------------*
384 : * HQ core parameters
385 : *-----------------------------------------------------------------*/
386 3 : test();
387 3 : test();
388 3 : test();
389 3 : test();
390 3 : test();
391 3 : test();
392 3 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || EQ_16( st_fx->element_mode, IVAS_SCE ) || ( st_fx->element_mode == EVS_MONO ) ) )
393 : {
394 3 : IF( ( st_fx->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL )
395 : {
396 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
397 : }
398 :
399 : /* HQ core initialization */
400 3 : HQ_core_dec_init_fx( st_fx->hHQ_core );
401 :
402 3 : IF( st_fx->element_mode == EVS_MONO )
403 : {
404 : /* HQ NB FEC initialization */
405 3 : IF( ( st_fx->hHQ_nbfec = (HQ_NBFEC_HANDLE) malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL )
406 : {
407 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) );
408 : }
409 3 : HQ_nbfec_init_fx( st_fx->hHQ_nbfec );
410 : }
411 : ELSE
412 : {
413 0 : st_fx->hHQ_nbfec = NULL;
414 : }
415 : }
416 : ELSE
417 : {
418 0 : st_fx->hHQ_core = NULL;
419 0 : st_fx->hHQ_nbfec = NULL;
420 : }
421 3 : st_fx->Qprev_synth_buffer_fx = 15;
422 3 : move16();
423 3 : st_fx->old_bfi_cnt = 0;
424 3 : move16();
425 3 : st_fx->prev_old_bfi = 0;
426 3 : move16();
427 3 : set16_fx( st_fx->delay_buf_out_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
428 3 : set16_fx( st_fx->previoussynth_fx, 0, L_FRAME48k );
429 3 : IF( st_fx->element_mode == EVS_MONO )
430 : {
431 3 : set16_fx( st_fx->old_synth_sw_fx, 0, NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) );
432 : }
433 : /*-----------------------------------------------------------------*
434 : * TCX core
435 : *-----------------------------------------------------------------*/
436 :
437 : /* TCX-LTP */
438 3 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
439 : {
440 3 : IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL )
441 : {
442 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) );
443 : }
444 : }
445 : ELSE
446 : {
447 0 : st_fx->hTcxLtpDec = NULL;
448 : }
449 :
450 : /* TCX core */
451 3 : IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
452 : {
453 3 : IF( ( st_fx->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL )
454 : {
455 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) );
456 : }
457 :
458 3 : set16_fx( st_fx->hTcxDec->FBTCXdelayBuf, 0, 111 );
459 :
460 3 : st_fx->hTcxDec->old_synthFB_fx = st_fx->hTcxDec->synth_history_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_MEM_NS );
461 3 : st_fx->hTcxDec->prev_good_synth_fx = st_fx->hTcxDec->old_synthFB_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS );
462 : }
463 : ELSE
464 : {
465 0 : st_fx->hTcxDec = NULL;
466 : }
467 : /* TCX config. data structure */
468 3 : IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
469 : {
470 3 : IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
471 : {
472 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
473 : }
474 : }
475 : ELSE
476 : {
477 0 : st_fx->hTcxCfg = NULL;
478 : }
479 :
480 : /* Tonal MDCT concealment data structure */
481 :
482 3 : if ( ( st_fx->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL )
483 : {
484 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) );
485 : }
486 :
487 3 : st_fx->prev_coder_type = GENERIC;
488 3 : move16();
489 :
490 3 : move16();
491 3 : st_fx->tilt_wb_fx = 0; // Q11
492 3 : move16();
493 :
494 3 : set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) );
495 3 : set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS ) );
496 3 : st_fx->old_bwe_delay = -1; /*Q0*/
497 3 : move16();
498 :
499 : /*-----------------------------------------------------------------*
500 : * TBE parameters
501 : *-----------------------------------------------------------------*/
502 :
503 3 : test();
504 3 : IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
505 : {
506 3 : IF( ( st_fx->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL )
507 : {
508 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
509 : }
510 :
511 3 : td_bwe_dec_init_fx( st_fx->hBWE_TD, st_fx->extl, st_fx->output_Fs );
512 :
513 3 : st_fx->prev_Q_bwe_exc = 31;
514 3 : move16();
515 : }
516 : ELSE
517 : {
518 0 : st_fx->hBWE_TD = NULL;
519 : }
520 :
521 3 : st_fx->tilt_swb_fx = 0; // Q24
522 3 : move16();
523 3 : st_fx->tilt_wb_fx = 0; // Q11
524 3 : move16();
525 :
526 3 : st_fx->prev_ener_shb_fx = 0; // Q1
527 3 : move16();
528 3 : st_fx->prev_enerLH_fx = 0; // Q1
529 3 : move16();
530 3 : st_fx->enerLH_fx = L_deposit_l( 0 );
531 3 : st_fx->enerLL_fx = L_deposit_l( 0 );
532 3 : st_fx->prev_enerLL_fx = 0;
533 3 : move16();
534 3 : st_fx->prev_fractive = 0;
535 3 : move16();
536 3 : st_fx->prev_bws_cnt = 0;
537 3 : move16();
538 3 : st_fx->bws_cnt = N_WS2N_FRAMES;
539 3 : move16();
540 3 : st_fx->bws_cnt1 = N_NS2W_FRAMES;
541 3 : move16();
542 3 : st_fx->attenu_fx = 3277; // Q15
543 3 : move16();
544 3 : st_fx->last_inner_frame = L_FRAME8k;
545 3 : move16();
546 3 : st_fx->last_bwidth = 0;
547 3 : move16();
548 :
549 : /*-----------------------------------------------------------------*
550 : * channel-aware mode parameters
551 : *-----------------------------------------------------------------*/
552 :
553 3 : set16_fx( st_fx->tilt_code_dec_fx, 0, NB_SUBFR16k );
554 :
555 3 : st_fx->use_partial_copy = 0;
556 3 : move16();
557 3 : st_fx->prev_use_partial_copy = 0;
558 3 : move16();
559 3 : st_fx->rf_flag = 0;
560 3 : move16();
561 3 : st_fx->rf_flag_last = 0;
562 3 : st_fx->prev_rf_frame_type = 0;
563 3 : move16();
564 3 : st_fx->next_coder_type = 0;
565 3 : move16();
566 :
567 3 : st_fx->rf_target_bits = 0;
568 3 : move16();
569 :
570 3 : st_fx->rf_indx_nelp_fid = 0;
571 3 : move16();
572 3 : st_fx->rf_indx_nelp_iG1 = 0;
573 3 : move16();
574 3 : st_fx->rf_indx_nelp_iG2[0] = 0;
575 3 : move16();
576 3 : st_fx->rf_indx_nelp_iG2[1] = 0;
577 3 : move16();
578 3 : st_fx->rf_indx_tbeGainFr = 0;
579 3 : move16();
580 :
581 : /*----------------------------------------------------------------------------------*
582 : * AMR-WB IO mode parameters
583 : *----------------------------------------------------------------------------------*/
584 3 : test();
585 3 : IF( st_fx->Opt_AMR_WB || ( st_fx->element_mode == EVS_MONO ) )
586 : {
587 3 : IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL )
588 : {
589 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
590 : }
591 :
592 : /* AMR-WB IO init */
593 3 : amr_wb_dec_init_fx( st_fx->hAmrwb_IO );
594 :
595 : /* AMR-WB IO HF synth init */
596 3 : hf_synth_amr_wb_init_fx( st_fx->hAmrwb_IO );
597 : }
598 : ELSE
599 : {
600 0 : st_fx->hAmrwb_IO = NULL;
601 : }
602 : /*-----------------------------------------------------------------*
603 : * HF (6-7kHz) (zero) BWE parameters
604 : *-----------------------------------------------------------------*/
605 3 : test();
606 3 : test();
607 3 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
608 : {
609 3 : IF( ( st_fx->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL )
610 : {
611 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) );
612 : }
613 :
614 3 : hf_synth_init_fx( st_fx->hBWE_zero );
615 : /* TBV Hack for bit exactness with 26.452, Issue should be corrected there as the the reset is not perform on all values of mem_hp400_fx*/
616 3 : set16_fx( st_fx->hBWE_zero->mem_hp400_fx, 0, 6 );
617 : }
618 : ELSE
619 : {
620 0 : st_fx->hBWE_zero = NULL;
621 : }
622 :
623 : /* HF synth init */
624 3 : hf_synth_amr_wb_init_fx( st_fx->hAmrwb_IO );
625 :
626 :
627 3 : st_fx->bpf_off = 0;
628 3 : move16();
629 : /*-----------------------------------------------------------------*
630 : * Bass post-filter parameters
631 : *-----------------------------------------------------------------*/
632 3 : test();
633 3 : test();
634 3 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
635 : {
636 3 : IF( ( st_fx->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL )
637 : {
638 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) );
639 : }
640 :
641 3 : bass_psfilter_init_fx( st_fx->hBPF );
642 : }
643 : ELSE
644 : {
645 0 : st_fx->hBPF = NULL;
646 : }
647 : /*-----------------------------------------------------------------*
648 : * FD BPF & resampling tools parameters
649 : *-----------------------------------------------------------------*/
650 : /* open analysis for max. SR 48kHz */
651 3 : IF( NE_32( ( error = openCldfb( &st_fx->cldfbAna, CLDFB_ANALYSIS, CLDFB_getNumChannels( 48000 ), 320 ) ), IVAS_ERR_OK ) )
652 : {
653 0 : return error;
654 : }
655 :
656 : /* open analysis BPF for max. SR 16kHz */
657 3 : IF( NE_32( ( error = openCldfb( &st_fx->cldfbBPF, CLDFB_ANALYSIS, CLDFB_getNumChannels( 16000 ), 320 ) ), IVAS_ERR_OK ) )
658 : {
659 0 : return error;
660 : }
661 : /* open synthesis for output SR */
662 3 : IF( NE_32( ( error = openCldfb( &st_fx->cldfbSyn, CLDFB_SYNTHESIS, CLDFB_getNumChannels( st_fx->output_Fs ), st_fx->output_frame_fx ) ), IVAS_ERR_OK ) )
663 : {
664 0 : return error;
665 : }
666 3 : move16();
667 3 : move16();
668 3 : move16();
669 3 : move16();
670 3 : move16();
671 3 : move16();
672 3 : move32();
673 3 : st_fx->last_active_bandsToZero_bwdec = 0;
674 3 : st_fx->perc_bwddec = 0;
675 3 : st_fx->last_flag_filter_NB = 0;
676 3 : st_fx->active_frame_cnt_bwddec = 0;
677 3 : st_fx->total_frame_cnt_bwddec = 0;
678 3 : set16_fx( st_fx->flag_buffer, 0, 20 );
679 3 : st_fx->avg_nrg_LT = 0;
680 :
681 3 : st_fx->Ng_ener_ST_fx = -13056;
682 3 : move16(); /*-51 IN Q8*/
683 3 : st_fx->old_Es_pred_fx = 0;
684 3 : move16();
685 3 : set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
686 3 : st_fx->old_Aq_12_8_fx[0] = 4096;
687 3 : move16(); /*1 in Q12*/
688 :
689 : /*-----------------------------------------------------------------*
690 : * SC-VBR parameters
691 : *-----------------------------------------------------------------*/
692 :
693 3 : IF( st_fx->element_mode == EVS_MONO )
694 : {
695 3 : IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL )
696 : {
697 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
698 : }
699 :
700 3 : sc_vbr_dec_init( st_fx->hSC_VBR );
701 : }
702 : ELSE
703 : {
704 0 : st_fx->hSC_VBR = NULL;
705 : }
706 :
707 3 : st_fx->last_ppp_mode_dec = 0;
708 3 : move16();
709 3 : st_fx->old_ppp_mode = 0;
710 3 : move16();
711 3 : st_fx->ppp_mode_dec = 0;
712 3 : move16();
713 3 : st_fx->last_nelp_mode_dec = 0;
714 3 : move16();
715 3 : st_fx->nelp_mode_dec = 0;
716 3 : move16();
717 3 : st_fx->prev_gain_pit_dec_fx = 0;
718 3 : move16();
719 3 : st_fx->prev_tilt_code_dec_fx = 0;
720 3 : move16();
721 3 : st_fx->vbr_hw_BWE_disable_dec = 0;
722 3 : move16();
723 3 : st_fx->last_vbr_hw_BWE_disable_dec = 0;
724 3 : move16();
725 :
726 : /*-----------------------------------------------------------------*
727 : * Mode 2 initialization
728 : *-----------------------------------------------------------------*/
729 :
730 3 : IF( ( st_fx->hPlcInfo = (T_PLCInfo_HANDLE) malloc( sizeof( T_PLCInfo ) ) ) == NULL )
731 : {
732 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) );
733 : }
734 :
735 3 : st_fx->enablePlcWaveadjust = 0;
736 3 : move16();
737 :
738 : /* Init Decoder */
739 3 : open_decoder_LPD_fx( st_fx, st_fx->total_brate, st_fx->bwidth );
740 :
741 3 : st_fx->m_decodeMode = DEC_NO_FRAM_LOSS;
742 3 : move16();
743 3 : st_fx->m_frame_type = ACTIVE_FRAME;
744 3 : move16();
745 3 : st_fx->m_old_frame_type = ACTIVE_FRAME;
746 3 : move16();
747 :
748 :
749 3 : newCldfbBands = CLDFB_getNumChannels( L_mult0( st_fx->L_frame, 50 ) );
750 :
751 3 : resampleCldfb( st_fx->cldfbAna, newCldfbBands, st_fx->L_frame, 1 );
752 3 : resampleCldfb( st_fx->cldfbBPF, newCldfbBands, st_fx->L_frame, 1 );
753 :
754 3 : test();
755 3 : IF( ( EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || idchan == 0 ) /*&& mc_mode != MC_MODE_MCT && mc_mode != MC_MODE_PARAMUPMIX*/ )
756 : {
757 : /* Create FD_CNG instance */
758 :
759 3 : IF( NE_32( ( error = createFdCngDec_fx( &st_fx->hFdCngDec ) ), IVAS_ERR_OK ) )
760 : {
761 0 : return error;
762 : }
763 :
764 : /* Init FD-CNG */
765 3 : initFdCngDec_fx( st_fx, st_fx->cldfbSyn->scale );
766 : }
767 : ELSE
768 : {
769 0 : st_fx->hFdCngDec = NULL;
770 : }
771 :
772 3 : st_fx->lp_noise = -167772160l /*-20.f Q23*/;
773 3 : move32();
774 3 : st_fx->force_lpd_reset = 0;
775 3 : move16();
776 :
777 : /*-----------------------------------------------------------------*
778 : * initialzie Q values
779 : *-----------------------------------------------------------------*/
780 :
781 3 : st_fx->Q_syn2 = 0;
782 3 : move16();
783 3 : st_fx->Q_exc = 8;
784 3 : st_fx->prev_Q_exc = 0;
785 3 : move16();
786 3 : st_fx->Q_syn = 0;
787 3 : move16();
788 3 : st_fx->prev_Q_syn = 0;
789 3 : move16();
790 :
791 18 : FOR( i = 0; i < L_Q_MEM; i++ )
792 : {
793 15 : st_fx->Q_subfr[i] = 8;
794 15 : move16();
795 : }
796 :
797 3 : st_fx->prev_Q_exc_fr = 0;
798 3 : move16();
799 3 : st_fx->prev_Q_syn_fr = 0;
800 3 : move16();
801 :
802 : /*----------------------------------------------------------------------------------*
803 : * Stereo/IVAS parameters
804 : *----------------------------------------------------------------------------------*/
805 3 : st_fx->tdm_LRTD_flag = 0; /* LRTD stereo mode flag */
806 3 : move16();
807 3 : st_fx->cna_dirac_flag = 0; /* CNA in DirAC flag */
808 3 : move16();
809 3 : st_fx->cng_sba_flag = 0; /* CNG in SBA flag */
810 3 : move16();
811 3 : st_fx->element_mode = EVS_MONO; /* element mode */
812 3 : move16();
813 3 : st_fx->element_brate = -1; /* element bitrate */
814 3 : move16();
815 3 : st_fx->low_rate_mode = 0; /* low-rate mode flag */
816 3 : move16();
817 3 : st_fx->last_low_rate_mode = 0; /* low-rate mode flag */
818 3 : move16();
819 :
820 : #ifdef DEBUGGING
821 : st_fx->id_element = -1; /* element ID */
822 : #endif
823 3 : st_fx->extl_orig = -1; /* extension layer */
824 3 : move16();
825 3 : st_fx->extl_brate_orig = 0; /* extension layer bitrate */
826 3 : move16();
827 :
828 3 : return error;
829 : }
830 :
831 :
832 : /*----------------------------------------------------------------------*
833 : * init_decoder_ivas_fx()
834 : *
835 : * Initialization of static variables for the IVAS decoder
836 : *----------------------------------------------------------------------*/
837 :
838 8157 : ivas_error init_decoder_ivas_fx(
839 : Decoder_State *st_fx, /* o: Decoder static variables structure */
840 : const Word16 idchan, /* i : channel ID */
841 : const MC_MODE mc_mode /* i : MC mode */
842 : )
843 : {
844 : Word16 i;
845 : ivas_error error;
846 :
847 8157 : error = IVAS_ERR_OK;
848 8157 : move32();
849 :
850 : /*-----------------------------------------------------------------*
851 : * General parameters
852 : *-----------------------------------------------------------------*/
853 :
854 8157 : st_fx->codec_mode = MODE1;
855 8157 : move16();
856 8157 : st_fx->last_codec_mode = MODE1;
857 8157 : move16();
858 8157 : st_fx->core = ACELP_CORE;
859 8157 : move16();
860 8157 : st_fx->L_frame = L_FRAME;
861 8157 : move16();
862 8157 : st_fx->extl = -1;
863 8157 : move16();
864 8157 : st_fx->extl_orig = -1; /* extension layer */
865 8157 : move16();
866 8157 : st_fx->extl_brate_orig = 0; /* extension layer bitrate */
867 8157 : move16();
868 8157 : st_fx->last_bits_frame_nominal = -1;
869 8157 : move16();
870 8157 : st_fx->total_brate = ACELP_8k00;
871 8157 : move16();
872 8157 : st_fx->last_total_brate = -1;
873 8157 : move16();
874 8157 : st_fx->last_total_brate_ber = -1;
875 8157 : move32();
876 8157 : st_fx->core_brate = ACELP_8k00;
877 8157 : move16();
878 8157 : st_fx->ini_frame = 0;
879 8157 : move16();
880 8157 : st_fx->bwidth = NB;
881 8157 : move16();
882 8157 : st_fx->last_bwidth = NB;
883 8157 : move16();
884 8157 : st_fx->extl_brate = 0;
885 8157 : move16();
886 8157 : st_fx->coder_type = GENERIC; /* low-rate mode flag */
887 8157 : move16();
888 8157 : st_fx->last_coder_type = GENERIC;
889 8157 : move16();
890 8157 : st_fx->inactive_coder_type_flag = 0;
891 8157 : move16();
892 8157 : st_fx->last_L_frame = st_fx->L_frame;
893 8157 : move16();
894 8157 : st_fx->last_core_brate = st_fx->core_brate;
895 8157 : move16();
896 8157 : st_fx->last_core = -1;
897 8157 : move16();
898 8157 : st_fx->last_extl = st_fx->extl;
899 8157 : move16();
900 :
901 8157 : st_fx->flag_ACELP16k = set_ACELP_flag( st_fx->element_mode, st_fx->total_brate, st_fx->total_brate, idchan, 0, -1, -1 );
902 8157 : move16();
903 :
904 : /*-----------------------------------------------------------------*
905 : * ACELP core parameters
906 : *-----------------------------------------------------------------*/
907 :
908 : /* LSF initilaizations */
909 8157 : Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M );
910 :
911 8157 : init_lvq_fx( st_fx->offset_scale1_fx, st_fx->offset_scale2_fx, st_fx->offset_scale1_p_fx, st_fx->offset_scale2_p_fx, st_fx->no_scales_fx, st_fx->no_scales_p_fx );
912 :
913 8157 : set16_fx( st_fx->mem_MA_fx, 0, M );
914 :
915 8157 : st_fx->dm_fx.prev_state = 0; /* This corresponds to st_fx->dispMem in FLP */
916 8157 : move16();
917 8157 : st_fx->dm_fx.prev_gain_code = L_deposit_l( 0 );
918 57099 : FOR( i = 2; i < 8; i++ )
919 : {
920 48942 : st_fx->dm_fx.prev_gain_pit[i - 2] = 0;
921 48942 : move16();
922 : }
923 8157 : st_fx->tilt_code_fx = 0;
924 8157 : move16();
925 8157 : st_fx->gc_threshold_fx = 0;
926 8157 : move32();
927 8157 : st_fx->last_good = UNVOICED_CLAS;
928 8157 : move16();
929 8157 : st_fx->clas_dec = UNVOICED_CLAS;
930 8157 : move16();
931 8157 : st_fx->low_rate_mode = 0; /* low-rate mode flag */
932 8157 : move16();
933 8157 : st_fx->last_low_rate_mode = 0; /* low-rate mode flag */
934 8157 : move16();
935 8157 : st_fx->lp_gainp_fx = 0;
936 8157 : move16();
937 8157 : st_fx->lp_gainc_fx = 0;
938 8157 : move16();
939 :
940 8157 : set16_fx( st_fx->old_exc_fx, 0, L_EXC_MEM_DEC );
941 :
942 : /* AVQ pre-quantizer memory */
943 8157 : st_fx->mem_preemp_preQ_fx = 0;
944 8157 : move16();
945 8157 : st_fx->last_nq_preQ = 0;
946 8157 : move16();
947 8157 : st_fx->use_acelp_preq = 0;
948 8157 : move16();
949 :
950 8157 : st_fx->mem_deemph_fx = 0;
951 8157 : move16();
952 :
953 8157 : set16_fx( st_fx->mem_syn1_fx, 0, M );
954 8157 : set16_fx( st_fx->mem_syn2_fx, 0, M );
955 8157 : st_fx->stab_fac_fx = 0;
956 8157 : move16();
957 8157 : st_fx->stab_fac_smooth_fx = 0;
958 8157 : move16();
959 8157 : set16_fx( st_fx->agc_mem_fx, 0, 2 );
960 8157 : set16_fx( st_fx->mem_syn3_fx, 0, M );
961 :
962 8157 : st_fx->stab_fac_smooth_lt_fx = 0;
963 8157 : move16();
964 8157 : st_fx->log_energy_diff_lt_fx = 0;
965 8157 : move32();
966 8157 : st_fx->log_energy_old_fx = 0;
967 8157 : move32();
968 :
969 8157 : Copy( GEWB_Ave_fx, st_fx->lsf_old_fx, M );
970 8157 : lsf2lsp_fx( st_fx->lsf_old_fx, st_fx->lsp_old_fx, M, INT_FS_12k8 );
971 :
972 8157 : st_fx->mid_lsf_int = 0;
973 8157 : move16();
974 8157 : st_fx->safety_net = 0;
975 8157 : move16();
976 :
977 : /* FEC */
978 8157 : st_fx->scaling_flag = 0;
979 8157 : move16();
980 8157 : st_fx->lp_ener_FEC_av = 500000;
981 8157 : move32();
982 8157 : st_fx->lp_ener_FEC_max = 500000;
983 8157 : move32();
984 8157 : st_fx->prev_bfi = 0;
985 8157 : move16();
986 8157 : st_fx->lp_ener_FER_fx = 15360; /*60 in Q8*/
987 8157 : move16();
988 8157 : st_fx->old_enr_LP = 0;
989 8157 : move16();
990 8157 : st_fx->lp_ener_fx = L_deposit_l( 0 );
991 8157 : st_fx->enr_old_fx = L_deposit_l( 0 );
992 8157 : st_fx->bfi_pitch_fx = L_SUBFR_Q6;
993 8157 : move16();
994 8157 : st_fx->bfi_pitch_frame = L_FRAME;
995 8157 : move16();
996 8157 : set16_fx( st_fx->mem_syn_clas_estim_fx, 0, L_SYN_MEM_CLAS_ESTIM );
997 8157 : st_fx->classifier_Q_mem_syn = 0;
998 8157 : move16();
999 8157 : st_fx->last_con_tcx = 0;
1000 8157 : move16();
1001 :
1002 89727 : FOR( i = 0; i < 2 * NB_SUBFR16k; i++ )
1003 : {
1004 81570 : st_fx->old_pitch_buf_fx[i] = L_SUBFR << 16; /*15Q16*/
1005 81570 : move32();
1006 : }
1007 :
1008 8157 : st_fx->upd_cnt = MAX_UPD_CNT;
1009 8157 : move16();
1010 8157 : Copy( GEWB_Ave_fx, st_fx->lsfoldbfi0_fx, M );
1011 8157 : Copy( GEWB_Ave_fx, st_fx->lsfoldbfi1_fx, M );
1012 8157 : Copy( GEWB_Ave_fx, st_fx->lsf_adaptive_mean_fx, M );
1013 :
1014 8157 : st_fx->seed_acelp = RANDOM_INITSEED;
1015 8157 : move16();
1016 8157 : st_fx->seed = RANDOM_INITSEED;
1017 8157 : move16();
1018 8157 : st_fx->nbLostCmpt = 0;
1019 8157 : move16();
1020 8157 : st_fx->decision_hyst = 0;
1021 8157 : move16();
1022 8157 : st_fx->unv_cnt = 0;
1023 8157 : move16();
1024 8157 : st_fx->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/
1025 8157 : st_fx->uv_count = 0;
1026 8157 : move16();
1027 8157 : st_fx->act_count = 3;
1028 8157 : move16();
1029 8157 : Copy( st_fx->lsp_old_fx, st_fx->lspold_s_fx, M );
1030 8157 : st_fx->noimix_seed = RANDOM_INITSEED;
1031 8157 : move16();
1032 8157 : st_fx->min_alpha_fx = 32767; /*1; Q15*/
1033 8157 : move16();
1034 8157 : st_fx->exc_pe_fx = 0;
1035 8157 : move16();
1036 8157 : st_fx->Q_stat_noise = 31;
1037 8157 : move16();
1038 8157 : st_fx->prev_coder_type = GENERIC;
1039 8157 : move16();
1040 :
1041 8157 : st_fx->tilt_wb_fx = 0; // Q11
1042 8157 : move16();
1043 :
1044 8157 : st_fx->last_voice_factor_fx = 0;
1045 8157 : move16();
1046 :
1047 8157 : set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) );
1048 8157 : st_fx->Qprev_synth_buffer_fx = 15;
1049 8157 : move16();
1050 8157 : set32_fx( st_fx->prev_synth_buffer32_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) );
1051 :
1052 8157 : st_fx->old_bfi_cnt = 0;
1053 8157 : move16();
1054 :
1055 : /*-----------------------------------------------------------------*
1056 : * parameters for AC mode (GSC)
1057 : *-----------------------------------------------------------------*/
1058 :
1059 8157 : st_fx->GSC_noisy_speech = 0;
1060 8157 : move16();
1061 8157 : st_fx->GSC_IVAS_mode = 0;
1062 8157 : move16();
1063 8157 : st_fx->Last_GSC_noisy_speech_flag = 0;
1064 8157 : move16();
1065 :
1066 8157 : test();
1067 8157 : test();
1068 8157 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1069 : {
1070 2677 : IF( ( st_fx->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL )
1071 : {
1072 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) );
1073 : }
1074 :
1075 2677 : GSC_dec_init_ivas_fx( st_fx->hGSCDec );
1076 : }
1077 : ELSE
1078 : {
1079 5480 : st_fx->hGSCDec = NULL;
1080 : }
1081 :
1082 : /*-----------------------------------------------------------------*
1083 : * parameters for fast recovery (WI)
1084 : *-----------------------------------------------------------------*/
1085 :
1086 8157 : test();
1087 8157 : IF( EQ_32( st_fx->output_Fs, 16000 ) && ( st_fx->element_mode == EVS_MONO ) )
1088 : {
1089 0 : IF( ( st_fx->hWIDec = (WI_DEC_HANDLE) malloc( sizeof( WI_DEC_DATA ) ) ) == NULL )
1090 : {
1091 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) );
1092 : }
1093 0 : set16_fx( st_fx->hWIDec->old_exc2_fx, 0, L_EXC_MEM );
1094 0 : set16_fx( st_fx->hWIDec->old_syn2_fx, 0, L_EXC_MEM );
1095 : }
1096 : ELSE
1097 : {
1098 8157 : st_fx->hWIDec = NULL;
1099 : }
1100 :
1101 : /* NB post-filter */
1102 : /*-----------------------------------------------------------------*
1103 : * NB/formant post-filter
1104 : *-----------------------------------------------------------------*/
1105 8157 : test();
1106 8157 : test();
1107 8157 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1108 : {
1109 2677 : IF( ( st_fx->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL )
1110 : {
1111 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) );
1112 : }
1113 :
1114 2677 : Init_post_filter_fx( st_fx->hPFstat );
1115 2677 : st_fx->psf_lp_noise_fx = 0;
1116 2677 : move16();
1117 : }
1118 : ELSE
1119 : {
1120 5480 : st_fx->hPFstat = NULL;
1121 : }
1122 :
1123 : /*-----------------------------------------------------------------*
1124 : * HF (6-7kHz) (zero) BWE parameters
1125 : *-----------------------------------------------------------------*/
1126 :
1127 8157 : test();
1128 8157 : test();
1129 8157 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1130 : {
1131 2677 : IF( ( st_fx->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL )
1132 : {
1133 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) );
1134 : }
1135 :
1136 2677 : hf_synth_init_fx( st_fx->hBWE_zero );
1137 2677 : set16_fx( st_fx->hBWE_zero->mem_hp400_fx, 0, 6 );
1138 : }
1139 : ELSE
1140 : {
1141 5480 : st_fx->hBWE_zero = NULL;
1142 : }
1143 :
1144 : /*-----------------------------------------------------------------*
1145 : * LD music post-filter
1146 : *-----------------------------------------------------------------*/
1147 8157 : test();
1148 8157 : test();
1149 8157 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1150 : {
1151 2677 : IF( ( st_fx->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL )
1152 : {
1153 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) );
1154 : }
1155 :
1156 2677 : music_postfilt_init( st_fx->hMusicPF );
1157 : }
1158 : ELSE
1159 : {
1160 5480 : st_fx->hMusicPF = NULL;
1161 : }
1162 :
1163 : /*-----------------------------------------------------------------*
1164 : * CNG and DTX
1165 : *-----------------------------------------------------------------*/
1166 :
1167 8157 : st_fx->first_CNG = 0;
1168 8157 : move16();
1169 8157 : st_fx->cng_type = -1;
1170 8157 : move16();
1171 8157 : st_fx->last_active_brate = ACELP_7k20;
1172 8157 : move32();
1173 8157 : st_fx->last_CNG_L_frame = L_FRAME;
1174 8157 : move16();
1175 8157 : st_fx->last_vad_fx = 0;
1176 8157 : move16();
1177 : #ifdef NONBE_1325_TD_STEREO_QUANT_LSF_SEC
1178 8157 : st_fx->active_cnt = CNG_TYPE_HO;
1179 : #else
1180 : st_fx->active_cnt = 20;
1181 : #endif
1182 8157 : move16();
1183 :
1184 8157 : test();
1185 8157 : test();
1186 8157 : test();
1187 8157 : IF( idchan == 0 && ( ( st_fx->element_mode == EVS_MONO ) || EQ_16( st_fx->element_mode, IVAS_CPE_DFT ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) )
1188 : {
1189 98 : IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL )
1190 : {
1191 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
1192 : }
1193 :
1194 98 : td_cng_dec_init_fx( st_fx );
1195 : }
1196 : ELSE
1197 : {
1198 8059 : st_fx->hTdCngDec = NULL;
1199 : }
1200 :
1201 8157 : st_fx->masa_sid_format = 0;
1202 8157 : move16();
1203 8157 : st_fx->Q_stat_noise_ge = GE_SHIFT;
1204 8157 : move16();
1205 :
1206 : /*-----------------------------------------------------------------*
1207 : * HQ core parameters
1208 : *-----------------------------------------------------------------*/
1209 :
1210 8157 : st_fx->prev_old_bfi = 0;
1211 8157 : move16();
1212 :
1213 8157 : set16_fx( st_fx->delay_buf_out_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
1214 8157 : set16_fx( st_fx->previoussynth_fx, 0, L_FRAME48k );
1215 :
1216 8157 : set32_fx( st_fx->delay_buf_out32_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
1217 8157 : set32_fx( st_fx->previoussynth_fx_32, 0, L_FRAME48k );
1218 :
1219 8157 : IF( st_fx->element_mode == EVS_MONO )
1220 : {
1221 0 : set16_fx( st_fx->old_synth_sw_fx, 0, NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) );
1222 : }
1223 :
1224 8157 : test();
1225 8157 : test();
1226 8157 : test();
1227 8157 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || EQ_16( st_fx->element_mode, IVAS_SCE ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) )
1228 : {
1229 8059 : IF( ( st_fx->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL )
1230 : {
1231 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
1232 : }
1233 :
1234 : /* HQ core initialization */
1235 8059 : HQ_core_dec_init_fx( st_fx->hHQ_core );
1236 :
1237 8059 : IF( st_fx->element_mode == EVS_MONO )
1238 : {
1239 : /* HQ NB FEC initialization */
1240 0 : IF( ( st_fx->hHQ_nbfec = (HQ_NBFEC_HANDLE) malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL )
1241 : {
1242 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) );
1243 : }
1244 :
1245 0 : HQ_nbfec_init_fx( st_fx->hHQ_nbfec );
1246 : }
1247 : ELSE
1248 : {
1249 8059 : st_fx->hHQ_nbfec = NULL;
1250 : }
1251 : }
1252 : ELSE
1253 : {
1254 98 : st_fx->hHQ_core = NULL;
1255 98 : st_fx->hHQ_nbfec = NULL;
1256 : }
1257 :
1258 : /*-----------------------------------------------------------------*
1259 : * TBE parameters
1260 : *-----------------------------------------------------------------*/
1261 :
1262 8157 : test();
1263 8157 : IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
1264 : {
1265 2677 : IF( ( st_fx->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL )
1266 : {
1267 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
1268 : }
1269 :
1270 2677 : td_bwe_dec_init_fx( st_fx->hBWE_TD, st_fx->extl, st_fx->output_Fs );
1271 :
1272 2677 : st_fx->prev_Q_bwe_exc = 31;
1273 2677 : move16();
1274 : }
1275 : ELSE
1276 : {
1277 5480 : st_fx->hBWE_TD = NULL;
1278 : }
1279 :
1280 8157 : st_fx->old_bwe_delay = -1; /*Q0*/
1281 8157 : move16();
1282 8157 : set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS ) );
1283 :
1284 : /*-----------------------------------------------------------------*
1285 : * SWB BWE parameters
1286 : *-----------------------------------------------------------------*/
1287 8157 : test();
1288 8157 : IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
1289 : {
1290 2677 : IF( ( st_fx->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL )
1291 : {
1292 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
1293 : }
1294 :
1295 2677 : fd_bwe_dec_init_fx( st_fx->hBWE_FD );
1296 : }
1297 : ELSE
1298 : {
1299 5480 : st_fx->hBWE_FD = NULL;
1300 : }
1301 :
1302 : /*-----------------------------------------------------------------*
1303 : * WB/SWB bandwidth switching parameters
1304 : *-----------------------------------------------------------------*/
1305 :
1306 8157 : st_fx->tilt_swb_fx = 0; // Q24
1307 8157 : move16();
1308 8157 : st_fx->prev_ener_shb_fx = 0; // Q1
1309 8157 : move16();
1310 8157 : st_fx->prev_enerLH_fx = 0; // Q1
1311 8157 : move16();
1312 8157 : st_fx->enerLH_fx = L_deposit_l( 0 );
1313 8157 : st_fx->enerLL_fx = L_deposit_l( 0 );
1314 8157 : st_fx->prev_enerLL_fx = 0;
1315 8157 : move16();
1316 8157 : st_fx->prev_fractive = 0;
1317 8157 : move16();
1318 8157 : st_fx->prev_bws_cnt = 0;
1319 8157 : move16();
1320 8157 : st_fx->bws_cnt = N_WS2N_FRAMES;
1321 8157 : move16();
1322 8157 : st_fx->bws_cnt1 = N_NS2W_FRAMES;
1323 8157 : move16();
1324 8157 : st_fx->attenu_fx = 3277; // Q15
1325 8157 : move16();
1326 8157 : st_fx->last_inner_frame = L_FRAME8k;
1327 8157 : move16();
1328 :
1329 : /*-----------------------------------------------------------------*
1330 : * HR SWB BWE parameters
1331 : *-----------------------------------------------------------------*/
1332 :
1333 8157 : IF( ( st_fx->element_mode == EVS_MONO ) )
1334 : {
1335 0 : IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL )
1336 : {
1337 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) );
1338 : }
1339 :
1340 0 : hr_bwe_dec_init( st_fx->hBWE_FD_HR );
1341 : }
1342 : ELSE
1343 : {
1344 8157 : st_fx->hBWE_FD_HR = NULL;
1345 : }
1346 :
1347 : /*----------------------------------------------------------------------------------*
1348 : * AMR-WB IO mode parameters
1349 : *----------------------------------------------------------------------------------*/
1350 8157 : test();
1351 8157 : IF( st_fx->Opt_AMR_WB || ( st_fx->element_mode == EVS_MONO ) )
1352 : {
1353 0 : IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL )
1354 : {
1355 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
1356 : }
1357 :
1358 : /* AMR-WB IO init */
1359 0 : amr_wb_dec_init_fx( st_fx->hAmrwb_IO );
1360 :
1361 : /* AMR-WB IO HF synth init */
1362 0 : hf_synth_amr_wb_init_fx( st_fx->hAmrwb_IO );
1363 : }
1364 : ELSE
1365 : {
1366 8157 : st_fx->hAmrwb_IO = NULL;
1367 : }
1368 :
1369 : /*-----------------------------------------------------------------*
1370 : * channel-aware mode parameters
1371 : *-----------------------------------------------------------------*/
1372 :
1373 8157 : set16_fx( st_fx->tilt_code_dec_fx, 0, NB_SUBFR16k );
1374 8157 : st_fx->use_partial_copy = 0;
1375 8157 : move16();
1376 8157 : st_fx->prev_use_partial_copy = 0;
1377 8157 : move16();
1378 8157 : st_fx->rf_flag = 0;
1379 8157 : move16();
1380 8157 : st_fx->rf_flag_last = 0;
1381 8157 : move16();
1382 8157 : st_fx->prev_rf_frame_type = 0;
1383 8157 : move16();
1384 8157 : st_fx->next_coder_type = 0;
1385 8157 : move16();
1386 8157 : st_fx->rf_target_bits = 0;
1387 8157 : move16();
1388 8157 : st_fx->rf_indx_nelp_fid = 0;
1389 8157 : move16();
1390 8157 : st_fx->rf_indx_nelp_iG1 = 0;
1391 8157 : move16();
1392 8157 : st_fx->rf_indx_nelp_iG2[0] = 0;
1393 8157 : move16();
1394 8157 : st_fx->rf_indx_nelp_iG2[1] = 0;
1395 8157 : move16();
1396 8157 : st_fx->rf_indx_tbeGainFr = 0;
1397 8157 : move16();
1398 :
1399 : /*-----------------------------------------------------------------*
1400 : * Bass post-filter parameters
1401 : *-----------------------------------------------------------------*/
1402 :
1403 8157 : st_fx->bpf_off = 0;
1404 8157 : move16();
1405 :
1406 8157 : test();
1407 8157 : test();
1408 8157 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1409 : {
1410 2677 : IF( ( st_fx->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL )
1411 : {
1412 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) );
1413 : }
1414 :
1415 2677 : bass_psfilter_init_fx( st_fx->hBPF );
1416 : }
1417 : ELSE
1418 : {
1419 5480 : st_fx->hBPF = NULL;
1420 : }
1421 :
1422 : /*-----------------------------------------------------------------*
1423 : * FD BPF & resampling tools parameters
1424 : *-----------------------------------------------------------------*/
1425 8157 : test();
1426 8157 : test();
1427 8157 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1428 : {
1429 : /* open analysis for max. SR 48kHz */
1430 2677 : IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
1431 : {
1432 0 : return error;
1433 : }
1434 :
1435 : /* open analysis BPF for max. SR 16kHz */
1436 2677 : IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
1437 : {
1438 0 : return error;
1439 : }
1440 : }
1441 : ELSE
1442 : {
1443 5480 : st_fx->cldfbAna = NULL;
1444 5480 : st_fx->cldfbBPF = NULL;
1445 : }
1446 :
1447 : /* open synthesis for output SR */
1448 8157 : IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbSyn, CLDFB_SYNTHESIS, st_fx->output_Fs, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
1449 : {
1450 0 : return error;
1451 : }
1452 :
1453 8157 : st_fx->cldfbSynHB = NULL;
1454 8157 : st_fx->last_active_bandsToZero_bwdec = 0;
1455 8157 : move16();
1456 8157 : st_fx->perc_bwddec = 0;
1457 8157 : move16();
1458 8157 : st_fx->last_flag_filter_NB = 0;
1459 8157 : move16();
1460 8157 : st_fx->active_frame_cnt_bwddec = 0;
1461 8157 : move16();
1462 8157 : st_fx->total_frame_cnt_bwddec = 0;
1463 8157 : move16();
1464 8157 : set16_fx( st_fx->flag_buffer, 0, 20 );
1465 8157 : st_fx->avg_nrg_LT = 0;
1466 8157 : move32();
1467 :
1468 : /*-----------------------------------------------------------------*
1469 : * Noise gate parameters
1470 : *-----------------------------------------------------------------*/
1471 :
1472 8157 : set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
1473 8157 : st_fx->old_Aq_12_8_fx[0] = ONE_IN_Q12;
1474 8157 : move16();
1475 8157 : st_fx->Ng_ener_ST_fx = -13056; /*-51 IN Q8*/
1476 8157 : move16();
1477 8157 : st_fx->old_Es_pred_fx = 0;
1478 8157 : move16();
1479 8157 : set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
1480 8157 : st_fx->old_Aq_12_8_fx[0] = 4096; /*1 in Q12*/
1481 8157 : move16();
1482 :
1483 : /*-----------------------------------------------------------------*
1484 : * SC-VBR parameters
1485 : *-----------------------------------------------------------------*/
1486 :
1487 8157 : IF( st_fx->element_mode == EVS_MONO )
1488 : {
1489 0 : IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL )
1490 : {
1491 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
1492 : }
1493 :
1494 0 : sc_vbr_dec_init( st_fx->hSC_VBR );
1495 : }
1496 : ELSE
1497 : {
1498 8157 : st_fx->hSC_VBR = NULL;
1499 : }
1500 :
1501 8157 : st_fx->last_ppp_mode_dec = 0;
1502 8157 : move16();
1503 8157 : st_fx->old_ppp_mode = 0;
1504 8157 : move16();
1505 8157 : st_fx->ppp_mode_dec = 0;
1506 8157 : move16();
1507 8157 : st_fx->last_nelp_mode_dec = 0;
1508 8157 : move16();
1509 8157 : st_fx->nelp_mode_dec = 0;
1510 8157 : move16();
1511 8157 : st_fx->prev_gain_pit_dec_fx = 0;
1512 8157 : move16();
1513 8157 : st_fx->prev_tilt_code_dec_fx = 0;
1514 8157 : move16();
1515 8157 : st_fx->vbr_hw_BWE_disable_dec = 0;
1516 8157 : move16();
1517 8157 : st_fx->last_vbr_hw_BWE_disable_dec = 0;
1518 8157 : move16();
1519 :
1520 : /*-----------------------------------------------------------------*
1521 : * TCX core
1522 : *-----------------------------------------------------------------*/
1523 :
1524 : /* TCX-LTP */
1525 8157 : test();
1526 8157 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1527 : {
1528 8059 : IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL )
1529 : {
1530 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) );
1531 : }
1532 : }
1533 : ELSE
1534 : {
1535 98 : st_fx->hTcxLtpDec = NULL;
1536 : }
1537 :
1538 : /* TCX core */
1539 8157 : test();
1540 8157 : IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
1541 : {
1542 8059 : IF( ( st_fx->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL )
1543 : {
1544 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) );
1545 : }
1546 :
1547 8059 : set32_fx( st_fx->hTcxDec->FBTCXdelayBuf_32, 0, 111 );
1548 :
1549 8059 : st_fx->hTcxDec->old_synthFB_fx = st_fx->hTcxDec->synth_history_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_MEM_NS );
1550 8059 : st_fx->hTcxDec->prev_good_synth_fx = st_fx->hTcxDec->old_synthFB_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS );
1551 : }
1552 : ELSE
1553 : {
1554 98 : st_fx->hTcxDec = NULL;
1555 : }
1556 :
1557 : /* TCX config. data structure */
1558 8157 : test();
1559 8157 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1560 : {
1561 8059 : IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
1562 : {
1563 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
1564 : }
1565 8059 : st_fx->hTcxCfg->tcx_mdct_window_length = L_FRAME32k / 2;
1566 8059 : move16();
1567 : }
1568 : ELSE
1569 : {
1570 98 : st_fx->hTcxCfg = NULL;
1571 : }
1572 :
1573 : /* Tonal MDCT concealment data structure */
1574 8157 : test();
1575 8157 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1576 : {
1577 8059 : IF( ( st_fx->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL )
1578 : {
1579 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) );
1580 : }
1581 : }
1582 : ELSE
1583 : {
1584 98 : st_fx->hTonalMDCTConc = NULL;
1585 : }
1586 :
1587 : /*-----------------------------------------------------------------*
1588 : * IGF
1589 : *-----------------------------------------------------------------*/
1590 :
1591 8157 : test();
1592 8157 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1593 : {
1594 8059 : IF( ( st_fx->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL )
1595 : {
1596 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) );
1597 : }
1598 :
1599 8059 : st_fx->igf = 0;
1600 8059 : move16();
1601 8059 : init_igf_dec( st_fx->hIGFDec );
1602 : }
1603 : ELSE
1604 : {
1605 98 : st_fx->hIGFDec = NULL;
1606 : }
1607 :
1608 : /*-----------------------------------------------------------------*
1609 : * Mode 2 initialization
1610 : *-----------------------------------------------------------------*/
1611 8157 : IF( ( st_fx->element_mode == EVS_MONO ) )
1612 : {
1613 0 : IF( ( st_fx->hPlcInfo = (T_PLCInfo_HANDLE) malloc( sizeof( T_PLCInfo ) ) ) == NULL )
1614 : {
1615 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) );
1616 : }
1617 : }
1618 : ELSE
1619 : {
1620 8157 : st_fx->hPlcInfo = NULL;
1621 : }
1622 :
1623 8157 : IF( st_fx->element_mode == EVS_MONO )
1624 : {
1625 0 : IF( ( st_fx->hTECDec = (TEC_DEC_HANDLE) malloc( sizeof( TEC_DEC_DATA ) ) ) == NULL )
1626 : {
1627 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) );
1628 : }
1629 : }
1630 : ELSE
1631 : {
1632 8157 : st_fx->hTECDec = NULL;
1633 : }
1634 :
1635 :
1636 : /* Init Decoder */
1637 8157 : Word16 Q_syn_Overl_TDAC = 0, Q_fer_samples = 0, Q_syn_Overl = 0, Q_syn_Overl_TDACFB = 0, Q_syn_OverlFB = 0, Q_old_out = 0, Q_old_outLB = 0, Q_old_Aq_12_8 = 0;
1638 8157 : move16();
1639 8157 : move16();
1640 8157 : move16();
1641 8157 : move16();
1642 8157 : move16();
1643 8157 : move16();
1644 8157 : move16();
1645 8157 : move16();
1646 8157 : open_decoder_LPD_ivas_fx( st_fx, st_fx->total_brate, st_fx->last_total_brate, st_fx->bwidth, 0, st_fx->element_mode, 1, &Q_syn_Overl_TDAC, &Q_fer_samples, &Q_syn_Overl, &Q_syn_Overl_TDACFB, &Q_syn_OverlFB, &Q_old_out, &Q_old_outLB, &Q_old_Aq_12_8 );
1647 :
1648 : /* PLC mode initialization */
1649 8157 : st_fx->m_decodeMode = DEC_NO_FRAM_LOSS;
1650 8157 : move16();
1651 :
1652 : /* Init bandwidth / frame_type */
1653 8157 : st_fx->m_frame_type = ACTIVE_FRAME;
1654 8157 : move16();
1655 8157 : st_fx->m_old_frame_type = ACTIVE_FRAME;
1656 8157 : move16();
1657 :
1658 8157 : test();
1659 8157 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1660 : {
1661 2677 : resampleCldfb_ivas_fx( st_fx->cldfbAna, L_mult0( st_fx->L_frame, FRAMES_PER_SEC ) );
1662 2677 : resampleCldfb_ivas_fx( st_fx->cldfbBPF, L_mult0( st_fx->L_frame, FRAMES_PER_SEC ) );
1663 : }
1664 :
1665 : /*-----------------------------------------------------------------*
1666 : * FD-CNG decoder
1667 : *-----------------------------------------------------------------*/
1668 :
1669 8157 : test();
1670 8157 : test();
1671 8157 : test();
1672 8157 : IF( ( EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || idchan == 0 ) && NE_16( mc_mode, MC_MODE_MCT ) && NE_16( mc_mode, MC_MODE_PARAMUPMIX ) )
1673 : {
1674 : /* Create FD_CNG instance */
1675 :
1676 6047 : IF( NE_32( ( error = createFdCngDec_fx( &st_fx->hFdCngDec ) ), IVAS_ERR_OK ) )
1677 : {
1678 0 : return error;
1679 : }
1680 :
1681 : /* Init FD-CNG */
1682 6047 : initFdCngDec_ivas_fx( st_fx, st_fx->cldfbSyn->scale );
1683 : }
1684 : ELSE
1685 : {
1686 2110 : st_fx->hFdCngDec = NULL;
1687 : }
1688 :
1689 8157 : st_fx->cngTDLevel = 0;
1690 8157 : move16();
1691 8157 : st_fx->cngTDLevel_e = 0;
1692 8157 : move16();
1693 8157 : st_fx->lp_noise = -167772160l /*-20.f Q23*/;
1694 8157 : move32();
1695 8157 : st_fx->force_lpd_reset = 0;
1696 8157 : move16();
1697 :
1698 :
1699 : /*-----------------------------------------------------------------*
1700 : * initialzie Q values
1701 : *-----------------------------------------------------------------*/
1702 :
1703 8157 : st_fx->Q_syn2 = 0;
1704 8157 : move16();
1705 8157 : st_fx->Q_exc = 8;
1706 8157 : move16();
1707 8157 : st_fx->prev_Q_exc = 0;
1708 8157 : move16();
1709 8157 : st_fx->Q_syn = 0;
1710 8157 : move16();
1711 8157 : st_fx->prev_Q_syn = 0;
1712 8157 : move16();
1713 :
1714 48942 : FOR( i = 0; i < L_Q_MEM; i++ )
1715 : {
1716 40785 : st_fx->Q_subfr[i] = 8;
1717 40785 : move16();
1718 : }
1719 :
1720 8157 : st_fx->prev_Q_exc_fr = 0;
1721 8157 : move16();
1722 8157 : st_fx->prev_Q_syn_fr = 0;
1723 8157 : move16();
1724 :
1725 : /*-----------------------------------------------------------------*
1726 : * IVAS parameters
1727 : *-----------------------------------------------------------------*/
1728 :
1729 8157 : st_fx->tdm_LRTD_flag = 0; /* LRTD stereo mode flag */
1730 8157 : move16();
1731 8157 : st_fx->cna_dirac_flag = 0; /* CNA in DirAC flag */
1732 8157 : move16();
1733 8157 : st_fx->cng_sba_flag = 0; /* CNG in SBA flag */
1734 8157 : move16();
1735 8157 : st_fx->cng_ism_flag = 0;
1736 8157 : move16();
1737 :
1738 8157 : return error;
1739 : }
1740 :
1741 :
1742 : /*----------------------------------------------------------------------*
1743 : * reset_preecho_dec()
1744 : *
1745 : * Initialization of static variables for pre-echo
1746 : *----------------------------------------------------------------------*/
1747 1085180 : void reset_preecho_dec_fx(
1748 : HQ_DEC_HANDLE hHQ_core /* i/o: HQ core data handle */
1749 : )
1750 : {
1751 1085180 : hHQ_core->memfilt_lb_fx = 0;
1752 1085180 : move16();
1753 1085180 : hHQ_core->mean_prev_hb_fx = L_deposit_l( 0 );
1754 1085180 : hHQ_core->smoothmem_fx = 32767;
1755 1085180 : move16();
1756 1085180 : hHQ_core->mean_prev_fx = L_deposit_l( 0 );
1757 1085180 : hHQ_core->mean_prev_nc_fx = L_deposit_l( 0 );
1758 1085180 : hHQ_core->wmold_hb_fx = 32767;
1759 1085180 : move16();
1760 1085180 : hHQ_core->prevflag = 0;
1761 1085180 : move16();
1762 1085180 : hHQ_core->pastpre = 0;
1763 1085180 : move16();
1764 :
1765 1085180 : return;
1766 : }
1767 :
1768 : /*----------------------------------------------------------------------*
1769 : * destroy_cldfb_decoder_fx()
1770 : *
1771 : * Free memory which was allocated in init_decoder()
1772 : *----------------------------------------------------------------------*/
1773 :
1774 3 : void destroy_cldfb_decoder_fx(
1775 : Decoder_State *st_fx /* o: Decoder static variables structure */
1776 : )
1777 : {
1778 :
1779 : /* CLDFB BPF & resampling tools */
1780 :
1781 : /* delete analysis for max. SR 16kHz */
1782 3 : deleteCldfb( &st_fx->cldfbAna );
1783 :
1784 : /* delete analysis BPF for max. SR 16kHz */
1785 3 : deleteCldfb( &st_fx->cldfbBPF );
1786 :
1787 : /* delete synthesis for output SR */
1788 3 : deleteCldfb( &st_fx->cldfbSyn );
1789 :
1790 3 : deleteFdCngDec_fx( &st_fx->hFdCngDec );
1791 :
1792 3 : return;
1793 : }
1794 :
1795 8157 : void destroy_cldfb_decoder_ivas_fx(
1796 : Decoder_State *st /* o : Decoder static variables structure */
1797 : )
1798 : {
1799 : /* CLDFB BPF & resampling tools */
1800 8157 : deleteCldfb_ivas_fx( &st->cldfbAna ); /* delete analysis at max. sampling rate 48kHz */
1801 8157 : deleteCldfb_ivas_fx( &st->cldfbBPF ); /* delete analysis BPF at max. internal sampling rate 16kHz */
1802 8157 : deleteCldfb_ivas_fx( &st->cldfbSyn ); /* delete synthesis at output sampling rate */
1803 8157 : deleteCldfb_ivas_fx( &st->cldfbSynHB );
1804 :
1805 8157 : deleteFdCngDec_fx( &st->hFdCngDec );
1806 :
1807 8157 : return;
1808 : }
|