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 "cnst.h" /* Common constants */
7 : #include "rom_com_fx.h" /* Static table prototypes */
8 : #include "rom_com.h" /* Static table prototypes */
9 : // #include "prot_fx.h" /* Function prototypes */
10 : #include "stl.h"
11 : #include "ivas_cnst.h"
12 : #include "ivas_error.h"
13 : #include "prot_fx.h" /* Function prototypes */
14 : #include "prot_fx_enc.h" /* Function prototypes */
15 : #include "ivas_prot_fx.h"
16 :
17 :
18 : /*-----------------------------------------------------------------------*
19 : * init_encoder_fx()
20 : *
21 : * Initialization of state variables
22 : *-----------------------------------------------------------------------*/
23 :
24 3 : ivas_error init_encoder_fx(
25 : Encoder_State *st_fx, /* i/o: Encoder static variables structure */
26 : const int16_t var_SID_rate_flag, /* i : flag for variable SID update rate */
27 : const int16_t interval_SID /* i : interval for SID update */
28 : )
29 : {
30 : Word16 i;
31 : Word32 L_tmp;
32 :
33 :
34 3 : Word16 idchan = 0; /* i : channel ID */
35 3 : Word16 vad_only_flag = 0; /* i : channel ID */
36 3 : move16();
37 3 : move16();
38 3 : ISM_MODE ism_mode = ISM_MODE_NONE;
39 : ivas_error error;
40 :
41 3 : error = IVAS_ERR_OK;
42 :
43 : /*-----------------------------------------------------------------*
44 : * General signal buffers
45 : *-----------------------------------------------------------------*/
46 3 : IF( !vad_only_flag )
47 : {
48 3 : IF( ( st_fx->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL )
49 : {
50 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Signal buffers\n" ) );
51 : }
52 :
53 3 : st_fx->Bin_E_old_fx = st_fx->hSignalBuf->Bin_E_old_fx;
54 3 : st_fx->mem_decim_fx = st_fx->hSignalBuf->mem_decim_fx;
55 3 : st_fx->mem_decim16k_fx = st_fx->hSignalBuf->mem_decim16k_fx;
56 3 : st_fx->old_inp_12k8_fx = st_fx->hSignalBuf->old_inp_12k8_fx;
57 3 : st_fx->old_inp_16k_fx = st_fx->hSignalBuf->old_inp_16k_fx;
58 3 : st_fx->buf_speech_enc_pe = st_fx->hSignalBuf->buf_speech_enc_pe;
59 3 : st_fx->buf_synth = st_fx->hSignalBuf->buf_synth;
60 3 : st_fx->buf_speech_enc = st_fx->hSignalBuf->buf_speech_enc;
61 3 : st_fx->buf_wspeech_enc = st_fx->hSignalBuf->buf_wspeech_enc;
62 :
63 : /* initializations */
64 3 : set16_fx( st_fx->old_inp_12k8_fx, 0, L_INP_MEM ); /* memory of input signal at 12.8kHz */
65 3 : set16_fx( st_fx->old_inp_16k_fx, 0, L_INP_MEM );
66 3 : set16_fx( st_fx->mem_decim16k_fx, 0, 2 * L_FILT_MAX );
67 3 : set16_fx( st_fx->mem_decim_fx, 0, 2 * L_FILT_MAX );
68 3 : set32_fx( st_fx->Bin_E_old_fx, 0, L_FFT / 2 );
69 3 : st_fx->q_Bin_E_old = Q31;
70 3 : move16();
71 :
72 3 : st_fx->input_buff_fx = st_fx->hSignalBuf->input_buff;
73 3 : set16_fx( st_fx->input_buff_fx, 0, L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) );
74 3 : st_fx->old_input_signal_fx = st_fx->input_buff_fx;
75 3 : IF( EQ_16( st_fx->element_mode, EVS_MONO ) )
76 : {
77 3 : st_fx->input_fx = st_fx->input_buff_fx + st_fx->input_Fs / FRAMES_PER_SEC + NS2SA_FX2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS );
78 : }
79 : ELSE
80 : {
81 0 : st_fx->input_fx = st_fx->input_buff_fx + st_fx->input_Fs / FRAMES_PER_SEC;
82 : }
83 : }
84 : ELSE
85 : {
86 0 : st_fx->hSignalBuf = NULL;
87 0 : st_fx->Bin_E_old_fx = NULL;
88 0 : st_fx->mem_decim_fx = NULL;
89 0 : st_fx->mem_decim16k_fx = NULL;
90 0 : st_fx->old_inp_12k8_fx = NULL;
91 0 : st_fx->old_inp_16k_fx = NULL;
92 0 : st_fx->buf_speech_enc_pe = NULL;
93 0 : st_fx->buf_synth = NULL;
94 0 : st_fx->buf_speech_enc = NULL;
95 0 : st_fx->buf_wspeech_enc = NULL;
96 0 : st_fx->input_buff_fx = NULL;
97 : }
98 :
99 : /*-----------------------------------------------------------------*
100 : * ACELP core parameters
101 : *-----------------------------------------------------------------*/
102 3 : st_fx->last_core = -1;
103 3 : move16();
104 :
105 3 : if ( st_fx->Opt_AMR_WB )
106 : {
107 0 : st_fx->last_core = AMR_WB_CORE;
108 0 : move16();
109 : }
110 :
111 3 : st_fx->L_frame = L_FRAME;
112 3 : move16();
113 3 : st_fx->last_coder_type = GENERIC;
114 3 : move16();
115 3 : st_fx->last_total_brate = st_fx->total_brate;
116 3 : move32();
117 3 : st_fx->last_total_brate_cng = -1;
118 3 : move32();
119 3 : st_fx->last_core_brate = st_fx->total_brate;
120 3 : move32();
121 3 : st_fx->extl = -1;
122 3 : move16();
123 3 : st_fx->last_extl = -1;
124 3 : move16();
125 3 : st_fx->last_L_frame = L_FRAME;
126 3 : move16();
127 3 : st_fx->rate_switching_reset = 0;
128 3 : move16();
129 3 : st_fx->rate_switching_reset_16kHz = 0;
130 3 : move16();
131 :
132 : /*-----------------------------------------------------------------*
133 : * Bitstream
134 : *-----------------------------------------------------------------*/
135 :
136 3 : IF( !vad_only_flag )
137 : {
138 3 : IF( ( st_fx->hBstr = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL )
139 : {
140 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) );
141 : }
142 : }
143 : ELSE
144 : {
145 0 : st_fx->hBstr = NULL;
146 : }
147 :
148 :
149 3 : Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M );
150 3 : Copy( GEWB_Ave_fx, st_fx->lsfoldbfi0_fx, M );
151 3 : Copy( GEWB_Ave_fx, st_fx->lsfoldbfi1_fx, M );
152 3 : Copy( GEWB_Ave_fx, st_fx->lsf_adaptive_mean_fx, M );
153 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 );
154 3 : st_fx->next_force_safety_net = 0;
155 3 : move16();
156 3 : st_fx->pstreaklen = 0;
157 3 : move16();
158 3 : st_fx->streaklimit_fx = 32767;
159 3 : move16(); /*1;//Q15 */
160 3 : set16_fx( st_fx->mem_MA_fx, 0, M );
161 :
162 3 : init_gp_clip_fx( st_fx->clip_var_fx );
163 3 : pitch_ol_init_fx( &st_fx->old_thres_fx, &st_fx->old_pitch, &st_fx->delta_pit, &st_fx->old_corr_fx );
164 :
165 : /*-----------------------------------------------------------------*
166 : * AMR-WB IO initialization
167 : *-----------------------------------------------------------------*/
168 3 : test();
169 3 : IF( st_fx->Opt_AMR_WB || EQ_16( st_fx->element_mode, EVS_MONO ) )
170 : {
171 3 : IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL )
172 : {
173 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
174 : }
175 :
176 3 : amr_wb_enc_init_fx( st_fx->hAmrwb_IO );
177 : }
178 : ELSE
179 : {
180 0 : st_fx->hAmrwb_IO = NULL;
181 : }
182 3 : st_fx->clas = UNVOICED_CLAS;
183 3 : move16();
184 3 : set16_fx( st_fx->old_wsp2_fx, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM );
185 3 : set16_fx( st_fx->old_wsp_fx, 0, L_WSP_MEM );
186 3 : st_fx->mem_deemph_fx = 0;
187 3 : move16();
188 3 : st_fx->mem_preemph_fx = 0;
189 3 : move16();
190 3 : st_fx->mem_preemph16k_fx = 0;
191 3 : move16();
192 3 : st_fx->mem_preemph_enc = 0;
193 3 : move16();
194 :
195 : /* AVQ pre-quantizer memory */
196 3 : st_fx->mem_preemp_preQ_fx = 0;
197 3 : move16();
198 3 : st_fx->mem_deemp_preQ_fx = 0;
199 3 : move16();
200 3 : st_fx->last_nq_preQ = 0;
201 3 : move16();
202 3 : st_fx->use_acelp_preq = 0;
203 3 : move16();
204 :
205 : /* (Decimated) Weighted Speech Memory */
206 3 : st_fx->mem_wsp_enc = 0;
207 3 : move16();
208 :
209 3 : st_fx->mem_wsp_fx = 0;
210 3 : move16();
211 3 : st_fx->mem_wsp_q = 0;
212 3 : move16();
213 3 : set32_fx( st_fx->Bin_E_fx, 0, L_FFT );
214 3 : st_fx->q_Bin_E = Q31;
215 3 : move16();
216 3 : set16_fx( st_fx->mem_decim2_fx, 0, 3 );
217 3 : set16_fx( st_fx->lgBin_E_fx, 0, L_FFT / 2 );
218 :
219 3 : st_fx->ini_frame = 0;
220 3 : move16();
221 3 : st_fx->ee_old_fx = 640;
222 3 : move32(); /*chk //10 in Q6 */
223 3 : st_fx->Nb_ACELP_frames = 0;
224 3 : move16();
225 3 : st_fx->audio_frame_cnt = AUDIO_COUNTER_INI;
226 3 : move16(); /* Initializatin of the audio frame counter mildly into the audio mode */
227 :
228 : /* adaptive lag window memory */
229 3 : st_fx->old_pitch_la = 0;
230 3 : move16();
231 3 : st_fx->old_voicing_la = 0;
232 3 : move16();
233 3 : set32_fx( st_fx->mem_hp20_in_fx, 0, 5 );
234 :
235 3 : st_fx->old_hpfilt_in_fx = 0;
236 3 : move16();
237 3 : st_fx->old_hpfilt_out_fx = 0;
238 3 : move16();
239 3 : st_fx->EnergyLT_fx = 0;
240 3 : move32();
241 3 : st_fx->prev_Q_new = 0;
242 3 : move16();
243 :
244 :
245 3 : IF( EQ_32( st_fx->input_Fs, 8000 ) )
246 : {
247 0 : st_fx->min_band = 1;
248 0 : move16();
249 0 : st_fx->max_band = 16;
250 0 : move16();
251 : }
252 : ELSE
253 : {
254 3 : st_fx->min_band = 0;
255 3 : move16();
256 3 : st_fx->max_band = 19;
257 3 : move16();
258 : }
259 3 : IF( st_fx->Opt_AMR_WB )
260 : {
261 0 : Copy( mean_isf_amr_wb_fx, st_fx->lsf_old_fx, M );
262 0 : E_LPC_isf_isp_conversion( st_fx->lsf_old_fx, st_fx->lsp_old1_fx, M );
263 : }
264 : ELSE
265 : {
266 3 : Copy( GEWB_Ave_fx, st_fx->lsf_old_fx, M );
267 3 : lsf2lsp_fx( st_fx->lsf_old_fx, st_fx->lsp_old1_fx, M, INT_FS_FX );
268 : }
269 :
270 3 : Copy( st_fx->lsf_old_fx, st_fx->lsf_old1_fx, M );
271 3 : Copy( st_fx->lsp_old1_fx, st_fx->lsp_old_fx, M );
272 3 : Copy( st_fx->lsp_old_fx, st_fx->lsp_old16k_fx, M );
273 3 : Copy( st_fx->lsp_old_fx, st_fx->lspold_enc_fx, M );
274 :
275 3 : st_fx->stab_fac_fx = 0;
276 3 : move16();
277 : /* Bass post-filter memories - encoder side of MODE2 */
278 3 : st_fx->bpf_off = 0;
279 3 : move16();
280 :
281 : /* TC mode */
282 3 : st_fx->tc_cnt = 0;
283 3 : move16();
284 3 : st_fx->mCb1_fx = 0;
285 3 : move16();
286 :
287 : /* AC mode */
288 :
289 : /*-----------------------------------------------------------------*
290 : * parameters for AC coder type (GSC)
291 : *-----------------------------------------------------------------*/
292 :
293 : // st_fx->GSC_noisy_speech = 0;
294 3 : st_fx->GSC_IVAS_mode = 0;
295 3 : move16();
296 3 : test();
297 3 : test();
298 3 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
299 : {
300 3 : IF( ( st_fx->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL )
301 : {
302 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) );
303 : }
304 :
305 3 : GSC_enc_init_fx( st_fx->hGSCEnc );
306 : }
307 : ELSE
308 : {
309 0 : st_fx->hGSCEnc = NULL;
310 : }
311 :
312 3 : st_fx->last_ener_fx = 0;
313 3 : move16();
314 :
315 3 : st_fx->old_dE1_fx = 0;
316 3 : move16();
317 3 : st_fx->old_ind_deltaMax = 0;
318 3 : move32();
319 3 : set32_fx( st_fx->old_enr_ssf_fx, 0, 2 * NB_SSF );
320 3 : st_fx->spike_hyst = -1;
321 3 : move16();
322 3 : st_fx->music_hysteresis_fx = 0;
323 3 : move16(); /* Counter of frames after AUDIO frame to prevent UC */
324 3 : st_fx->last_harm_flag_acelp = 0;
325 3 : move16();
326 3 : st_fx->GSC_noisy_speech = 0;
327 3 : move16();
328 :
329 : /* speech/music classifier */
330 3 : st_fx->Last_pulse_pos = 0;
331 3 : move16();
332 :
333 3 : st_fx->last_vad_spa_fx = 0;
334 3 : move16();
335 :
336 : /*-----------------------------------------------------------------*
337 : * VAD
338 : *-----------------------------------------------------------------*/
339 :
340 3 : st_fx->vad_flag = 1;
341 3 : st_fx->localVAD = 0;
342 3 : move16();
343 3 : move16();
344 3 : test();
345 3 : test();
346 3 : test();
347 3 : test();
348 3 : IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || st_fx->element_mode == EVS_MONO ) && ( !vad_only_flag ) )
349 : {
350 3 : if ( ( st_fx->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL )
351 : {
352 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) );
353 : }
354 :
355 3 : wb_vad_init_fx( st_fx->hVAD );
356 : }
357 : ELSE
358 : {
359 0 : st_fx->hVAD = NULL;
360 : }
361 :
362 3 : st_fx->Pos_relE_cnt = 5120;
363 3 : move16(); /*20.0f*/
364 :
365 : /* CLDFB-based VAD */
366 3 : IF( st_fx->element_mode == EVS_MONO )
367 : {
368 3 : if ( ( st_fx->hVAD_CLDFB = (VAD_CLDFB_HANDLE) malloc( sizeof( T_CldfbVadState ) ) ) == NULL )
369 : {
370 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB VAD\n" ) );
371 : }
372 :
373 3 : vad_init_fx( st_fx->hVAD_CLDFB );
374 : }
375 : ELSE
376 : {
377 0 : st_fx->hVAD_CLDFB = NULL;
378 : }
379 :
380 :
381 : /*-----------------------------------------------------------------*
382 : * Noise estimator
383 : *-----------------------------------------------------------------*/
384 :
385 3 : test();
386 3 : test();
387 3 : IF( /*idchan == 0 ||*/ EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || st_fx->element_mode == EVS_MONO )
388 : {
389 3 : if ( ( st_fx->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL )
390 : {
391 0 : return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" );
392 : }
393 3 : noise_est_init_fx( st_fx->hNoiseEst );
394 : }
395 : ELSE
396 : {
397 0 : st_fx->hNoiseEst = NULL;
398 : }
399 :
400 : /*-----------------------------------------------------------------*
401 : * Speech/music classifier
402 : *-----------------------------------------------------------------*/
403 3 : test();
404 3 : test();
405 3 : test();
406 3 : IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || st_fx->element_mode == EVS_MONO )
407 : {
408 3 : IF( ( st_fx->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL )
409 : {
410 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) );
411 : }
412 :
413 3 : speech_music_clas_init_fx( st_fx->hSpMusClas );
414 :
415 3 : st_fx->sp_aud_decision0 = 0;
416 3 : st_fx->sp_aud_decision1 = 0;
417 3 : st_fx->sp_aud_decision2 = 0;
418 3 : move16();
419 3 : move16();
420 3 : move16();
421 : }
422 : ELSE
423 : {
424 0 : st_fx->hSpMusClas = NULL;
425 : }
426 :
427 3 : st_fx->bckr_tilt_lt = 0;
428 3 : move32();
429 :
430 : /* WB, SWB and FB bandwidth detector */
431 3 : st_fx->lt_mean_NB_fx = 0;
432 3 : move16();
433 3 : st_fx->lt_mean_WB_fx = 0;
434 3 : move16();
435 3 : st_fx->lt_mean_SWB_fx = 0;
436 3 : move16();
437 3 : st_fx->count_WB = BWD_COUNT_MAX;
438 3 : move16();
439 3 : st_fx->count_SWB = BWD_COUNT_MAX;
440 3 : move16();
441 3 : st_fx->count_FB = BWD_COUNT_MAX;
442 3 : move16();
443 3 : st_fx->bwidth = st_fx->max_bwidth;
444 3 : move16();
445 3 : st_fx->last_input_bwidth = st_fx->bwidth;
446 3 : move16();
447 3 : st_fx->last_bwidth = st_fx->bwidth;
448 3 : move16();
449 3 : st_fx->last_bwidth_cng = st_fx->bwidth;
450 3 : move16();
451 :
452 :
453 3 : move16();
454 3 : st_fx->coder_type_raw = VOICED;
455 3 : st_fx->last_coder_type_raw = st_fx->coder_type_raw;
456 3 : move16();
457 3 : st_fx->is_ism_format = 0;
458 3 : move16();
459 3 : if ( NE_16( ism_mode, ISM_MODE_NONE ) )
460 : {
461 0 : st_fx->is_ism_format = 1;
462 0 : move16();
463 : }
464 : /* Stationary noise UV modification */
465 3 : st_fx->ge_sm_fx = 640;
466 3 : move32(); /*Q(GE_SHIFT) */
467 3 : st_fx->uv_count = 0;
468 3 : move16();
469 3 : st_fx->act_count = 3;
470 3 : move16();
471 3 : Copy( st_fx->lsp_old_fx, st_fx->lspold_s_fx, M );
472 3 : st_fx->noimix_seed = RANDOM_INITSEED;
473 3 : move16();
474 3 : st_fx->min_alpha_fx = 1;
475 3 : move16();
476 3 : st_fx->exc_pe_fx = 0;
477 3 : move16();
478 :
479 : /*-----------------------------------------------------------------*
480 : * DTX
481 : *-----------------------------------------------------------------*/
482 :
483 3 : st_fx->lp_speech_fx = 11520;
484 3 : move16(); /*Q8 (45.0) */ /* Initialize the long-term active speech level in dB */
485 3 : st_fx->lp_noise_fx = 0;
486 3 : move16();
487 :
488 3 : test();
489 3 : test();
490 3 : IF( ( ( idchan == 0 && st_fx->Opt_DTX_ON ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) || ( EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) && st_fx->Opt_DTX_ON ) )
491 : {
492 3 : if ( ( st_fx->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL )
493 : {
494 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) );
495 : }
496 3 : dtx_enc_init_fx( st_fx, var_SID_rate_flag, interval_SID );
497 : }
498 : ELSE
499 : {
500 0 : st_fx->hDtxEnc = NULL;
501 : }
502 :
503 3 : st_fx->fd_cng_reset_flag = 0;
504 3 : move16();
505 :
506 3 : IF( st_fx->Opt_DTX_ON )
507 : {
508 0 : move16();
509 : }
510 :
511 3 : st_fx->cng_type = -1;
512 3 : move16();
513 :
514 :
515 : /*-----------------------------------------------------------------*
516 : * LP-CNG
517 : *-----------------------------------------------------------------*/
518 :
519 3 : test();
520 3 : test();
521 3 : test();
522 3 : test();
523 3 : test();
524 3 : IF( ( ( idchan == 0 && st_fx->Opt_DTX_ON && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) && !( EQ_16( ism_mode, ISM_MODE_PARAM ) || EQ_16( ism_mode, ISM_MODE_DISC ) ) )
525 : {
526 3 : IF( ( st_fx->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL )
527 : {
528 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
529 : }
530 :
531 3 : td_cng_enc_init_fx( st_fx->hTdCngEnc, st_fx->Opt_DTX_ON, st_fx->max_bwidth );
532 : }
533 : ELSE
534 : {
535 0 : st_fx->hTdCngEnc = NULL;
536 : }
537 :
538 :
539 : /*-----------------------------------------------------------------*
540 : * ACELP LPDmem
541 : *-----------------------------------------------------------------*/
542 :
543 3 : test();
544 3 : test();
545 3 : IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
546 : {
547 3 : IF( ( st_fx->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL )
548 : {
549 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) );
550 : }
551 :
552 3 : LPDmem_enc_init_fx( st_fx->hLPDmem );
553 : }
554 : ELSE
555 : {
556 0 : st_fx->hLPDmem = NULL;
557 : }
558 :
559 : /* FEC */
560 3 : st_fx->last_clas = UNVOICED_CLAS;
561 3 : move16();
562 :
563 33 : FOR( i = 0; i < 2 * NB_SUBFR16k; i++ )
564 : {
565 30 : st_fx->old_pitch_buf_fx[i] = L_SUBFR_Q6;
566 30 : move16();
567 : }
568 3 : st_fx->old_Es_pred_fx = 0;
569 3 : move16();
570 3 : set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
571 3 : st_fx->old_Aq_12_8_fx[0] = 4096;
572 3 : move16();
573 :
574 : /*-----------------------------------------------------------------*
575 : * CLDFB Analysis
576 : *-----------------------------------------------------------------*/
577 :
578 : /* open analysis for input SR */
579 3 : if ( ( error = openCldfb( &st_fx->cldfbAnaEnc, CLDFB_ANALYSIS, CLDFB_getNumChannels( st_fx->input_Fs ), st_fx->input_frame_fx ) ) != IVAS_ERR_OK )
580 : {
581 0 : return error;
582 : }
583 :
584 3 : if ( ( error = openCldfb( &st_fx->cldfbSynTd, CLDFB_SYNTHESIS, CLDFB_getNumChannels( 16000 ), L_FRAME16k ) ) != IVAS_ERR_OK )
585 : {
586 0 : return error;
587 : }
588 :
589 3 : st_fx->energyCoreLookahead_Fx = 0;
590 3 : move32();
591 3 : st_fx->sf_energyCoreLookahead_Fx = 0;
592 3 : move16();
593 :
594 : /* stable short pitch detection */
595 3 : st_fx->voicing0_sm_fx = 0;
596 3 : move16();
597 3 : st_fx->voicing_sm_fx = 0;
598 3 : move16();
599 3 : st_fx->LF_EnergyRatio_sm_fx = 128;
600 3 : move16();
601 3 : st_fx->predecision_flag = 0;
602 3 : move16();
603 3 : st_fx->diff_sm_fx = 0;
604 3 : move32();
605 3 : st_fx->energy_sm_fx = 0;
606 3 : move32();
607 :
608 : /*-----------------------------------------------------------------*
609 : * SC-VBR parameters
610 : *-----------------------------------------------------------------*/
611 3 : test();
612 3 : IF( st_fx->Opt_SC_VBR || st_fx->element_mode == EVS_MONO )
613 : {
614 3 : IF( ( st_fx->hSC_VBR = (SC_VBR_ENC_HANDLE) malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL )
615 : {
616 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
617 : }
618 :
619 3 : sc_vbr_enc_init_fx( st_fx->hSC_VBR );
620 : }
621 : ELSE
622 : {
623 0 : st_fx->hSC_VBR = NULL;
624 : }
625 : /* PLC encoder */
626 3 : IF( st_fx->element_mode == EVS_MONO )
627 : {
628 3 : IF( ( st_fx->hPlcExt = (PLC_ENC_EVS_HANDLE) malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL )
629 : {
630 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hPlcExt\n" ) );
631 : }
632 : }
633 : ELSE
634 : {
635 0 : st_fx->hPlcExt = NULL;
636 : }
637 : /*-----------------------------------------------------------------*
638 : * Temporal Envelope Coding
639 : *-----------------------------------------------------------------*/
640 :
641 3 : IF( st_fx->element_mode == EVS_MONO )
642 : {
643 3 : IF( ( st_fx->hTECEnc = (TEC_ENC_HANDLE) malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL )
644 : {
645 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) );
646 : }
647 : }
648 : ELSE
649 : {
650 0 : st_fx->hTECEnc = NULL;
651 : }
652 :
653 : /*-----------------------------------------------------------------*
654 : * SWB BWE parameters
655 : *-----------------------------------------------------------------*/
656 3 : IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
657 : {
658 3 : IF( ( st_fx->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL )
659 : {
660 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
661 : }
662 :
663 3 : fd_bwe_enc_init_fx( st_fx->hBWE_FD );
664 : }
665 : ELSE
666 : {
667 0 : st_fx->hBWE_FD = NULL;
668 : }
669 :
670 3 : st_fx->prev_Q_shb = 0;
671 3 : move16();
672 3 : st_fx->last_Opt_SC_VBR = 0;
673 3 : move16();
674 :
675 : /*-----------------------------------------------------------------*
676 : * TBE parameters
677 : *-----------------------------------------------------------------*/
678 :
679 3 : IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
680 : {
681 3 : IF( ( st_fx->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL )
682 : {
683 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
684 : }
685 :
686 : // IF ((error = openCldfb(&st_fx->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS)) != IVAS_ERR_OK)
687 : //{
688 : // return error;
689 : // }
690 :
691 3 : InitSWBencBuffer_fx( st_fx /*st_fx->hBWE_TD*/ );
692 3 : ResetSHBbuffer_Enc_fx( st_fx /*st_fx->hBWE_TD*/ );
693 : }
694 : ELSE
695 : {
696 0 : st_fx->hBWE_TD = NULL;
697 : // st_fx->cldfbSynTd = NULL;
698 : }
699 :
700 3 : test();
701 3 : IF( st_fx->Opt_RF_ON || st_fx->element_mode == EVS_MONO )
702 : {
703 3 : IF( ( st_fx->hRF = (RF_ENC_HANDLE) malloc( sizeof( RF_ENC_DATA ) ) ) == NULL )
704 : {
705 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for RF\n" ) );
706 : }
707 :
708 : /* initialize RF indice buffers */
709 3 : reset_rf_indices_fx( st_fx /*->hRF, st_fx->L_frame, &st->rf_target_bits_write*/ );
710 : }
711 : ELSE
712 : {
713 0 : st_fx->hRF = NULL;
714 : }
715 :
716 :
717 : /*-----------------------------------------------------------------*
718 : * HQ core parameters
719 : *-----------------------------------------------------------------*/
720 :
721 3 : st_fx->input_fx = st_fx->input_buff_fx + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS );
722 3 : set16_fx( st_fx->input_buff_fx + L_FRAME48k, 0, L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) );
723 3 : st_fx->old_input_signal_fx = st_fx->input_fx - add( NS2SA_FX2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS ), st_fx->input_frame_fx );
724 :
725 :
726 3 : st_fx->Energy_Old_fx = 0;
727 3 : move16();
728 3 : st_fx->Q_old_wtda = 15;
729 3 : move16();
730 3 : st_fx->EnergyLT_fx = 1;
731 3 : move32();
732 3 : st_fx->EnergyLT_fx_exp = 30;
733 3 : move16(); /* Set to a High Exponent so it is 1^-30 */
734 3 : st_fx->TransientHangOver = 0;
735 3 : move16();
736 :
737 : /*-----------------------------------------------------------------*
738 : * TCX core
739 : *-----------------------------------------------------------------*/
740 :
741 3 : test();
742 3 : IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
743 : {
744 3 : IF( ( st_fx->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL )
745 : {
746 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) );
747 : }
748 :
749 : /* Share the memories for 2xTCX10/4xTCX5 and for TCX20 */
750 : /*st_fx->hTcxEnc->spectrum[0] = st_fx->hTcxEnc->spectrum_long;
751 : st_fx->hTcxEnc->spectrum[1] = st_fx->hTcxEnc->spectrum_long + N_TCX10_MAX;*/
752 :
753 3 : st_fx->hTcxEnc->spectrum_fx[0] = st_fx->hTcxEnc->spectrum_long_fx;
754 3 : st_fx->hTcxEnc->spectrum_fx[1] = st_fx->hTcxEnc->spectrum_long_fx + N_TCX10_MAX;
755 :
756 3 : set16_fx( st_fx->hTcxEnc->old_out_fx, 0, L_FRAME32k );
757 3 : st_fx->hTcxEnc->Q_old_out = 0;
758 3 : move16();
759 : /* MDCT selector */
760 3 : MDCT_selector_reset_fx( st_fx->hTcxEnc );
761 3 : st_fx->hTcxEnc->Q_old_out = 0;
762 3 : move16();
763 :
764 : /* MDCT classifier */
765 3 : MDCT_classifier_reset_fx( st_fx->hTcxEnc );
766 :
767 3 : IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
768 : {
769 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
770 : }
771 : }
772 : ELSE
773 : {
774 0 : st_fx->hTcxEnc = NULL;
775 : // st_fx->hTcxCfg = NULL;
776 : }
777 : /*-----------------------------------------------------------------*
778 : * HQ core parameters
779 : *-----------------------------------------------------------------*/
780 :
781 3 : test();
782 3 : test();
783 3 : IF( NE_16( st_fx->element_mode, IVAS_CPE_TD ) && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) && idchan == 0 )
784 : {
785 3 : IF( ( st_fx->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL )
786 : {
787 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
788 : }
789 :
790 3 : HQ_core_enc_init_fx( st_fx->hHQ_core );
791 : }
792 : ELSE
793 : {
794 0 : st_fx->hHQ_core = NULL;
795 : }
796 :
797 3 : st_fx->last_enerBuffer_exp = 0;
798 3 : move16();
799 :
800 : /*-----------------------------------------------------------------*
801 : * Channel-aware mode
802 : *-----------------------------------------------------------------*/
803 :
804 :
805 3 : test();
806 3 : test();
807 3 : test();
808 3 : IF( st_fx->Opt_RF_ON == 0 || ( NE_16( st_fx->bwidth, WB ) && NE_16( st_fx->bwidth, SWB ) ) || NE_32( st_fx->total_brate, ACELP_13k20 ) )
809 : {
810 3 : IF( EQ_16( st_fx->Opt_RF_ON, 1 ) )
811 : {
812 0 : printf( "\nWarning: Channel-aware mode only available for 13.2 kbps WB/SWB\n" );
813 0 : printf( " Switched to normal mode!\n" );
814 0 : st_fx->Opt_RF_ON = 0;
815 0 : move16();
816 0 : st_fx->rf_fec_offset = 0;
817 0 : move16();
818 : }
819 3 : st_fx->rf_mode = 0;
820 3 : move16();
821 : }
822 : ELSE
823 : {
824 0 : st_fx->rf_mode = st_fx->Opt_RF_ON;
825 0 : move16();
826 : }
827 3 : st_fx->rf_mode_last = st_fx->rf_mode;
828 3 : move16();
829 : /* initialize RF indice buffers */
830 3 : reset_rf_indices_fx( st_fx );
831 :
832 : /*-----------------------------------------------------------------*
833 : * MODE2 initialization
834 : *-----------------------------------------------------------------*/
835 :
836 3 : st_fx->last_sr_core = i_mult2( st_fx->last_L_frame, 50 );
837 3 : move16();
838 : /*-----------------------------------------------------------------*
839 : * IGF
840 : *-----------------------------------------------------------------*/
841 :
842 3 : test();
843 3 : IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
844 : {
845 3 : IF( ( st_fx->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL )
846 : {
847 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) );
848 : }
849 : }
850 : ELSE
851 : {
852 0 : st_fx->hIGFEnc = NULL;
853 0 : move16();
854 : }
855 :
856 3 : IF( EQ_16( st_fx->codec_mode, MODE2 ) )
857 : {
858 1 : st_fx->igf = getIgfPresent_fx( st_fx->element_mode, st_fx->total_brate, st_fx->bwidth, st_fx->rf_mode );
859 : }
860 : ELSE
861 : {
862 2 : st_fx->igf = 0;
863 2 : move16();
864 : }
865 :
866 : /* FD-CNG encoder */
867 3 : createFdCngEnc_fx( &st_fx->hFdCngEnc );
868 3 : initFdCngEnc_fx( st_fx->hFdCngEnc, st_fx->input_Fs, st_fx->cldfbAnaEnc->scale );
869 3 : L_tmp = st_fx->total_brate;
870 3 : move32();
871 3 : test();
872 3 : if ( st_fx->rf_mode && EQ_32( st_fx->total_brate, ACELP_13k20 ) )
873 : {
874 0 : L_tmp = ACELP_9k60;
875 0 : move32();
876 : }
877 3 : configureFdCngEnc_fx( st_fx->hFdCngEnc, st_fx->bwidth, L_tmp );
878 :
879 3 : st_fx->last_totalNoise_fx = 0;
880 3 : move16();
881 3 : set16_fx( st_fx->totalNoise_increase_hist_fx, 0, TOTALNOISE_HIST_SIZE );
882 3 : st_fx->totalNoise_increase_len = 0;
883 3 : move16();
884 3 : init_coder_ace_plus_fx( st_fx, st_fx->last_total_brate, 0, -10 /*hack*/ );
885 : // PMT("Transient detector init needs review, handle hTranDet is missing")
886 3 : InitTransientDetection_fx( extract_l( Mult_32_16( st_fx->input_Fs, 0x0290 ) ),
887 3 : NS2SA_FX2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS ),
888 3 : &st_fx->transientDetection );
889 :
890 3 : st_fx->Q_syn2 = 0;
891 3 : move16();
892 3 : st_fx->Q_syn = 0;
893 3 : move16();
894 3 : set16_fx( st_fx->Q_max, Q_MAX, L_Q_MEM );
895 3 : set16_fx( st_fx->Q_max_16k, Q_MAX, L_Q_MEM );
896 3 : st_fx->Q_old = 15;
897 3 : move16();
898 3 : st_fx->old_wsp_max = 0;
899 3 : move16();
900 3 : st_fx->old_wsp_shift = 0;
901 3 : move16();
902 3 : st_fx->sharpFlag = 0;
903 3 : move16();
904 :
905 3 : st_fx->tdm_LRTD_flag = 0; /* LRTD stereo mode flag */
906 3 : move16();
907 3 : st_fx->cna_dirac_flag = 0; /* CNA in DirAC flag */
908 3 : move16();
909 3 : st_fx->cng_sba_flag = 0; /* CNG in SBA flag */
910 3 : move16();
911 3 : st_fx->GSC_IVAS_mode = 0; /* CNG in SBA flag */
912 3 : move16();
913 3 : st_fx->element_mode = EVS_MONO; /* element mode */
914 3 : move16();
915 3 : st_fx->last_element_mode = st_fx->element_mode; /* element mode */
916 3 : move16();
917 3 : st_fx->element_brate = -1; /* element bitrate */
918 3 : move32();
919 : // PMT("element_mode and element_brate should be initialized at a proper place in ivas_dec_init eventually")
920 3 : st_fx->low_rate_mode = 0; /* low-rate mode flag */
921 3 : move16();
922 : // st_fx->coder_type = GENERIC; /* low-rate mode flag */
923 :
924 3 : set16_fx( st_fx->pitch, L_SUBFR, 3 );
925 3 : set16_fx( st_fx->voicing_fx, 0, 3 );
926 :
927 :
928 : #ifdef DEBUGGING
929 : st_fx->id_element = -1; /* element ID */
930 : move16();
931 : #endif
932 3 : st_fx->extl_orig = -1; /* extension layer */
933 3 : move16();
934 3 : st_fx->extl_brate_orig = 0; /* extension layer bitrate */
935 3 : move32();
936 3 : return error;
937 : }
938 :
939 : /*-----------------------------------------------------------------------*
940 : * LPDmem_enc_init_fx()
941 : *
942 : * Initialization of ACELP LPDmem state variables
943 : *-----------------------------------------------------------------------*/
944 :
945 3 : void LPDmem_enc_init_fx(
946 : LPD_state_HANDLE hLPDmem /* i/o: LP memories */
947 : )
948 : {
949 : Word16 i;
950 :
951 3 : set16_fx( hLPDmem->syn, 0, 1 + M );
952 3 : set16_fx( hLPDmem->old_exc, 0, L_EXC_MEM );
953 3 : set16_fx( hLPDmem->mem_syn, 0, M );
954 3 : set16_fx( hLPDmem->mem_syn1_fx, 0, M );
955 3 : set16_fx( hLPDmem->mem_syn2, 0, M );
956 3 : set16_fx( hLPDmem->mem_syn_r, 0, L_SYN_MEM );
957 3 : set16_fx( hLPDmem->mem_syn3, 0, M );
958 :
959 3 : hLPDmem->mem_w0 = 0;
960 3 : move16();
961 3 : hLPDmem->tilt_code = 0;
962 3 : move16();
963 3 : hLPDmem->gc_threshold = 0;
964 3 : move32();
965 3 : hLPDmem->dm_fx.prev_state = 0;
966 3 : move16(); /* This corresponds to st_fx->dispMem in FLP */
967 3 : hLPDmem->dm_fx.prev_gain_code = 0;
968 3 : move32();
969 :
970 21 : FOR( i = 2; i < 8; i++ )
971 : {
972 18 : hLPDmem->dm_fx.prev_gain_pit[i - 2] = 0;
973 18 : move16();
974 : }
975 3 : return;
976 : }
977 :
978 3895 : void LPDmem_enc_init_ivas_fx(
979 : LPD_state_HANDLE hLPDmem /* i/o: LP memories */
980 : )
981 : {
982 : Word16 i;
983 :
984 3895 : set16_fx( hLPDmem->syn, 0, 1 + M );
985 3895 : set16_fx( hLPDmem->old_exc, 0, L_EXC_MEM );
986 3895 : set16_fx( hLPDmem->mem_syn, 0, M );
987 3895 : set16_fx( hLPDmem->mem_syn1_fx, 0, M );
988 3895 : set16_fx( hLPDmem->mem_syn2, 0, M );
989 3895 : set16_fx( hLPDmem->mem_syn_r, 0, L_SYN_MEM );
990 3895 : set16_fx( hLPDmem->mem_syn3, 0, M );
991 3895 : hLPDmem->q_lpd_old_exc = Q15;
992 3895 : move16();
993 3895 : hLPDmem->q_lpd_syn = Q15;
994 3895 : move16();
995 3895 : hLPDmem->q_mem_syn = Q15;
996 3895 : move16();
997 3895 : hLPDmem->mem_w0 = 0;
998 3895 : move16();
999 3895 : hLPDmem->tilt_code = 0;
1000 3895 : move16();
1001 3895 : hLPDmem->gc_threshold = 0;
1002 3895 : move32();
1003 3895 : hLPDmem->dm_fx.prev_state = 0;
1004 3895 : move16(); /* This corresponds to st_fx->dispMem in FLP */
1005 3895 : hLPDmem->dm_fx.prev_gain_code = 0;
1006 3895 : move32();
1007 :
1008 27265 : FOR( i = 2; i < 8; i++ )
1009 : {
1010 23370 : hLPDmem->dm_fx.prev_gain_pit[i - 2] = 0;
1011 23370 : move16();
1012 : }
1013 :
1014 3895 : return;
1015 : }
1016 :
1017 : /*-----------------------------------------------------------------------*
1018 : * destroy_encoder_fx()
1019 : *
1020 : * Free memory which was allocated in init_encoder_fx()
1021 : *-----------------------------------------------------------------------*/
1022 :
1023 3 : void destroy_encoder_fx(
1024 : Encoder_State *st_fx /* i/o: Encoder static variables structure */
1025 : )
1026 : {
1027 3 : deleteCldfb( &st_fx->cldfbAnaEnc );
1028 3 : deleteCldfb( &st_fx->cldfbSynTd );
1029 :
1030 3 : deleteFdCngEnc_fx( &st_fx->hFdCngEnc );
1031 :
1032 3 : return;
1033 : }
1034 :
1035 8833 : ivas_error init_encoder_ivas_fx(
1036 : Encoder_State *st, /* i/o: state structure */
1037 : Encoder_Struct *st_ivas, /* i/o: encoder state structure */
1038 : const Word16 idchan, /* i : channel ID */
1039 : const Word16 var_SID_rate_flag, /* i : flag for variable SID update rate */
1040 : const Word16 interval_SID, /* i : interval for SID update */
1041 : const Word16 vad_only_flag, /* i : flag to indicate front-VAD structure */
1042 : const ISM_MODE ism_mode, /* i : ISM mode */
1043 : const Word32 element_brate /* i : element bitrate */
1044 : )
1045 : {
1046 : Word16 i;
1047 : ivas_error error;
1048 : Word32 igf_brate;
1049 :
1050 8833 : error = IVAS_ERR_OK;
1051 8833 : move32();
1052 :
1053 : /*-----------------------------------------------------------------*
1054 : * General parameters
1055 : *-----------------------------------------------------------------*/
1056 :
1057 8833 : IF( st->Opt_AMR_WB )
1058 : {
1059 0 : st->last_core = AMR_WB_CORE;
1060 : }
1061 : ELSE
1062 : {
1063 8833 : st->last_core = -1;
1064 : }
1065 8833 : move16();
1066 :
1067 8833 : st->L_frame = L_FRAME;
1068 8833 : move16();
1069 8833 : st->last_coder_type = GENERIC;
1070 8833 : move16();
1071 8833 : st->coder_type = GENERIC;
1072 8833 : move16();
1073 8833 : st->last_total_brate = st->total_brate;
1074 8833 : move32();
1075 8833 : st->last_bits_frame_nominal = -1;
1076 8833 : move16();
1077 8833 : st->last_total_brate_cng = -1;
1078 8833 : move16();
1079 8833 : st->last_core_brate = st->total_brate;
1080 8833 : move32();
1081 8833 : st->dtx_sce_sba = 0;
1082 8833 : move16();
1083 8833 : st->extl = -1;
1084 8833 : move16();
1085 8833 : st->last_extl = -1;
1086 8833 : move16();
1087 8833 : st->last_L_frame = L_FRAME;
1088 8833 : move16();
1089 8833 : st->rate_switching_reset = 0;
1090 8833 : move16();
1091 8833 : st->rate_switching_reset_16kHz = 0;
1092 8833 : move16();
1093 8833 : st->clas = UNVOICED_CLAS;
1094 8833 : move16();
1095 8833 : st->low_rate_mode = 0;
1096 8833 : move16();
1097 8833 : st->ini_frame = 0;
1098 8833 : move16();
1099 8833 : st->inactive_coder_type_flag = 0;
1100 8833 : move16();
1101 8833 : st->sba_br_sw_while_no_data = 0;
1102 8833 : move16();
1103 :
1104 8833 : st->coder_type_raw = VOICED;
1105 8833 : move16();
1106 8833 : st->last_coder_type_raw = st->coder_type_raw;
1107 8833 : move16();
1108 :
1109 8833 : st->flag_ACELP16k = set_ACELP_flag_IVAS( st->element_mode, st->total_brate, st->total_brate, idchan, 0, -1, -1 );
1110 8833 : move16();
1111 :
1112 8833 : st->is_ism_format = 0;
1113 8833 : move16();
1114 :
1115 8833 : IF( NE_16( ism_mode, ISM_MODE_NONE ) )
1116 : {
1117 2160 : st->is_ism_format = 1;
1118 2160 : move16();
1119 : }
1120 :
1121 : /*-----------------------------------------------------------------*
1122 : * Bitstream
1123 : *-----------------------------------------------------------------*/
1124 :
1125 8833 : IF( !vad_only_flag )
1126 : {
1127 8764 : IF( ( st->hBstr = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL )
1128 : {
1129 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) );
1130 : }
1131 :
1132 : /* set pointer to the buffer of indices */
1133 8764 : st->hBstr->ind_list = st_ivas->ind_list;
1134 8764 : st->hBstr->ivas_ind_list_zero = &st_ivas->ind_list;
1135 8764 : st->hBstr->ivas_max_num_indices = &st_ivas->ivas_max_num_indices;
1136 8764 : st->hBstr->nb_ind_tot = 0;
1137 8764 : move16();
1138 8764 : st->hBstr->nb_bits_tot = 0;
1139 8764 : move16();
1140 8764 : st->hBstr->st_ivas = st_ivas;
1141 : }
1142 : ELSE
1143 : {
1144 69 : st->hBstr = NULL;
1145 : }
1146 :
1147 : /*-----------------------------------------------------------------*
1148 : * Pre-processing and ACELP core parameters
1149 : *-----------------------------------------------------------------*/
1150 :
1151 8833 : Copy( GEWB_Ave_fx, st->mem_AR_fx, M );
1152 8833 : Copy( GEWB_Ave_fx, st->lsfoldbfi0_fx, M );
1153 8833 : Copy( GEWB_Ave_fx, st->lsfoldbfi1_fx, M );
1154 8833 : Copy( GEWB_Ave_fx, st->lsf_adaptive_mean_fx, M );
1155 :
1156 8833 : st->next_force_safety_net = 0;
1157 8833 : move16();
1158 :
1159 8833 : st->pstreaklen = 0;
1160 8833 : move16();
1161 8833 : st->streaklimit_fx = MAX_WORD16;
1162 8833 : move16();
1163 8833 : set16_fx( st->mem_MA_fx, 0, M );
1164 :
1165 8833 : init_gp_clip_fx( st->clip_var_fx );
1166 8833 : pitch_ol_init_fx( &st->old_thres_fx, &st->old_pitch, &st->delta_pit, &st->old_corr_fx );
1167 8833 : set16_fx( st->old_wsp_fx, 0, L_WSP_MEM );
1168 8833 : st->exp_old_wsp = 0;
1169 8833 : move16();
1170 8833 : set16_fx( st->old_wsp2_fx, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); // Needs to change depending on usage.
1171 8833 : st->Q_old_wsp2 = 0;
1172 8833 : move16();
1173 :
1174 8833 : st->mem_preemph_fx = 0;
1175 8833 : move16();
1176 8833 : st->mem_preemph_fx_q_inp = 0;
1177 8833 : move16();
1178 8833 : st->mem_preemph16k_fx = 0;
1179 8833 : move16();
1180 8833 : st->mem_preemph_enc = 0;
1181 8833 : move16();
1182 8833 : st->exp_mem_preemph_enc = 0;
1183 8833 : move16();
1184 :
1185 8833 : st->active_cnt = 0;
1186 8833 : move16();
1187 :
1188 8833 : st->pst_mem_deemp_err_fx = 0;
1189 8833 : move16();
1190 8833 : st->pst_lp_ener_fx = 0;
1191 8833 : move16();
1192 :
1193 : /* AVQ pre-quantizer memory */
1194 8833 : st->mem_preemp_preQ_fx = 0;
1195 8833 : move16();
1196 8833 : st->mem_deemp_preQ_fx = 0;
1197 8833 : move16();
1198 8833 : st->last_nq_preQ = 0;
1199 8833 : move16();
1200 8833 : st->last_code_preq = 0;
1201 8833 : move16();
1202 8833 : st->use_acelp_preq = 0;
1203 8833 : move16();
1204 8833 : st->last_harm_flag_acelp = 0;
1205 8833 : move16();
1206 :
1207 : /* (Decimated) Weighted Speech Memory */
1208 8833 : st->mem_wsp_enc = 0;
1209 8833 : move16();
1210 8833 : st->mem_wsp_fx = 0;
1211 8833 : move16();
1212 8833 : st->mem_wsp_q = 0;
1213 8833 : move16();
1214 8833 : set16_fx( st->mem_decim2_fx, 0, 3 );
1215 8833 : set32_fx( st->Bin_E_fx, 0, L_FFT );
1216 8833 : st->q_Bin_E = Q31;
1217 8833 : move16();
1218 8833 : st->ee_old_fx = 640; /* 10.0f in Q6 */
1219 8833 : move16();
1220 8833 : st->Nb_ACELP_frames = 0;
1221 8833 : move16();
1222 8833 : st->audio_frame_cnt = AUDIO_COUNTER_INI; /* Initialization of the audio frame counter mildly into the audio mode */
1223 8833 : move16();
1224 :
1225 : /* adaptive lag window memory */
1226 8833 : st->old_pitch_la = 0;
1227 8833 : move16();
1228 :
1229 8833 : st->prev_Q_new = 0;
1230 8833 : move16();
1231 :
1232 8833 : IF( EQ_32( st->input_Fs, 8000 ) )
1233 : {
1234 0 : st->min_band = 1;
1235 0 : move16();
1236 0 : st->max_band = 16;
1237 0 : move16();
1238 : }
1239 : ELSE
1240 : {
1241 8833 : st->min_band = 0;
1242 8833 : move16();
1243 8833 : st->max_band = 19;
1244 8833 : move16();
1245 : }
1246 :
1247 8833 : IF( st->Opt_AMR_WB )
1248 : {
1249 0 : Copy( mean_isf_amr_wb_fx, st->lsf_old_fx, M );
1250 0 : E_LPC_isf_isp_conversion( st->lsf_old_fx, st->lsp_old1_fx, M );
1251 : }
1252 : ELSE
1253 : {
1254 8833 : Copy( GEWB_Ave_fx, st->lsf_old_fx, M );
1255 8833 : lsf2lsp_fx( st->lsf_old_fx, st->lsp_old1_fx, M, INT_FS_12k8 );
1256 : }
1257 :
1258 8833 : Copy( st->lsf_old_fx, st->lsf_old1_fx, M );
1259 8833 : Copy( st->lsp_old1_fx, st->lsp_old_fx, M );
1260 8833 : Copy( st->lsp_old_fx, st->lsp_old16k_fx, M );
1261 8833 : Copy( st->lsp_old_fx, st->lspold_enc_fx, M );
1262 :
1263 8833 : st->stab_fac_fx = 0;
1264 8833 : move16();
1265 :
1266 : /* Bass post-filter memories - encoder side of MODE2 */
1267 8833 : st->bpf_off = 0;
1268 8833 : move16();
1269 8833 : st->pst_mem_deemp_err_fx = 0;
1270 8833 : move16();
1271 8833 : st->pst_lp_ener_fx = 0;
1272 8833 : move16();
1273 :
1274 : /* TC coder type */
1275 8833 : st->tc_cnt = 0;
1276 8833 : move16();
1277 :
1278 : /* find_uv() parameters */
1279 8833 : st->old_dE1_fx = 0;
1280 8833 : move16();
1281 8833 : st->old_ind_deltaMax = 0;
1282 8833 : move16();
1283 8833 : set32_fx( st->old_enr_ssf_fx, 0, shl( NB_SSF, 1 ) );
1284 8833 : st->spike_hyst = -1;
1285 8833 : move16();
1286 :
1287 : /* stereo switching memories */
1288 8833 : st->mem_preemph_DFT_fx = 0;
1289 8833 : move16();
1290 8833 : st->mem_preemph_DFT_fx_q_inp = 0;
1291 8833 : move16();
1292 8833 : set16_fx( st->inp_12k8_mem_stereo_sw_fx, 0, sub( sub( STEREO_DFT_OVL_12k8, L_MEM_RECALC_12K8 ), L_FILT ) );
1293 8833 : st->mem_preemph16k_DFT_fx = 0;
1294 8833 : move16();
1295 8833 : set16_fx( st->inp_16k_mem_stereo_sw_fx, 0, sub( sub( STEREO_DFT_OVL_16k, L_MEM_RECALC_16K ), L_FILT16k ) );
1296 :
1297 8833 : st->sharpFlag = 0;
1298 8833 : move16();
1299 :
1300 : /* Stationary noise UV modification */
1301 8833 : st->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/
1302 8833 : move16();
1303 8833 : st->uv_count = 0;
1304 8833 : move16();
1305 8833 : st->act_count = 3;
1306 8833 : move16();
1307 8833 : Copy( st->lsp_old_fx, st->lspold_s_fx, M );
1308 8833 : st->noimix_seed = RANDOM_INITSEED;
1309 8833 : move16();
1310 8833 : st->min_alpha_fx = 32767;
1311 8833 : move16();
1312 8833 : st->exc_pe_fx = 0;
1313 8833 : move16();
1314 8833 : st->Q_stat_noise = 15;
1315 8833 : move16();
1316 : /* FEC */
1317 8833 : st->last_clas = UNVOICED_CLAS;
1318 8833 : move16();
1319 8833 : st->prev_fmerit = 0;
1320 8833 : move16();
1321 8833 : st->fmerit_dt = 0;
1322 8833 : move16();
1323 8833 : st->Last_pulse_pos = 0;
1324 8833 : move16();
1325 :
1326 97163 : FOR( i = 0; i < shl( NB_SUBFR16k, 1 ); i++ )
1327 : {
1328 88330 : st->old_pitch_buf_fx[i] = L_SUBFR_Q6;
1329 88330 : move16();
1330 : }
1331 :
1332 : /* mode1 core switching */
1333 8833 : st->old_Es_pred_fx = 0;
1334 8833 : move16();
1335 8833 : set16_fx( st->old_Aq_12_8_fx + 1, 0, M );
1336 8833 : st->old_Aq_12_8_fx[0] = ONE_IN_Q12;
1337 8833 : move16();
1338 :
1339 : /* stable short pitch detection */
1340 8833 : st->voicing0_sm_fx = 0;
1341 8833 : move16();
1342 8833 : st->voicing_sm_fx = 0;
1343 8833 : move16();
1344 8833 : st->LF_EnergyRatio_sm_fx = 1;
1345 8833 : move16();
1346 8833 : st->predecision_flag = 0;
1347 8833 : move16();
1348 8833 : st->diff_sm_fx = 0;
1349 8833 : move32();
1350 8833 : st->energy_sm_fx = 0;
1351 8833 : move32();
1352 :
1353 8833 : set16_fx( st->pitch, L_SUBFR, 3 );
1354 8833 : set16_fx( st->voicing_fx, 0, 3 );
1355 :
1356 : /*-----------------------------------------------------------------*
1357 : * General signal buffers
1358 : *-----------------------------------------------------------------*/
1359 :
1360 8833 : IF( !vad_only_flag )
1361 : {
1362 8764 : IF( ( st->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL )
1363 : {
1364 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Signal buffers\n" ) );
1365 : }
1366 :
1367 8764 : st->Bin_E_old_fx = st->hSignalBuf->Bin_E_old_fx;
1368 8764 : st->mem_decim_fx = st->hSignalBuf->mem_decim_fx;
1369 8764 : st->mem_decim16k_fx = st->hSignalBuf->mem_decim16k_fx;
1370 8764 : st->old_inp_12k8_fx = st->hSignalBuf->old_inp_12k8_fx;
1371 8764 : st->old_inp_16k_fx = st->hSignalBuf->old_inp_16k_fx;
1372 8764 : st->buf_speech_enc_pe = st->hSignalBuf->buf_speech_enc_pe;
1373 8764 : st->buf_synth = st->hSignalBuf->buf_synth;
1374 8764 : st->buf_speech_enc = st->hSignalBuf->buf_speech_enc;
1375 8764 : st->buf_wspeech_enc = st->hSignalBuf->buf_wspeech_enc;
1376 :
1377 8764 : set32_fx( st->Bin_E_old_fx, 0, L_FFT / 2 );
1378 8764 : st->q_Bin_E_old = Q31;
1379 8764 : move16();
1380 8764 : set16_fx( st->hSignalBuf->buf_speech_enc, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k );
1381 8764 : st->exp_buf_speech_enc = 0;
1382 8764 : move16();
1383 8764 : set16_fx( st->hSignalBuf->buf_wspeech_enc, 0, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 );
1384 8764 : st->exp_buf_wspeech_enc = 0;
1385 8764 : move16();
1386 : /* initializations */
1387 8764 : set32_fx( st->Bin_E_old_fx, 0, L_FFT / 2 );
1388 8764 : st->q_Bin_E_old = Q31;
1389 8764 : move16();
1390 8764 : set16_fx( st->mem_decim_fx, 0, shl( L_FILT_MAX, 1 ) );
1391 8764 : set16_fx( st->mem_decim_fx_q_inp, 0, shl( L_FILT_MAX, 1 ) );
1392 8764 : set16_fx( st->mem_decim16k_fx, 0, shl( L_FILT_MAX, 1 ) );
1393 8764 : set16_fx( st->old_inp_12k8_fx, 0, L_INP_MEM );
1394 8764 : set16_fx( st->old_inp_16k_fx, 0, L_INP_MEM );
1395 8764 : st->exp_old_inp_16k = 0;
1396 8764 : st->exp_old_inp_12k8 = 0;
1397 8764 : move16();
1398 8764 : move16();
1399 :
1400 8764 : st->input_buff_fx = st->hSignalBuf->input_buff;
1401 8764 : st->input_buff32_fx = st->hSignalBuf->input_buff32;
1402 8764 : set16_fx( st->input_buff_fx, 0, add( L_FRAME48k, add( L_FRAME48k, NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ) ) );
1403 8764 : st->q_inp = Q15;
1404 8764 : move16();
1405 8764 : st->mem_preemph_q = Q15;
1406 8764 : move16();
1407 8764 : st->mem_q = Q15;
1408 8764 : move16();
1409 8764 : st->q_old_inp = Q15;
1410 8764 : move16();
1411 8764 : set32_fx( st->input_buff32_fx, 0, add( L_FRAME48k, add( L_FRAME48k, NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ) ) );
1412 8764 : st->q_inp32 = Q31;
1413 8764 : move16();
1414 8764 : st->q_old_inp32 = Q31;
1415 8764 : move16();
1416 8764 : st->old_input_signal_fx = st->input_buff_fx;
1417 8764 : st->old_input_signal32_fx = st->input_buff32_fx;
1418 : /* st->input_Fs / FRAMES_PER_SEC */
1419 8764 : Word16 frame_length = extract_l( Mpy_32_32( st->input_Fs, ONE_BY_FRAMES_PER_SEC_Q31 ) );
1420 :
1421 8764 : IF( st->element_mode == EVS_MONO )
1422 : {
1423 0 : st->input32_fx = st->input_buff32_fx + st->input_Fs / FRAMES_PER_SEC + NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS );
1424 0 : st->input_fx = st->input_buff_fx + add( frame_length, (Word16) NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ) );
1425 : }
1426 : ELSE
1427 : {
1428 : // st->input32_fx = st->input_buff32_fx + Mpy_32_32( st->input_Fs, 42949673 ) /* 1/50 in Q31*/; // st->input_Fs / FRAMES_PER_SEC
1429 8764 : st->input32_fx = st->input_buff32_fx + frame_length;
1430 8764 : st->input_fx = st->input_buff_fx + frame_length;
1431 : }
1432 : }
1433 : ELSE
1434 : {
1435 69 : st->hSignalBuf = NULL;
1436 69 : st->Bin_E_old_fx = NULL;
1437 69 : st->mem_decim_fx = NULL;
1438 69 : st->mem_decim16k_fx = NULL;
1439 69 : st->old_inp_12k8_fx = NULL;
1440 69 : st->old_inp_16k_fx = NULL;
1441 69 : st->buf_speech_enc_pe = NULL;
1442 69 : st->buf_synth = NULL;
1443 69 : st->buf_speech_enc = NULL;
1444 69 : st->buf_wspeech_enc = NULL;
1445 69 : st->input_buff_fx = NULL;
1446 : }
1447 :
1448 : /*-----------------------------------------------------------------*
1449 : * Noise estimator
1450 : *-----------------------------------------------------------------*/
1451 :
1452 8833 : test();
1453 8833 : test();
1454 8833 : test();
1455 8833 : IF( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_TD ) || EQ_16( st->element_mode, IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO )
1456 : {
1457 8734 : IF( ( st->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL )
1458 : {
1459 0 : return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" );
1460 : }
1461 :
1462 8734 : noise_est_init_ivas_fx( st->hNoiseEst );
1463 : }
1464 : ELSE
1465 : {
1466 99 : st->hNoiseEst = NULL;
1467 : }
1468 :
1469 : /*-----------------------------------------------------------------*
1470 : * VAD
1471 : *-----------------------------------------------------------------*/
1472 :
1473 8833 : st->vad_flag = 1;
1474 8833 : move16();
1475 8833 : st->localVAD = 0;
1476 8833 : move16();
1477 :
1478 8833 : IF( ( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_TD ) || EQ_16( st->element_mode, IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO ) && ( !vad_only_flag ) )
1479 : {
1480 8665 : IF( ( st->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL )
1481 : {
1482 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) );
1483 : }
1484 :
1485 8665 : wb_vad_init_fx( st->hVAD );
1486 : }
1487 : ELSE
1488 : {
1489 168 : st->hVAD = NULL;
1490 : }
1491 8833 : st->Pos_relE_cnt = 20;
1492 8833 : move16();
1493 :
1494 : /* CLDFB-based VAD */
1495 8833 : IF( st->element_mode == EVS_MONO )
1496 : {
1497 0 : if ( ( st->hVAD_CLDFB = (VAD_CLDFB_HANDLE) malloc( sizeof( T_CldfbVadState ) ) ) == NULL )
1498 : {
1499 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB VAD\n" ) );
1500 : }
1501 :
1502 0 : vad_init_fx( st->hVAD_CLDFB );
1503 : }
1504 : ELSE
1505 : {
1506 8833 : st->hVAD_CLDFB = NULL;
1507 : }
1508 :
1509 : /*-----------------------------------------------------------------*
1510 : * Speech/music classifier
1511 : *-----------------------------------------------------------------*/
1512 :
1513 8833 : IF( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_TD ) || EQ_16( st->element_mode, IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO )
1514 : {
1515 8734 : IF( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL )
1516 : {
1517 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) );
1518 : }
1519 :
1520 8734 : speech_music_clas_init_ivas_fx( st->hSpMusClas );
1521 8734 : st->sp_aud_decision0 = 0;
1522 8734 : move16();
1523 8734 : st->sp_aud_decision1 = 0;
1524 8734 : move16();
1525 8734 : st->sp_aud_decision2 = 0;
1526 8734 : move16();
1527 : }
1528 : ELSE
1529 : {
1530 99 : st->hSpMusClas = NULL;
1531 : }
1532 :
1533 :
1534 : /*-----------------------------------------------------------------*
1535 : * WB, SWB and FB bandwidth detector
1536 : *-----------------------------------------------------------------*/
1537 :
1538 8833 : st->lt_mean_NB_fx = 0;
1539 8833 : move16();
1540 8833 : st->lt_mean_WB_fx = 0;
1541 8833 : move16();
1542 8833 : st->lt_mean_SWB_fx = 0;
1543 8833 : move16();
1544 8833 : st->count_WB = BWD_COUNT_MAX;
1545 8833 : move16();
1546 8833 : st->count_SWB = BWD_COUNT_MAX;
1547 8833 : move16();
1548 8833 : st->count_FB = BWD_COUNT_MAX;
1549 8833 : move16();
1550 8833 : st->bwidth = st->max_bwidth;
1551 8833 : move16();
1552 8833 : st->last_input_bwidth = st->bwidth;
1553 8833 : move16();
1554 8833 : st->last_bwidth = st->bwidth;
1555 8833 : move16();
1556 8833 : st->last_bwidth_cng = st->bwidth;
1557 8833 : move16();
1558 8833 : st->bwidth_sw_cnt = 0;
1559 8833 : move16();
1560 :
1561 :
1562 : /*-----------------------------------------------------------------*
1563 : * DTX
1564 : *-----------------------------------------------------------------*/
1565 :
1566 8833 : st->lp_speech_32fx = 754974720; /*Q24 (45.0) */ /* Initialize the long-term active speech level in dB */
1567 8833 : move32();
1568 8833 : st->lp_noise_32fx = 0;
1569 8833 : move16();
1570 8833 : st->flag_noisy_speech_snr = 0;
1571 8833 : move16();
1572 8833 : st->fd_cng_reset_flag = 0;
1573 8833 : move16();
1574 8833 : st->cng_type = -1;
1575 8833 : move16();
1576 8833 : st->bckr_tilt_lt = 0;
1577 8833 : move16();
1578 8833 : st->active_cnt = 0;
1579 8833 : move16();
1580 :
1581 8833 : test();
1582 8833 : test();
1583 8833 : test();
1584 8833 : test();
1585 8833 : IF( ( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO ) || ( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && st->Opt_DTX_ON ) )
1586 : {
1587 485 : IF( ( st->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL )
1588 : {
1589 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) );
1590 : }
1591 485 : dtx_enc_init_fx( st, var_SID_rate_flag, interval_SID );
1592 : }
1593 : ELSE
1594 : {
1595 8348 : st->hDtxEnc = NULL;
1596 : }
1597 :
1598 : /*-----------------------------------------------------------------*
1599 : * No other handles needed to be allocated for front-VAD structure
1600 : *-----------------------------------------------------------------*/
1601 :
1602 8833 : IF( vad_only_flag )
1603 : {
1604 69 : st->hTdCngEnc = NULL;
1605 69 : st->cldfbAnaEnc = NULL;
1606 69 : st->hFdCngEnc = NULL;
1607 69 : st->hSC_VBR = NULL;
1608 69 : st->hAmrwb_IO = NULL;
1609 69 : st->hLPDmem = NULL;
1610 69 : st->hGSCEnc = NULL;
1611 69 : st->hBWE_TD = NULL;
1612 69 : st->cldfbSynTd = NULL;
1613 69 : st->hBWE_FD = NULL;
1614 69 : st->hHQ_core = NULL;
1615 69 : st->hRF = NULL;
1616 69 : st->hTECEnc = NULL;
1617 69 : st->hTcxEnc = NULL;
1618 69 : st->hTcxCfg = NULL;
1619 69 : st->hIGFEnc = NULL;
1620 69 : st->hPlcExt = NULL;
1621 69 : st->hTranDet = NULL;
1622 :
1623 69 : st->element_mode = IVAS_SCE;
1624 69 : move16();
1625 69 : st->idchan = 100; /* indicates hCoreCoderVAD */
1626 69 : move16();
1627 69 : st->core = -1;
1628 69 : move16();
1629 69 : st->rf_mode = 0;
1630 69 : move16();
1631 :
1632 69 : return error;
1633 : }
1634 :
1635 : /*-----------------------------------------------------------------*
1636 : * LP-CNG
1637 : *-----------------------------------------------------------------*/
1638 :
1639 8764 : test();
1640 8764 : test();
1641 8764 : test();
1642 8764 : test();
1643 8764 : test();
1644 8764 : IF( ( ( idchan == 0 && st->Opt_DTX_ON && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) || st->element_mode == EVS_MONO ) && !( EQ_16( ism_mode, ISM_MODE_PARAM ) || EQ_16( ism_mode, ISM_MODE_DISC ) ) )
1645 : {
1646 88 : IF( ( st->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL )
1647 : {
1648 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
1649 : }
1650 :
1651 88 : td_cng_enc_init_ivas_fx( st->hTdCngEnc, st->Opt_DTX_ON, st->max_bwidth );
1652 : }
1653 : ELSE
1654 : {
1655 8676 : st->hTdCngEnc = NULL;
1656 : }
1657 :
1658 : /*-----------------------------------------------------------------*
1659 : * CLDFB & resampling tools parameters
1660 : *-----------------------------------------------------------------*/
1661 8764 : test();
1662 8764 : test();
1663 8764 : test();
1664 8764 : IF( ( NE_16( st->element_mode, IVAS_CPE_MDCT ) && idchan == 0 ) || ( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && st->Opt_DTX_ON ) )
1665 : {
1666 3217 : IF( EQ_16( st->element_mode, EVS_MONO ) )
1667 : {
1668 : /* open analysis for input SR */
1669 0 : st->input_frame_fx = extract_l( Mult_32_16( st->input_Fs, 0x0290 ) );
1670 :
1671 0 : if ( ( error = openCldfb( &st->cldfbAnaEnc, CLDFB_ANALYSIS, CLDFB_getNumChannels( st->input_Fs ), st->input_frame_fx ) ) != IVAS_ERR_OK )
1672 : {
1673 0 : return error;
1674 : }
1675 : }
1676 : ELSE
1677 : {
1678 :
1679 3217 : IF( ( error = openCldfb_ivas_fx( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS, ENC ) ) != IVAS_ERR_OK )
1680 : {
1681 0 : return error;
1682 : }
1683 : }
1684 : }
1685 : ELSE
1686 : {
1687 5547 : st->cldfbAnaEnc = NULL;
1688 : }
1689 :
1690 8764 : st->energyCoreLookahead_Fx = 2; /* 6.1e-5f in Q15 */
1691 8764 : move32();
1692 8764 : st->sf_energyCoreLookahead_Fx = 2; /* 6.1e-5f in Q15 */
1693 8764 : move16();
1694 :
1695 : /*-----------------------------------------------------------------*
1696 : * SC-VBR parameters
1697 : *-----------------------------------------------------------------*/
1698 :
1699 8764 : test();
1700 8764 : IF( st->Opt_SC_VBR || st->element_mode == EVS_MONO )
1701 : {
1702 0 : IF( ( st->hSC_VBR = (SC_VBR_ENC_HANDLE) malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL )
1703 : {
1704 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
1705 : }
1706 :
1707 0 : sc_vbr_enc_init_fx( st->hSC_VBR );
1708 : }
1709 : ELSE
1710 : {
1711 8764 : st->hSC_VBR = NULL;
1712 : }
1713 :
1714 8764 : st->last_Opt_SC_VBR = 0;
1715 8764 : move16();
1716 :
1717 :
1718 : /*-----------------------------------------------------------------*
1719 : * AMR-WB IO initialization
1720 : *-----------------------------------------------------------------*/
1721 :
1722 8764 : test();
1723 8764 : IF( st->Opt_AMR_WB || st->element_mode == EVS_MONO )
1724 : {
1725 0 : IF( ( st->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL )
1726 : {
1727 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
1728 : }
1729 :
1730 0 : amr_wb_enc_init_fx( st->hAmrwb_IO );
1731 : }
1732 : ELSE
1733 : {
1734 8764 : st->hAmrwb_IO = NULL;
1735 : }
1736 :
1737 : /*-----------------------------------------------------------------*
1738 : * ACELP LPDmem
1739 : *-----------------------------------------------------------------*/
1740 :
1741 8764 : test();
1742 8764 : test();
1743 8764 : IF( ( idchan == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st->element_mode, IVAS_CPE_TD ) )
1744 : {
1745 3103 : IF( ( st->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL )
1746 : {
1747 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) );
1748 : }
1749 :
1750 3103 : LPDmem_enc_init_ivas_fx( st->hLPDmem );
1751 : }
1752 : ELSE
1753 : {
1754 5661 : st->hLPDmem = NULL;
1755 : }
1756 :
1757 : /*-----------------------------------------------------------------*
1758 : * parameters for AC coder type (GSC)
1759 : *-----------------------------------------------------------------*/
1760 :
1761 8764 : st->GSC_noisy_speech = 0;
1762 8764 : move16();
1763 8764 : st->GSC_IVAS_mode = 0;
1764 8764 : move16();
1765 :
1766 8764 : test();
1767 8764 : test();
1768 8764 : IF( ( idchan == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st->element_mode, IVAS_CPE_TD ) )
1769 : {
1770 3103 : IF( ( st->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL )
1771 : {
1772 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) );
1773 : }
1774 :
1775 3103 : GSC_enc_init_fx( st->hGSCEnc );
1776 : }
1777 : ELSE
1778 : {
1779 5661 : st->hGSCEnc = NULL;
1780 : }
1781 :
1782 : /*-----------------------------------------------------------------*
1783 : * TBE parameters
1784 : *-----------------------------------------------------------------*/
1785 :
1786 8764 : test();
1787 8764 : IF( idchan == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) )
1788 : {
1789 3103 : IF( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL )
1790 : {
1791 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
1792 : }
1793 :
1794 3103 : IF( st->element_mode == EVS_MONO )
1795 : {
1796 0 : if ( ( error = openCldfb( &st->cldfbSynTd, CLDFB_SYNTHESIS, CLDFB_getNumChannels( 16000 ), L_FRAME16k ) ) != IVAS_ERR_OK )
1797 : {
1798 0 : return error;
1799 : }
1800 : }
1801 : ELSE
1802 : {
1803 3103 : IF( ( error = openCldfb_ivas_fx( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS, ENC ) ) != IVAS_ERR_OK )
1804 : {
1805 0 : return error;
1806 : }
1807 : }
1808 3103 : InitSWBencBuffer_ivas_fx( st );
1809 3103 : ResetSHBbuffer_Enc_fx( st );
1810 : }
1811 : ELSE
1812 : {
1813 5661 : st->hBWE_TD = NULL;
1814 5661 : st->cldfbSynTd = NULL;
1815 : }
1816 :
1817 : /*-----------------------------------------------------------------*
1818 : * SWB BWE parameters
1819 : *-----------------------------------------------------------------*/
1820 :
1821 8764 : test();
1822 8764 : IF( idchan == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) )
1823 : {
1824 3103 : IF( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL )
1825 : {
1826 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
1827 : }
1828 :
1829 3103 : fd_bwe_enc_init_fx( st->hBWE_FD );
1830 3103 : st->Q_old_wtda = 0;
1831 3103 : move16();
1832 : }
1833 : ELSE
1834 : {
1835 5661 : st->hBWE_FD = NULL;
1836 : }
1837 :
1838 : /*-----------------------------------------------------------------*
1839 : * HQ core parameters
1840 : *-----------------------------------------------------------------*/
1841 :
1842 8764 : IF( NE_16( st->element_mode, IVAS_CPE_TD ) && NE_16( st->element_mode, IVAS_CPE_MDCT ) && idchan == 0 )
1843 : {
1844 3103 : IF( ( st->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL )
1845 : {
1846 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
1847 : }
1848 :
1849 3103 : HQ_core_enc_init_fx( st->hHQ_core );
1850 : }
1851 : ELSE
1852 : {
1853 5661 : st->hHQ_core = NULL;
1854 : }
1855 :
1856 : /* init memory for detect_transient(), used by HQ core and swb_bwe_enc */
1857 8764 : st->old_hpfilt_in_fx = 0;
1858 8764 : move16();
1859 8764 : st->old_hpfilt_out_fx = 0;
1860 8764 : move16();
1861 8764 : st->EnergyLT_fx = 0;
1862 8764 : move32();
1863 8764 : st->Energy_Old_fx = 0;
1864 8764 : move32();
1865 8764 : st->TransientHangOver = 0;
1866 8764 : move16();
1867 8764 : st->EnergyLT_fx_exp = 30;
1868 8764 : move16();
1869 8764 : st->last_enerBuffer_exp = 0;
1870 8764 : move16();
1871 :
1872 : /*-----------------------------------------------------------------*
1873 : * Channel-aware mode
1874 : *-----------------------------------------------------------------*/
1875 :
1876 8764 : test();
1877 8764 : test();
1878 8764 : test();
1879 8764 : IF( !st->Opt_RF_ON || ( NE_16( st->bwidth, WB ) && NE_16( st->bwidth, SWB ) ) || NE_32( st->total_brate, ACELP_13k20 ) )
1880 : {
1881 8764 : st->rf_mode = 0;
1882 8764 : move16();
1883 : }
1884 : ELSE
1885 : {
1886 0 : st->rf_mode = st->Opt_RF_ON;
1887 0 : move16();
1888 : }
1889 :
1890 8764 : st->rf_mode_last = st->rf_mode;
1891 8764 : move16();
1892 :
1893 8764 : test();
1894 8764 : IF( st->Opt_RF_ON || st->element_mode == EVS_MONO )
1895 : {
1896 0 : IF( ( st->hRF = (RF_ENC_HANDLE) malloc( sizeof( RF_ENC_DATA ) ) ) == NULL )
1897 : {
1898 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for RF\n" ) );
1899 : }
1900 :
1901 : /* initialize RF indice buffers */
1902 0 : reset_rf_indices_fx( st );
1903 : }
1904 : ELSE
1905 : {
1906 8764 : st->hRF = NULL;
1907 : }
1908 :
1909 : /*-----------------------------------------------------------------*
1910 : * Temporal Envelope Coding
1911 : *-----------------------------------------------------------------*/
1912 :
1913 8764 : IF( st->element_mode == EVS_MONO )
1914 : {
1915 0 : IF( ( st->hTECEnc = (TEC_ENC_HANDLE) malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL )
1916 : {
1917 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) );
1918 : }
1919 : }
1920 : ELSE
1921 : {
1922 8764 : st->hTECEnc = NULL;
1923 : }
1924 : /* note: initialization done later in init_coder_ace_plus() */
1925 :
1926 : /*-----------------------------------------------------------------*
1927 : * TCX core
1928 : *-----------------------------------------------------------------*/
1929 :
1930 : // ToDo: reduction possible for MCT_CHAN_MODE_LFE channel
1931 8764 : test();
1932 8764 : IF( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_MDCT ) )
1933 : {
1934 8665 : IF( ( st->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL )
1935 : {
1936 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) );
1937 : }
1938 8665 : set32_fx( st->hTcxEnc->spectrum_long_fx, 0, N_MAX );
1939 8665 : st->hTcxEnc->spectrum_long_e = 0;
1940 8665 : move16();
1941 : /* Share the memories for 2xTCX10/4xTCX5 and for TCX20 */
1942 8665 : st->hTcxEnc->spectrum_fx[0] = st->hTcxEnc->spectrum_long_fx;
1943 8665 : st->hTcxEnc->spectrum_fx[1] = st->hTcxEnc->spectrum_long_fx + N_TCX10_MAX;
1944 8665 : move32();
1945 8665 : move32();
1946 8665 : st->hTcxEnc->spectrum_e[0] = st->hTcxEnc->spectrum_e[1] = 0;
1947 8665 : move16();
1948 8665 : move16();
1949 :
1950 8665 : set16_fx( st->hTcxEnc->old_out_fx, 0, L_FRAME32k );
1951 8665 : st->hTcxEnc->Q_old_out = 0;
1952 8665 : move16();
1953 :
1954 : /* MDCT selector */
1955 8665 : MDCT_selector_reset_fx( st->hTcxEnc );
1956 :
1957 : /* MDCT classifier */
1958 8665 : MDCT_classifier_reset_fx( st->hTcxEnc );
1959 :
1960 8665 : IF( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
1961 : {
1962 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
1963 : }
1964 : }
1965 : ELSE
1966 : {
1967 99 : st->hTcxEnc = NULL;
1968 99 : st->hTcxCfg = NULL;
1969 : }
1970 :
1971 : /*-----------------------------------------------------------------*
1972 : * IGF
1973 : *-----------------------------------------------------------------*/
1974 :
1975 8764 : igf_brate = st->total_brate;
1976 8764 : move32();
1977 :
1978 8764 : test();
1979 8764 : test();
1980 8764 : test();
1981 8764 : test();
1982 8764 : test();
1983 8764 : test();
1984 8764 : test();
1985 8764 : IF( EQ_16( st->element_mode, IVAS_SCE ) && ( EQ_16( st_ivas->hEncoderConfig->ivas_format, ISM_FORMAT ) || EQ_16( st_ivas->hEncoderConfig->ivas_format, MASA_ISM_FORMAT ) ) )
1986 : {
1987 2160 : igf_brate = L_sub( st->total_brate, i_mult( ISM_NB_BITS_METADATA_NOMINAL, FRAMES_PER_SEC ) );
1988 : }
1989 6604 : ELSE IF( EQ_16( st->element_mode, IVAS_CPE_DFT ) || ( EQ_16( st->element_mode, IVAS_SCE ) && ( EQ_16( st_ivas->hEncoderConfig->ivas_format, SBA_FORMAT ) ||
1990 : EQ_16( st_ivas->hEncoderConfig->ivas_format, SBA_ISM_FORMAT ) ||
1991 : EQ_16( st_ivas->hEncoderConfig->ivas_format, MC_FORMAT ) ||
1992 : EQ_16( st_ivas->hEncoderConfig->ivas_format, MASA_FORMAT ) ) ) )
1993 : {
1994 : /* use nominal bitrates for DFT Stereo and (O)SBA, same as in stereo_dft_config()/ivas_spar_config() */
1995 1042 : IF( EQ_32( element_brate, IVAS_13k2 ) )
1996 : {
1997 266 : igf_brate = ACELP_9k60;
1998 : }
1999 776 : ELSE IF( EQ_32( element_brate, IVAS_16k4 ) )
2000 : {
2001 272 : igf_brate = ACELP_13k20;
2002 : }
2003 504 : ELSE IF( EQ_32( element_brate, IVAS_24k4 ) )
2004 : {
2005 197 : igf_brate = ACELP_16k40;
2006 : }
2007 307 : ELSE IF( EQ_32( element_brate, IVAS_32k ) )
2008 : {
2009 251 : igf_brate = ACELP_24k40;
2010 : }
2011 : }
2012 5562 : ELSE IF( EQ_16( st->element_mode, IVAS_CPE_MDCT ) )
2013 : {
2014 5562 : igf_brate = element_brate;
2015 : }
2016 8764 : move32();
2017 8764 : test();
2018 8764 : IF( EQ_16( st->codec_mode, MODE2 ) || GT_16( st->element_mode, EVS_MONO ) )
2019 : {
2020 8764 : st->igf = getIgfPresent_fx( st->element_mode, igf_brate, st->max_bwidth, st->rf_mode );
2021 : }
2022 : ELSE
2023 : {
2024 0 : st->igf = 0;
2025 : }
2026 8764 : move16();
2027 :
2028 8764 : test();
2029 8764 : test();
2030 8764 : test();
2031 8764 : IF( ( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_MDCT ) ) && ( st->igf || st->element_mode == EVS_MONO ) )
2032 : {
2033 6877 : IF( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL )
2034 : {
2035 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) );
2036 : }
2037 : }
2038 : ELSE
2039 : {
2040 1887 : st->hIGFEnc = NULL;
2041 : }
2042 :
2043 : /*-----------------------------------------------------------------*
2044 : * Mode 2 initialization
2045 : *-----------------------------------------------------------------*/
2046 :
2047 8764 : st->last_sr_core = L_mult0( st->last_L_frame, FRAMES_PER_SEC );
2048 8764 : move32();
2049 :
2050 :
2051 : /* PLC encoder */
2052 8764 : IF( st->element_mode == EVS_MONO )
2053 : {
2054 0 : IF( ( st->hPlcExt = (PLC_ENC_EVS_HANDLE) malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL )
2055 : {
2056 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hPlcExt\n" ) );
2057 : }
2058 : }
2059 : ELSE
2060 : {
2061 8764 : st->hPlcExt = NULL;
2062 : }
2063 :
2064 : /* Init Mode 2 core coder */
2065 8764 : st->last_totalNoise_fx = 0;
2066 8764 : move16();
2067 8764 : set16_fx( st->totalNoise_increase_hist_fx, 0, TOTALNOISE_HIST_SIZE );
2068 8764 : st->totalNoise_increase_len = 0;
2069 8764 : move16();
2070 8764 : TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc;
2071 8764 : IF( hTcxEnc != NULL )
2072 : {
2073 8665 : hTcxEnc->L_frameTCX = extract_l( Mult_32_16( st->input_Fs, 0x0290 ) ); /* 0x0290 is 1/FRAMES_PER_SEC in Q15*/
2074 8665 : move16();
2075 : }
2076 8764 : st->currEnergyHF_fx = 0;
2077 8764 : move32();
2078 8764 : st->currEnergyHF_e_fx = 0;
2079 8764 : move16();
2080 8764 : st->prevEnergyHF_fx = 0;
2081 8764 : move32();
2082 :
2083 : /* Initialize TCX */
2084 :
2085 : /* Initialize Signal Buffers */
2086 8764 : Word16 shift = getScaleFactor16( st->old_inp_16k_fx, L_INP_MEM );
2087 8764 : Scale_sig( st->old_inp_16k_fx, L_INP_MEM, shift );
2088 8764 : st->exp_old_inp_16k = sub( st->exp_old_inp_16k, shift );
2089 8764 : move16();
2090 8764 : shift = getScaleFactor16( st->old_inp_12k8_fx, L_INP_MEM );
2091 8764 : Scale_sig( st->old_inp_12k8_fx, L_INP_MEM, shift );
2092 8764 : st->exp_old_inp_12k8 = sub( st->exp_old_inp_12k8, shift );
2093 8764 : move16();
2094 : /* Initialize ACELP */
2095 8764 : init_coder_ace_plus_ivas_fx( st, st->last_total_brate, igf_brate, 0 );
2096 :
2097 8764 : IF( st->hLPDmem != NULL )
2098 : {
2099 3103 : st->hLPDmem->q_lpd_old_exc = st->prev_Q_new;
2100 3103 : move16();
2101 : }
2102 : /*-----------------------------------------------------------------*
2103 : * FD-CNG encoder
2104 : *-----------------------------------------------------------------*/
2105 :
2106 8764 : test();
2107 8764 : test();
2108 8764 : test();
2109 8764 : test();
2110 8764 : IF( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO || ( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && st->Opt_DTX_ON ) )
2111 : {
2112 416 : createFdCngEnc_fx( &st->hFdCngEnc );
2113 416 : initFdCngEnc_fx( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale );
2114 : /* initialization for IVAS modes happens in first frame pre-processing */
2115 416 : IF( st->element_mode == EVS_MONO )
2116 : {
2117 : Word32 total_brate;
2118 :
2119 0 : test();
2120 0 : IF( st->rf_mode && EQ_32( st->total_brate, ACELP_13k20 ) )
2121 : {
2122 0 : total_brate = ACELP_9k60;
2123 0 : move32();
2124 : }
2125 : ELSE
2126 : {
2127 0 : total_brate = st->total_brate;
2128 0 : move32();
2129 : }
2130 :
2131 0 : configureFdCngEnc_ivas_fx( st->hFdCngEnc, st->bwidth, total_brate );
2132 : }
2133 : }
2134 : ELSE
2135 : {
2136 8348 : st->hFdCngEnc = NULL;
2137 : }
2138 :
2139 : /*-----------------------------------------------------------------*
2140 : * Transient detector
2141 : *-----------------------------------------------------------------*/
2142 :
2143 8764 : IF( ( st->hTranDet = (TRAN_DET_HANDLE) malloc( sizeof( TRAN_DET_DATA ) ) ) == NULL )
2144 : {
2145 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Transient Detection\n" ) );
2146 : }
2147 : Word16 temp;
2148 8764 : Word16 frame_length = BASOP_Util_Divide3232_Scale( st->input_Fs, FRAMES_PER_SEC, &temp );
2149 8764 : frame_length = shr( frame_length, sub( 15, temp ) );
2150 :
2151 8764 : IF( GT_16( st->element_mode, EVS_MONO ) )
2152 : {
2153 8764 : InitTransientDetection_ivas_fx( frame_length, 0, st->hTranDet, 1 );
2154 : }
2155 : ELSE
2156 : {
2157 0 : InitTransientDetection_fx( extract_l( Mult_32_16( st->input_Fs, 0x0290 ) ),
2158 0 : NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ),
2159 0 : &st->transientDetection );
2160 : }
2161 :
2162 : /*-----------------------------------------------------------------*
2163 : * IVAS parameters
2164 : *-----------------------------------------------------------------*/
2165 :
2166 8764 : st->tdm_LRTD_flag = 0;
2167 8764 : move16();
2168 8764 : st->cng_sba_flag = 0;
2169 8764 : move16();
2170 8764 : st->bits_frame_channel = 0;
2171 8764 : move16();
2172 8764 : st->side_bits_frame_channel = 0;
2173 8764 : move16();
2174 8764 : st->Q_syn2 = 0;
2175 8764 : move16();
2176 8764 : st->Q_syn = 0;
2177 8764 : move16();
2178 8764 : set16_fx( st->Q_max, Q_MAX, L_Q_MEM );
2179 8764 : set16_fx( st->Q_max_16k, Q_MAX, L_Q_MEM );
2180 8764 : st->Q_old = 15;
2181 8764 : move16();
2182 8764 : st->old_wsp_max = 0;
2183 8764 : move16();
2184 8764 : st->old_wsp_shift = 0;
2185 8764 : move16();
2186 8764 : st->sharpFlag = 0;
2187 8764 : move16();
2188 :
2189 8764 : return error;
2190 : }
2191 :
2192 :
2193 : /*-----------------------------------------------------------------------*
2194 : * destroy_cldfb_encoder()
2195 : *
2196 : * Free memory which was allocated in init_encoder()
2197 : *-----------------------------------------------------------------------*/
2198 :
2199 8833 : void destroy_cldfb_encoder_fx(
2200 : Encoder_State *st /* i/o: Encoder static variables structure */
2201 : )
2202 : {
2203 8833 : deleteCldfb_ivas_fx( &st->cldfbSynTd );
2204 8833 : deleteCldfb_ivas_fx( &st->cldfbAnaEnc );
2205 :
2206 8833 : deleteFdCngEnc_fx( &st->hFdCngEnc );
2207 :
2208 8833 : return;
2209 : }
|