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 7233 : 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 7233 : error = IVAS_ERR_OK;
848 7233 : move32();
849 :
850 : /*-----------------------------------------------------------------*
851 : * General parameters
852 : *-----------------------------------------------------------------*/
853 :
854 7233 : st_fx->codec_mode = MODE1;
855 7233 : move16();
856 7233 : st_fx->last_codec_mode = MODE1;
857 7233 : move16();
858 7233 : st_fx->core = ACELP_CORE;
859 7233 : move16();
860 7233 : st_fx->L_frame = L_FRAME;
861 7233 : move16();
862 7233 : st_fx->extl = -1;
863 7233 : move16();
864 7233 : st_fx->extl_orig = -1; /* extension layer */
865 7233 : move16();
866 7233 : st_fx->extl_brate_orig = 0; /* extension layer bitrate */
867 7233 : move16();
868 7233 : st_fx->last_bits_frame_nominal = -1;
869 7233 : move16();
870 7233 : st_fx->total_brate = ACELP_8k00;
871 7233 : move16();
872 7233 : st_fx->last_total_brate = -1;
873 7233 : move16();
874 7233 : st_fx->last_total_brate_ber = -1;
875 7233 : move32();
876 7233 : st_fx->core_brate = ACELP_8k00;
877 7233 : move16();
878 7233 : st_fx->ini_frame = 0;
879 7233 : move16();
880 7233 : st_fx->bwidth = NB;
881 7233 : move16();
882 7233 : st_fx->last_bwidth = NB;
883 7233 : move16();
884 7233 : st_fx->extl_brate = 0;
885 7233 : move16();
886 7233 : st_fx->coder_type = GENERIC; /* low-rate mode flag */
887 7233 : move16();
888 7233 : st_fx->last_coder_type = GENERIC;
889 7233 : move16();
890 7233 : st_fx->inactive_coder_type_flag = 0;
891 7233 : move16();
892 7233 : st_fx->last_L_frame = st_fx->L_frame;
893 7233 : move16();
894 7233 : st_fx->last_core_brate = st_fx->core_brate;
895 7233 : move16();
896 7233 : st_fx->last_core = -1;
897 7233 : move16();
898 7233 : st_fx->last_extl = st_fx->extl;
899 7233 : move16();
900 :
901 7233 : st_fx->flag_ACELP16k = set_ACELP_flag( st_fx->element_mode, st_fx->total_brate, st_fx->total_brate, idchan, 0, -1, -1 );
902 7233 : move16();
903 :
904 : /*-----------------------------------------------------------------*
905 : * ACELP core parameters
906 : *-----------------------------------------------------------------*/
907 :
908 : /* LSF initilaizations */
909 7233 : Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M );
910 :
911 7233 : 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 7233 : set16_fx( st_fx->mem_MA_fx, 0, M );
914 :
915 7233 : st_fx->dm_fx.prev_state = 0; /* This corresponds to st_fx->dispMem in FLP */
916 7233 : move16();
917 7233 : st_fx->dm_fx.prev_gain_code = L_deposit_l( 0 );
918 50631 : FOR( i = 2; i < 8; i++ )
919 : {
920 43398 : st_fx->dm_fx.prev_gain_pit[i - 2] = 0;
921 43398 : move16();
922 : }
923 7233 : st_fx->tilt_code_fx = 0;
924 7233 : move16();
925 7233 : st_fx->gc_threshold_fx = 0;
926 7233 : move32();
927 7233 : st_fx->last_good = UNVOICED_CLAS;
928 7233 : move16();
929 7233 : st_fx->clas_dec = UNVOICED_CLAS;
930 7233 : move16();
931 7233 : st_fx->low_rate_mode = 0; /* low-rate mode flag */
932 7233 : move16();
933 7233 : st_fx->last_low_rate_mode = 0; /* low-rate mode flag */
934 7233 : move16();
935 7233 : st_fx->lp_gainp_fx = 0;
936 7233 : move16();
937 7233 : st_fx->lp_gainc_fx = 0;
938 7233 : move16();
939 :
940 7233 : set16_fx( st_fx->old_exc_fx, 0, L_EXC_MEM_DEC );
941 :
942 : /* AVQ pre-quantizer memory */
943 7233 : st_fx->mem_preemp_preQ_fx = 0;
944 7233 : move16();
945 7233 : st_fx->last_nq_preQ = 0;
946 7233 : move16();
947 7233 : st_fx->use_acelp_preq = 0;
948 7233 : move16();
949 :
950 7233 : st_fx->mem_deemph_fx = 0;
951 7233 : move16();
952 :
953 7233 : set16_fx( st_fx->mem_syn1_fx, 0, M );
954 7233 : set16_fx( st_fx->mem_syn2_fx, 0, M );
955 7233 : st_fx->stab_fac_fx = 0;
956 7233 : move16();
957 7233 : st_fx->stab_fac_smooth_fx = 0;
958 7233 : move16();
959 7233 : set16_fx( st_fx->agc_mem_fx, 0, 2 );
960 7233 : set16_fx( st_fx->mem_syn3_fx, 0, M );
961 :
962 7233 : st_fx->stab_fac_smooth_lt_fx = 0;
963 7233 : move16();
964 7233 : st_fx->log_energy_diff_lt_fx = 0;
965 7233 : move32();
966 7233 : st_fx->log_energy_old_fx = 0;
967 7233 : move32();
968 :
969 7233 : Copy( GEWB_Ave_fx, st_fx->lsf_old_fx, M );
970 7233 : lsf2lsp_fx( st_fx->lsf_old_fx, st_fx->lsp_old_fx, M, INT_FS_12k8 );
971 :
972 7233 : st_fx->mid_lsf_int = 0;
973 7233 : move16();
974 7233 : st_fx->safety_net = 0;
975 7233 : move16();
976 :
977 : /* FEC */
978 7233 : st_fx->scaling_flag = 0;
979 7233 : move16();
980 7233 : st_fx->lp_ener_FEC_av = 500000;
981 7233 : move32();
982 7233 : st_fx->lp_ener_FEC_max = 500000;
983 7233 : move32();
984 7233 : st_fx->prev_bfi = 0;
985 7233 : move16();
986 7233 : st_fx->lp_ener_FER_fx = 15360; /*60 in Q8*/
987 7233 : move16();
988 7233 : st_fx->old_enr_LP = 0;
989 7233 : move16();
990 7233 : st_fx->lp_ener_fx = L_deposit_l( 0 );
991 7233 : st_fx->enr_old_fx = L_deposit_l( 0 );
992 7233 : st_fx->bfi_pitch_fx = L_SUBFR_Q6;
993 7233 : move16();
994 7233 : st_fx->bfi_pitch_frame = L_FRAME;
995 7233 : move16();
996 7233 : set16_fx( st_fx->mem_syn_clas_estim_fx, 0, L_SYN_MEM_CLAS_ESTIM );
997 7233 : st_fx->classifier_Q_mem_syn = 0;
998 7233 : move16();
999 7233 : st_fx->last_con_tcx = 0;
1000 7233 : move16();
1001 :
1002 79563 : FOR( i = 0; i < 2 * NB_SUBFR16k; i++ )
1003 : {
1004 72330 : st_fx->old_pitch_buf_fx[i] = L_SUBFR << 16; /*15Q16*/
1005 72330 : move32();
1006 : }
1007 :
1008 7233 : st_fx->upd_cnt = MAX_UPD_CNT;
1009 7233 : move16();
1010 7233 : Copy( GEWB_Ave_fx, st_fx->lsfoldbfi0_fx, M );
1011 7233 : Copy( GEWB_Ave_fx, st_fx->lsfoldbfi1_fx, M );
1012 7233 : Copy( GEWB_Ave_fx, st_fx->lsf_adaptive_mean_fx, M );
1013 :
1014 7233 : st_fx->seed_acelp = RANDOM_INITSEED;
1015 7233 : move16();
1016 7233 : st_fx->seed = RANDOM_INITSEED;
1017 7233 : move16();
1018 7233 : st_fx->nbLostCmpt = 0;
1019 7233 : move16();
1020 7233 : st_fx->decision_hyst = 0;
1021 7233 : move16();
1022 7233 : st_fx->unv_cnt = 0;
1023 7233 : move16();
1024 7233 : st_fx->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/
1025 7233 : st_fx->uv_count = 0;
1026 7233 : move16();
1027 7233 : st_fx->act_count = 3;
1028 7233 : move16();
1029 7233 : Copy( st_fx->lsp_old_fx, st_fx->lspold_s_fx, M );
1030 7233 : st_fx->noimix_seed = RANDOM_INITSEED;
1031 7233 : move16();
1032 7233 : st_fx->min_alpha_fx = 32767; /*1; Q15*/
1033 7233 : move16();
1034 7233 : st_fx->exc_pe_fx = 0;
1035 7233 : move16();
1036 7233 : st_fx->Q_stat_noise = 31;
1037 7233 : move16();
1038 7233 : st_fx->prev_coder_type = GENERIC;
1039 7233 : move16();
1040 :
1041 7233 : st_fx->tilt_wb_fx = 0; // Q11
1042 7233 : move16();
1043 :
1044 7233 : st_fx->last_voice_factor_fx = 0;
1045 7233 : move16();
1046 :
1047 7233 : set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) );
1048 7233 : st_fx->Qprev_synth_buffer_fx = 15;
1049 7233 : move16();
1050 7233 : set32_fx( st_fx->prev_synth_buffer32_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) );
1051 :
1052 7233 : st_fx->old_bfi_cnt = 0;
1053 7233 : move16();
1054 :
1055 : /*-----------------------------------------------------------------*
1056 : * parameters for AC mode (GSC)
1057 : *-----------------------------------------------------------------*/
1058 :
1059 7233 : st_fx->GSC_noisy_speech = 0;
1060 7233 : move16();
1061 7233 : st_fx->GSC_IVAS_mode = 0;
1062 7233 : move16();
1063 7233 : st_fx->Last_GSC_noisy_speech_flag = 0;
1064 7233 : move16();
1065 :
1066 7233 : test();
1067 7233 : test();
1068 7233 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1069 : {
1070 2528 : 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 2528 : GSC_dec_init_ivas_fx( st_fx->hGSCDec );
1076 : }
1077 : ELSE
1078 : {
1079 4705 : st_fx->hGSCDec = NULL;
1080 : }
1081 :
1082 : /*-----------------------------------------------------------------*
1083 : * parameters for fast recovery (WI)
1084 : *-----------------------------------------------------------------*/
1085 :
1086 7233 : test();
1087 7233 : 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 7233 : st_fx->hWIDec = NULL;
1099 : }
1100 :
1101 : /* NB post-filter */
1102 : /*-----------------------------------------------------------------*
1103 : * NB/formant post-filter
1104 : *-----------------------------------------------------------------*/
1105 7233 : test();
1106 7233 : test();
1107 7233 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1108 : {
1109 2528 : 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 2528 : Init_post_filter_fx( st_fx->hPFstat );
1115 2528 : st_fx->psf_lp_noise_fx = 0;
1116 2528 : move16();
1117 : }
1118 : ELSE
1119 : {
1120 4705 : st_fx->hPFstat = NULL;
1121 : }
1122 :
1123 : /*-----------------------------------------------------------------*
1124 : * HF (6-7kHz) (zero) BWE parameters
1125 : *-----------------------------------------------------------------*/
1126 :
1127 7233 : test();
1128 7233 : test();
1129 7233 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1130 : {
1131 2528 : 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 2528 : hf_synth_init_fx( st_fx->hBWE_zero );
1137 2528 : set16_fx( st_fx->hBWE_zero->mem_hp400_fx, 0, 6 );
1138 : }
1139 : ELSE
1140 : {
1141 4705 : st_fx->hBWE_zero = NULL;
1142 : }
1143 :
1144 : /*-----------------------------------------------------------------*
1145 : * LD music post-filter
1146 : *-----------------------------------------------------------------*/
1147 7233 : test();
1148 7233 : test();
1149 7233 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1150 : {
1151 2528 : 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 2528 : music_postfilt_init( st_fx->hMusicPF );
1157 : }
1158 : ELSE
1159 : {
1160 4705 : st_fx->hMusicPF = NULL;
1161 : }
1162 :
1163 : /*-----------------------------------------------------------------*
1164 : * CNG and DTX
1165 : *-----------------------------------------------------------------*/
1166 :
1167 7233 : st_fx->first_CNG = 0;
1168 7233 : move16();
1169 7233 : st_fx->cng_type = -1;
1170 7233 : move16();
1171 7233 : st_fx->last_active_brate = ACELP_7k20;
1172 7233 : move32();
1173 7233 : st_fx->last_CNG_L_frame = L_FRAME;
1174 7233 : move16();
1175 7233 : st_fx->last_vad_fx = 0;
1176 7233 : move16();
1177 7233 : st_fx->active_cnt = 20;
1178 7233 : move16();
1179 :
1180 7233 : test();
1181 7233 : test();
1182 7233 : test();
1183 7233 : 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 ) ) )
1184 : {
1185 97 : IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL )
1186 : {
1187 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
1188 : }
1189 :
1190 97 : td_cng_dec_init_fx( st_fx );
1191 : }
1192 : ELSE
1193 : {
1194 7136 : st_fx->hTdCngDec = NULL;
1195 : }
1196 :
1197 7233 : st_fx->masa_sid_format = 0;
1198 7233 : move16();
1199 7233 : st_fx->Q_stat_noise_ge = GE_SHIFT;
1200 7233 : move16();
1201 :
1202 : /*-----------------------------------------------------------------*
1203 : * HQ core parameters
1204 : *-----------------------------------------------------------------*/
1205 :
1206 7233 : st_fx->prev_old_bfi = 0;
1207 7233 : move16();
1208 :
1209 7233 : set16_fx( st_fx->delay_buf_out_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
1210 7233 : set16_fx( st_fx->previoussynth_fx, 0, L_FRAME48k );
1211 :
1212 7233 : set32_fx( st_fx->delay_buf_out32_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
1213 7233 : set32_fx( st_fx->previoussynth_fx_32, 0, L_FRAME48k );
1214 :
1215 7233 : IF( st_fx->element_mode == EVS_MONO )
1216 : {
1217 0 : set16_fx( st_fx->old_synth_sw_fx, 0, NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) );
1218 : }
1219 :
1220 7233 : test();
1221 7233 : test();
1222 7233 : test();
1223 7233 : 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 ) ) )
1224 : {
1225 7136 : IF( ( st_fx->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL )
1226 : {
1227 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
1228 : }
1229 :
1230 : /* HQ core initialization */
1231 7136 : HQ_core_dec_init_fx( st_fx->hHQ_core );
1232 :
1233 7136 : IF( st_fx->element_mode == EVS_MONO )
1234 : {
1235 : /* HQ NB FEC initialization */
1236 0 : IF( ( st_fx->hHQ_nbfec = (HQ_NBFEC_HANDLE) malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL )
1237 : {
1238 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) );
1239 : }
1240 :
1241 0 : HQ_nbfec_init_fx( st_fx->hHQ_nbfec );
1242 : }
1243 : ELSE
1244 : {
1245 7136 : st_fx->hHQ_nbfec = NULL;
1246 : }
1247 : }
1248 : ELSE
1249 : {
1250 97 : st_fx->hHQ_core = NULL;
1251 97 : st_fx->hHQ_nbfec = NULL;
1252 : }
1253 :
1254 : /*-----------------------------------------------------------------*
1255 : * TBE parameters
1256 : *-----------------------------------------------------------------*/
1257 :
1258 7233 : test();
1259 7233 : IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
1260 : {
1261 2528 : IF( ( st_fx->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL )
1262 : {
1263 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
1264 : }
1265 :
1266 2528 : td_bwe_dec_init_fx( st_fx->hBWE_TD, st_fx->extl, st_fx->output_Fs );
1267 :
1268 2528 : st_fx->prev_Q_bwe_exc = 31;
1269 2528 : move16();
1270 : }
1271 : ELSE
1272 : {
1273 4705 : st_fx->hBWE_TD = NULL;
1274 : }
1275 :
1276 7233 : st_fx->old_bwe_delay = -1; /*Q0*/
1277 7233 : move16();
1278 7233 : set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS ) );
1279 :
1280 : /*-----------------------------------------------------------------*
1281 : * SWB BWE parameters
1282 : *-----------------------------------------------------------------*/
1283 7233 : test();
1284 7233 : IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
1285 : {
1286 2528 : IF( ( st_fx->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL )
1287 : {
1288 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
1289 : }
1290 :
1291 2528 : fd_bwe_dec_init_fx( st_fx->hBWE_FD );
1292 : }
1293 : ELSE
1294 : {
1295 4705 : st_fx->hBWE_FD = NULL;
1296 : }
1297 :
1298 : /*-----------------------------------------------------------------*
1299 : * WB/SWB bandwidth switching parameters
1300 : *-----------------------------------------------------------------*/
1301 :
1302 7233 : st_fx->tilt_swb_fx = 0; // Q24
1303 7233 : move16();
1304 7233 : st_fx->prev_ener_shb_fx = 0; // Q1
1305 7233 : move16();
1306 7233 : st_fx->prev_enerLH_fx = 0; // Q1
1307 7233 : move16();
1308 7233 : st_fx->enerLH_fx = L_deposit_l( 0 );
1309 7233 : st_fx->enerLL_fx = L_deposit_l( 0 );
1310 7233 : st_fx->prev_enerLL_fx = 0;
1311 7233 : move16();
1312 7233 : st_fx->prev_fractive = 0;
1313 7233 : move16();
1314 7233 : st_fx->prev_bws_cnt = 0;
1315 7233 : move16();
1316 7233 : st_fx->bws_cnt = N_WS2N_FRAMES;
1317 7233 : move16();
1318 7233 : st_fx->bws_cnt1 = N_NS2W_FRAMES;
1319 7233 : move16();
1320 7233 : st_fx->attenu_fx = 3277; // Q15
1321 7233 : move16();
1322 7233 : st_fx->last_inner_frame = L_FRAME8k;
1323 7233 : move16();
1324 :
1325 : /*-----------------------------------------------------------------*
1326 : * HR SWB BWE parameters
1327 : *-----------------------------------------------------------------*/
1328 :
1329 7233 : IF( ( st_fx->element_mode == EVS_MONO ) )
1330 : {
1331 0 : IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL )
1332 : {
1333 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) );
1334 : }
1335 :
1336 0 : hr_bwe_dec_init( st_fx->hBWE_FD_HR );
1337 : }
1338 : ELSE
1339 : {
1340 7233 : st_fx->hBWE_FD_HR = NULL;
1341 : }
1342 :
1343 : /*----------------------------------------------------------------------------------*
1344 : * AMR-WB IO mode parameters
1345 : *----------------------------------------------------------------------------------*/
1346 7233 : test();
1347 7233 : IF( st_fx->Opt_AMR_WB || ( st_fx->element_mode == EVS_MONO ) )
1348 : {
1349 0 : IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL )
1350 : {
1351 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
1352 : }
1353 :
1354 : /* AMR-WB IO init */
1355 0 : amr_wb_dec_init_fx( st_fx->hAmrwb_IO );
1356 :
1357 : /* AMR-WB IO HF synth init */
1358 0 : hf_synth_amr_wb_init_fx( st_fx->hAmrwb_IO );
1359 : }
1360 : ELSE
1361 : {
1362 7233 : st_fx->hAmrwb_IO = NULL;
1363 : }
1364 :
1365 : /*-----------------------------------------------------------------*
1366 : * channel-aware mode parameters
1367 : *-----------------------------------------------------------------*/
1368 :
1369 7233 : set16_fx( st_fx->tilt_code_dec_fx, 0, NB_SUBFR16k );
1370 7233 : st_fx->use_partial_copy = 0;
1371 7233 : move16();
1372 7233 : st_fx->prev_use_partial_copy = 0;
1373 7233 : move16();
1374 7233 : st_fx->rf_flag = 0;
1375 7233 : move16();
1376 7233 : st_fx->rf_flag_last = 0;
1377 7233 : move16();
1378 7233 : st_fx->prev_rf_frame_type = 0;
1379 7233 : move16();
1380 7233 : st_fx->next_coder_type = 0;
1381 7233 : move16();
1382 7233 : st_fx->rf_target_bits = 0;
1383 7233 : move16();
1384 7233 : st_fx->rf_indx_nelp_fid = 0;
1385 7233 : move16();
1386 7233 : st_fx->rf_indx_nelp_iG1 = 0;
1387 7233 : move16();
1388 7233 : st_fx->rf_indx_nelp_iG2[0] = 0;
1389 7233 : move16();
1390 7233 : st_fx->rf_indx_nelp_iG2[1] = 0;
1391 7233 : move16();
1392 7233 : st_fx->rf_indx_tbeGainFr = 0;
1393 7233 : move16();
1394 :
1395 : /*-----------------------------------------------------------------*
1396 : * Bass post-filter parameters
1397 : *-----------------------------------------------------------------*/
1398 :
1399 7233 : st_fx->bpf_off = 0;
1400 7233 : move16();
1401 :
1402 7233 : test();
1403 7233 : test();
1404 7233 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1405 : {
1406 2528 : IF( ( st_fx->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL )
1407 : {
1408 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) );
1409 : }
1410 :
1411 2528 : bass_psfilter_init_fx( st_fx->hBPF );
1412 : }
1413 : ELSE
1414 : {
1415 4705 : st_fx->hBPF = NULL;
1416 : }
1417 :
1418 : /*-----------------------------------------------------------------*
1419 : * FD BPF & resampling tools parameters
1420 : *-----------------------------------------------------------------*/
1421 7233 : test();
1422 7233 : test();
1423 7233 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
1424 : {
1425 : /* open analysis for max. SR 48kHz */
1426 2528 : IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
1427 : {
1428 0 : return error;
1429 : }
1430 :
1431 : /* open analysis BPF for max. SR 16kHz */
1432 2528 : IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
1433 : {
1434 0 : return error;
1435 : }
1436 : }
1437 : ELSE
1438 : {
1439 4705 : st_fx->cldfbAna = NULL;
1440 4705 : st_fx->cldfbBPF = NULL;
1441 : }
1442 :
1443 : /* open synthesis for output SR */
1444 7233 : IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbSyn, CLDFB_SYNTHESIS, st_fx->output_Fs, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
1445 : {
1446 0 : return error;
1447 : }
1448 :
1449 7233 : st_fx->cldfbSynHB = NULL;
1450 7233 : st_fx->last_active_bandsToZero_bwdec = 0;
1451 7233 : move16();
1452 7233 : st_fx->perc_bwddec = 0;
1453 7233 : move16();
1454 7233 : st_fx->last_flag_filter_NB = 0;
1455 7233 : move16();
1456 7233 : st_fx->active_frame_cnt_bwddec = 0;
1457 7233 : move16();
1458 7233 : st_fx->total_frame_cnt_bwddec = 0;
1459 7233 : move16();
1460 7233 : set16_fx( st_fx->flag_buffer, 0, 20 );
1461 7233 : st_fx->avg_nrg_LT = 0;
1462 7233 : move32();
1463 :
1464 : /*-----------------------------------------------------------------*
1465 : * Noise gate parameters
1466 : *-----------------------------------------------------------------*/
1467 :
1468 7233 : set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
1469 7233 : st_fx->old_Aq_12_8_fx[0] = ONE_IN_Q12;
1470 7233 : move16();
1471 7233 : st_fx->Ng_ener_ST_fx = -13056; /*-51 IN Q8*/
1472 7233 : move16();
1473 7233 : st_fx->old_Es_pred_fx = 0;
1474 7233 : move16();
1475 7233 : set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
1476 7233 : st_fx->old_Aq_12_8_fx[0] = 4096; /*1 in Q12*/
1477 7233 : move16();
1478 :
1479 : /*-----------------------------------------------------------------*
1480 : * SC-VBR parameters
1481 : *-----------------------------------------------------------------*/
1482 :
1483 7233 : IF( st_fx->element_mode == EVS_MONO )
1484 : {
1485 0 : IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL )
1486 : {
1487 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
1488 : }
1489 :
1490 0 : sc_vbr_dec_init( st_fx->hSC_VBR );
1491 : }
1492 : ELSE
1493 : {
1494 7233 : st_fx->hSC_VBR = NULL;
1495 : }
1496 :
1497 7233 : st_fx->last_ppp_mode_dec = 0;
1498 7233 : move16();
1499 7233 : st_fx->old_ppp_mode = 0;
1500 7233 : move16();
1501 7233 : st_fx->ppp_mode_dec = 0;
1502 7233 : move16();
1503 7233 : st_fx->last_nelp_mode_dec = 0;
1504 7233 : move16();
1505 7233 : st_fx->nelp_mode_dec = 0;
1506 7233 : move16();
1507 7233 : st_fx->prev_gain_pit_dec_fx = 0;
1508 7233 : move16();
1509 7233 : st_fx->prev_tilt_code_dec_fx = 0;
1510 7233 : move16();
1511 7233 : st_fx->vbr_hw_BWE_disable_dec = 0;
1512 7233 : move16();
1513 7233 : st_fx->last_vbr_hw_BWE_disable_dec = 0;
1514 7233 : move16();
1515 :
1516 : /*-----------------------------------------------------------------*
1517 : * TCX core
1518 : *-----------------------------------------------------------------*/
1519 :
1520 : /* TCX-LTP */
1521 7233 : test();
1522 7233 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1523 : {
1524 7136 : IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL )
1525 : {
1526 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) );
1527 : }
1528 : }
1529 : ELSE
1530 : {
1531 97 : st_fx->hTcxLtpDec = NULL;
1532 : }
1533 :
1534 : /* TCX core */
1535 7233 : test();
1536 7233 : IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
1537 : {
1538 7136 : IF( ( st_fx->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL )
1539 : {
1540 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) );
1541 : }
1542 :
1543 7136 : set32_fx( st_fx->hTcxDec->FBTCXdelayBuf_32, 0, 111 );
1544 :
1545 7136 : st_fx->hTcxDec->old_synthFB_fx = st_fx->hTcxDec->synth_history_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_MEM_NS );
1546 7136 : st_fx->hTcxDec->prev_good_synth_fx = st_fx->hTcxDec->old_synthFB_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS );
1547 : }
1548 : ELSE
1549 : {
1550 97 : st_fx->hTcxDec = NULL;
1551 : }
1552 :
1553 : /* TCX config. data structure */
1554 7233 : test();
1555 7233 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1556 : {
1557 7136 : IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
1558 : {
1559 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
1560 : }
1561 : }
1562 : ELSE
1563 : {
1564 97 : st_fx->hTcxCfg = NULL;
1565 : }
1566 :
1567 : /* Tonal MDCT concealment data structure */
1568 7233 : test();
1569 7233 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1570 : {
1571 7136 : IF( ( st_fx->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL )
1572 : {
1573 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) );
1574 : }
1575 : }
1576 : ELSE
1577 : {
1578 97 : st_fx->hTonalMDCTConc = NULL;
1579 : }
1580 :
1581 : /*-----------------------------------------------------------------*
1582 : * IGF
1583 : *-----------------------------------------------------------------*/
1584 :
1585 7233 : test();
1586 7233 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1587 : {
1588 7136 : IF( ( st_fx->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL )
1589 : {
1590 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) );
1591 : }
1592 :
1593 7136 : st_fx->igf = 0;
1594 7136 : move16();
1595 7136 : init_igf_dec( st_fx->hIGFDec );
1596 : }
1597 : ELSE
1598 : {
1599 97 : st_fx->hIGFDec = NULL;
1600 : }
1601 :
1602 : /*-----------------------------------------------------------------*
1603 : * Mode 2 initialization
1604 : *-----------------------------------------------------------------*/
1605 7233 : IF( ( st_fx->element_mode == EVS_MONO ) )
1606 : {
1607 0 : IF( ( st_fx->hPlcInfo = (T_PLCInfo_HANDLE) malloc( sizeof( T_PLCInfo ) ) ) == NULL )
1608 : {
1609 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) );
1610 : }
1611 : }
1612 : ELSE
1613 : {
1614 7233 : st_fx->hPlcInfo = NULL;
1615 : }
1616 :
1617 7233 : IF( st_fx->element_mode == EVS_MONO )
1618 : {
1619 0 : IF( ( st_fx->hTECDec = (TEC_DEC_HANDLE) malloc( sizeof( TEC_DEC_DATA ) ) ) == NULL )
1620 : {
1621 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) );
1622 : }
1623 : }
1624 : ELSE
1625 : {
1626 7233 : st_fx->hTECDec = NULL;
1627 : }
1628 :
1629 :
1630 : /* Init Decoder */
1631 7233 : 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;
1632 7233 : move16();
1633 7233 : move16();
1634 7233 : move16();
1635 7233 : move16();
1636 7233 : move16();
1637 7233 : move16();
1638 7233 : move16();
1639 7233 : move16();
1640 7233 : 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 );
1641 :
1642 : /* PLC mode initialization */
1643 7233 : st_fx->m_decodeMode = DEC_NO_FRAM_LOSS;
1644 7233 : move16();
1645 :
1646 : /* Init bandwidth / frame_type */
1647 7233 : st_fx->m_frame_type = ACTIVE_FRAME;
1648 7233 : move16();
1649 7233 : st_fx->m_old_frame_type = ACTIVE_FRAME;
1650 7233 : move16();
1651 :
1652 7233 : test();
1653 7233 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
1654 : {
1655 2528 : resampleCldfb_ivas_fx( st_fx->cldfbAna, L_mult0( st_fx->L_frame, FRAMES_PER_SEC ) );
1656 2528 : resampleCldfb_ivas_fx( st_fx->cldfbBPF, L_mult0( st_fx->L_frame, FRAMES_PER_SEC ) );
1657 : }
1658 :
1659 : /*-----------------------------------------------------------------*
1660 : * FD-CNG decoder
1661 : *-----------------------------------------------------------------*/
1662 :
1663 7233 : test();
1664 7233 : test();
1665 7233 : test();
1666 7233 : 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 ) )
1667 : {
1668 : /* Create FD_CNG instance */
1669 :
1670 5436 : IF( NE_32( ( error = createFdCngDec_fx( &st_fx->hFdCngDec ) ), IVAS_ERR_OK ) )
1671 : {
1672 0 : return error;
1673 : }
1674 :
1675 : /* Init FD-CNG */
1676 5436 : initFdCngDec_ivas_fx( st_fx, st_fx->cldfbSyn->scale );
1677 : }
1678 : ELSE
1679 : {
1680 1797 : st_fx->hFdCngDec = NULL;
1681 : }
1682 :
1683 7233 : st_fx->cngTDLevel = 0;
1684 7233 : move16();
1685 7233 : st_fx->cngTDLevel_e = 0;
1686 7233 : move16();
1687 7233 : st_fx->lp_noise = -167772160l /*-20.f Q23*/;
1688 7233 : move32();
1689 7233 : st_fx->force_lpd_reset = 0;
1690 7233 : move16();
1691 :
1692 :
1693 : /*-----------------------------------------------------------------*
1694 : * initialzie Q values
1695 : *-----------------------------------------------------------------*/
1696 :
1697 7233 : st_fx->Q_syn2 = 0;
1698 7233 : move16();
1699 7233 : st_fx->Q_exc = 8;
1700 7233 : move16();
1701 7233 : st_fx->prev_Q_exc = 0;
1702 7233 : move16();
1703 7233 : st_fx->Q_syn = 0;
1704 7233 : move16();
1705 7233 : st_fx->prev_Q_syn = 0;
1706 7233 : move16();
1707 :
1708 43398 : FOR( i = 0; i < L_Q_MEM; i++ )
1709 : {
1710 36165 : st_fx->Q_subfr[i] = 8;
1711 36165 : move16();
1712 : }
1713 :
1714 7233 : st_fx->prev_Q_exc_fr = 0;
1715 7233 : move16();
1716 7233 : st_fx->prev_Q_syn_fr = 0;
1717 7233 : move16();
1718 :
1719 : /*-----------------------------------------------------------------*
1720 : * IVAS parameters
1721 : *-----------------------------------------------------------------*/
1722 :
1723 7233 : st_fx->tdm_LRTD_flag = 0; /* LRTD stereo mode flag */
1724 7233 : move16();
1725 7233 : st_fx->cna_dirac_flag = 0; /* CNA in DirAC flag */
1726 7233 : move16();
1727 7233 : st_fx->cng_sba_flag = 0; /* CNG in SBA flag */
1728 7233 : move16();
1729 7233 : st_fx->cng_ism_flag = 0;
1730 7233 : move16();
1731 :
1732 7233 : return error;
1733 : }
1734 :
1735 :
1736 : /*----------------------------------------------------------------------*
1737 : * reset_preecho_dec()
1738 : *
1739 : * Initialization of static variables for pre-echo
1740 : *----------------------------------------------------------------------*/
1741 1030204 : void reset_preecho_dec_fx(
1742 : HQ_DEC_HANDLE hHQ_core /* i/o: HQ core data handle */
1743 : )
1744 : {
1745 1030204 : hHQ_core->memfilt_lb_fx = 0;
1746 1030204 : move16();
1747 1030204 : hHQ_core->mean_prev_hb_fx = L_deposit_l( 0 );
1748 1030204 : hHQ_core->smoothmem_fx = 32767;
1749 1030204 : move16();
1750 1030204 : hHQ_core->mean_prev_fx = L_deposit_l( 0 );
1751 1030204 : hHQ_core->mean_prev_nc_fx = L_deposit_l( 0 );
1752 1030204 : hHQ_core->wmold_hb_fx = 32767;
1753 1030204 : move16();
1754 1030204 : hHQ_core->prevflag = 0;
1755 1030204 : move16();
1756 1030204 : hHQ_core->pastpre = 0;
1757 1030204 : move16();
1758 :
1759 1030204 : return;
1760 : }
1761 :
1762 : /*----------------------------------------------------------------------*
1763 : * destroy_cldfb_decoder_fx()
1764 : *
1765 : * Free memory which was allocated in init_decoder()
1766 : *----------------------------------------------------------------------*/
1767 :
1768 3 : void destroy_cldfb_decoder_fx(
1769 : Decoder_State *st_fx /* o: Decoder static variables structure */
1770 : )
1771 : {
1772 :
1773 : /* CLDFB BPF & resampling tools */
1774 :
1775 : /* delete analysis for max. SR 16kHz */
1776 3 : deleteCldfb( &st_fx->cldfbAna );
1777 :
1778 : /* delete analysis BPF for max. SR 16kHz */
1779 3 : deleteCldfb( &st_fx->cldfbBPF );
1780 :
1781 : /* delete synthesis for output SR */
1782 3 : deleteCldfb( &st_fx->cldfbSyn );
1783 :
1784 3 : deleteFdCngDec_fx( &st_fx->hFdCngDec );
1785 :
1786 3 : return;
1787 : }
1788 :
1789 7233 : void destroy_cldfb_decoder_ivas_fx(
1790 : Decoder_State *st /* o : Decoder static variables structure */
1791 : )
1792 : {
1793 : /* CLDFB BPF & resampling tools */
1794 7233 : deleteCldfb_ivas_fx( &st->cldfbAna ); /* delete analysis at max. sampling rate 48kHz */
1795 7233 : deleteCldfb_ivas_fx( &st->cldfbBPF ); /* delete analysis BPF at max. internal sampling rate 16kHz */
1796 7233 : deleteCldfb_ivas_fx( &st->cldfbSyn ); /* delete synthesis at output sampling rate */
1797 7233 : deleteCldfb_ivas_fx( &st->cldfbSynHB );
1798 :
1799 7233 : deleteFdCngDec_fx( &st->hFdCngDec );
1800 :
1801 7233 : return;
1802 : }
|