Loading lib_com/cnst.h +3 −0 Original line number Diff line number Diff line Loading @@ -526,6 +526,9 @@ enum #define L_FRAME_MAX L_FRAME48k /* Max 20ms frame size @48kHz */ #define L_FRAME_PLUS 1200 /* Max frame size (long TCX frame) */ #define L_MDCT_OVLP_MAX NS2SA( 48000, ACELP_LOOK_NS ) /* = Max mdct overlap */ #ifdef FIX_1320_STACK_CPE_DECODER #define L_FRAME_PLUS_INTERNAL 800 /* Max frame size (long TCX frame) at maximum internal sampling rate */ #endif #define N_TCX10_MAX 480 /* Max size of TCX10 MDCT spectrum */ #define BITS_TEC 1 /* number of bits for TEC */ #define BITS_TFA 1 /* number of bits for TTF */ Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ #ifdef FIX_CREND_SIMPLIFY_CODE #define FIX_989_TD_REND_ROM /* Eri: Clean-up for TD renderer and completion of ROM generation tool */ #endif #define FIX_1320_STACK_CPE_DECODER /* VA: issue 1320: Optimize the stack memory consumption in the CPE decoder */ #define NONBE_1328_FIX_NON_LINEARITY /* VA: Fix possible issue when computing bwe_exc_extended and previous frame were almost 0 */ #define FIX_1319_STACK_SBA_DECODER /* VA: issue 1319: Optimize the definition of buffer lengths in the SBA decoder */ /* #################### End BASOP porting switches ############################ */ Loading lib_dec/dec_LPD.c +8 −0 Original line number Diff line number Diff line Loading @@ -71,7 +71,11 @@ void decoder_LPD( { int16_t *prm; int16_t param_lpc[NPRM_LPC_NEW]; #ifdef FIX_1320_STACK_CPE_DECODER float synth_buf[OLD_SYNTH_INTERNAL_DEC + L_FRAME_PLUS_INTERNAL + M]; #else float synth_buf[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; #endif float *synth; float synth_bufFB[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; float *synthFB; Loading Loading @@ -124,7 +128,11 @@ void decoder_LPD( synthFB = synth_bufFB + st->hTcxDec->old_synth_lenFB; mvr2r( st->hTcxDec->old_synth, synth_buf, st->hTcxDec->old_synth_len ); mvr2r( st->hTcxDec->old_synthFB, synth_bufFB, st->hTcxDec->old_synth_lenFB ); #ifdef FIX_1320_STACK_CPE_DECODER set_zero( synth, L_FRAME_PLUS_INTERNAL + M ); #else set_zero( synth, L_FRAME_PLUS + M ); #endif set_zero( synthFB, L_FRAME_PLUS + M ); Loading lib_dec/ivas_core_dec.c +30 −3 Original line number Diff line number Diff line Loading @@ -75,7 +75,12 @@ ivas_error ivas_core_dec( float synth[CPE_CHANNELS][L_FRAME48k]; float tmp_buffer[L_FRAME48k]; int16_t tmps, incr; #ifdef FIX_1320_STACK_CPE_DECODER float *bwe_exc_extended[CPE_CHANNELS] = { NULL, NULL }; int16_t flag_bwe_bws; #else float bwe_exc_extended[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; #endif float voice_factors[CPE_CHANNELS][NB_SUBFR16k]; int16_t core_switching_flag[CPE_CHANNELS]; float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; Loading Loading @@ -200,6 +205,9 @@ ivas_error ivas_core_dec( set_f( voice_factors[n], 0.f, NB_SUBFR16k ); set_f( hb_synth[n], 0.0f, L_FRAME48k ); #ifdef FIX_1320_STACK_CPE_DECODER bwe_exc_extended[n] = hb_synth[n]; /* note: reuse the buffer */ #endif /*------------------------------------------------------------------* * Decision matrix (selection of technologies) Loading Loading @@ -510,6 +518,10 @@ ivas_error ivas_core_dec( * SWB(FB) BWE decoding *---------------------------------------------------------------------*/ #ifdef FIX_1320_STACK_CPE_DECODER flag_bwe_bws = ( output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && st->bfi == 0 ); #endif if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->coder_type != AUDIO && st->coder_type != INACTIVE && st->core_brate >= SID_2k40 && st->core == ACELP_CORE && !st->con_tcx && output_Fs >= 32000 && st->bwidth > NB && st->bws_cnt > 0 ) ) { /* SWB TBE decoder */ Loading @@ -521,12 +533,24 @@ ivas_error ivas_core_dec( fb_tbe_dec( st, tmp_buffer /*fb_exc*/, hb_synth[n], tmp_buffer /*fb_synth_ref*/, output_frame ); } } #ifdef FIX_1320_STACK_CPE_DECODER else if ( st->extl == SWB_BWE || st->extl == FB_BWE || flag_bwe_bws ) #else else if ( st->extl == SWB_BWE || st->extl == FB_BWE || ( output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && !st->ppp_mode_dec && !( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) ) #endif { /* SWB BWE decoder */ swb_bwe_dec( st, output[n], synth[n], hb_synth[n], use_cldfb_for_dft, output_frame ); } #ifdef FIX_1320_STACK_CPE_DECODER if ( ( st->core == ACELP_CORE && ( st->extl == -1 || st->extl == SWB_CNG ) ) && flag_bwe_bws == 0 ) { set_f( hb_synth[n], 0.0f, L_FRAME48k ); } #endif /*---------------------------------------------------------------------* * FEC - recovery after lost HQ core (smoothing of the BWE component) *---------------------------------------------------------------------*/ Loading Loading @@ -560,6 +584,7 @@ ivas_error ivas_core_dec( stereo_icBWE_dec( hCPE, hb_synth[0], hb_synth[1], tmp_buffer /*fb_synth_ref*/, voice_factors[0], output_frame ); } #ifndef FIX_1320_STACK_CPE_DECODER if ( st->element_mode == EVS_MONO ) { /*----------------------------------------------------------------* Loading @@ -575,7 +600,7 @@ ivas_error ivas_core_dec( st->hPlcInfo->Pitch = 0; } } #endif /*----------------------------------------------------------------* * Transition and synchronization of BWE components *----------------------------------------------------------------*/ Loading @@ -590,6 +615,7 @@ ivas_error ivas_core_dec( } else { #ifndef FIX_1320_STACK_CPE_DECODER if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) { /* HR SWB BWE on top of ACELP@16kHz */ Loading @@ -597,9 +623,12 @@ ivas_error ivas_core_dec( } else { #endif /* TBE on top of ACELP@16kHz */ tmps = NS2SA( output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); #ifndef FIX_1320_STACK_CPE_DECODER } #endif } /* Smooth transitions when switching between different technologies */ Loading Loading @@ -733,11 +762,9 @@ ivas_error ivas_core_dec( } /* n_channels loop */ #ifdef DEBUG_MODE_INFO output_debug_mode_info_dec( sts, n_channels, output_frame, pitch_buf ); #endif pop_wmops(); return error; } Loading lib_dec/ivas_cpe_dec.c +88 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,10 @@ static void read_stereo_mode_and_bwidth( CPE_DEC_HANDLE hCPE, const Decoder_Stru static void stereo_mode_combined_format_dec( const Decoder_Struct *st_ivas, CPE_DEC_HANDLE hCPE ); #ifdef FIX_1320_STACK_CPE_DECODER static ivas_error stereo_dft_dec_main( CPE_DEC_HANDLE hCPE, const int32_t ivas_total_brate, const int16_t n_channels, float *p_res_buf, float *output[], float outputHB[][L_FRAME48k], const int16_t output_frame ); #endif /*--------------------------------------------------------------------------* * ivas_cpe_dec() Loading @@ -74,7 +78,11 @@ ivas_error ivas_cpe_dec( int16_t last_bwidth; int16_t tdm_ratio_idx; float outputHB[CPE_CHANNELS][L_FRAME48k]; /* 'float' buffer for output HB synthesis, both channels */ #ifdef FIX_1320_STACK_CPE_DECODER float *res_buf = NULL; #else float res_buf[STEREO_DFT_N_8k]; #endif CPE_DEC_HANDLE hCPE; STEREO_DFT_CONFIG_DATA_HANDLE hConfigDft; Decoder_State **sts; Loading Loading @@ -265,6 +273,11 @@ ivas_error ivas_cpe_dec( } else { #ifdef FIX_1320_STACK_CPE_DECODER res_buf = outputHB[0]; /* note: temporarily reused buffer */ #endif if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) { nb_bits -= nb_bits_metadata; Loading Loading @@ -447,6 +460,12 @@ ivas_error ivas_cpe_dec( if ( hCPE->element_mode == IVAS_CPE_DFT && !( hCPE->nchan_out == 1 && hConfigDft->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) { #ifdef FIX_1320_STACK_CPE_DECODER if ( ( error = stereo_dft_dec_main( hCPE, ivas_total_brate, n_channels, res_buf, output, outputHB, output_frame ) ) != IVAS_ERR_OK ) { return error; } #else float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX]; /* core decoder */ Loading Loading @@ -481,6 +500,7 @@ ivas_error ivas_cpe_dec( { stereo_dft_dec_synthesize( hCPE, DFT, n, output[n], output_frame ); } #endif } else if ( hCPE->element_mode == IVAS_CPE_TD ) { Loading Loading @@ -605,6 +625,74 @@ ivas_error ivas_cpe_dec( return error; } #ifdef FIX_1320_STACK_CPE_DECODER /*------------------------------------------------------------------------- * stereo_dft_dec_main() * * DFT decoder main function *-------------------------------------------------------------------------*/ static ivas_error stereo_dft_dec_main( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ const int32_t ivas_total_brate, /* i : IVAS total bitrate */ const int16_t n_channels, /* i : number of channels to be decoded */ float *p_res_buf, /* i : DFT stereo residual S signal */ float *output[], /* o : output synthesis signal */ float outputHB[][L_FRAME48k], /* o : output HB synthesis signal */ const int16_t output_frame /* i : output frame length per channel */ ) { float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX]; int16_t n; Decoder_State *st0; ivas_error error; st0 = hCPE->hCoreCoder[0]; /* copy from temporary buffer */ if ( hCPE->hStereoDft->res_cod_band_max > 0 && !st0->bfi ) { mvr2r( p_res_buf, DFT[1], STEREO_DFT_N_8k ); } /* core decoder */ if ( ( error = ivas_core_dec( NULL, NULL, hCPE, NULL, n_channels, output, outputHB, DFT, 0 ) ) != IVAS_ERR_OK ) { return error; } /* DFT Stereo residual decoding */ if ( hCPE->hStereoDft->res_cod_band_max > 0 && !st0->bfi ) { stereo_dft_dec_res( hCPE, DFT[1] /*res_buf*/, output[1] ); stereo_dft_dec_analyze( hCPE, output[1], DFT, 1, L_FRAME8k, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); } /* DFT stereo CNG */ stereo_dtf_cng( hCPE, ivas_total_brate, DFT, output_frame ); /* decoding */ if ( hCPE->nchan_out == 1 ) { stereo_dft_unify_dmx( hCPE->hStereoDft, st0, DFT, hCPE->input_mem[1], hCPE->hStereoCng->prev_sid_nodata ); } else { stereo_dft_dec( hCPE->hStereoDft, st0, DFT, hCPE->input_mem[1], hCPE->hStereoCng, 0, 0, 0, 0, 0, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); } /* synthesis iFFT */ for ( n = 0; n < hCPE->nchan_out; n++ ) { stereo_dft_dec_synthesize( hCPE, DFT, n, output[n], output_frame ); } return IVAS_ERR_OK; } #endif /*------------------------------------------------------------------------- * create_cpe_dec() Loading Loading
lib_com/cnst.h +3 −0 Original line number Diff line number Diff line Loading @@ -526,6 +526,9 @@ enum #define L_FRAME_MAX L_FRAME48k /* Max 20ms frame size @48kHz */ #define L_FRAME_PLUS 1200 /* Max frame size (long TCX frame) */ #define L_MDCT_OVLP_MAX NS2SA( 48000, ACELP_LOOK_NS ) /* = Max mdct overlap */ #ifdef FIX_1320_STACK_CPE_DECODER #define L_FRAME_PLUS_INTERNAL 800 /* Max frame size (long TCX frame) at maximum internal sampling rate */ #endif #define N_TCX10_MAX 480 /* Max size of TCX10 MDCT spectrum */ #define BITS_TEC 1 /* number of bits for TEC */ #define BITS_TFA 1 /* number of bits for TTF */ Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ #ifdef FIX_CREND_SIMPLIFY_CODE #define FIX_989_TD_REND_ROM /* Eri: Clean-up for TD renderer and completion of ROM generation tool */ #endif #define FIX_1320_STACK_CPE_DECODER /* VA: issue 1320: Optimize the stack memory consumption in the CPE decoder */ #define NONBE_1328_FIX_NON_LINEARITY /* VA: Fix possible issue when computing bwe_exc_extended and previous frame were almost 0 */ #define FIX_1319_STACK_SBA_DECODER /* VA: issue 1319: Optimize the definition of buffer lengths in the SBA decoder */ /* #################### End BASOP porting switches ############################ */ Loading
lib_dec/dec_LPD.c +8 −0 Original line number Diff line number Diff line Loading @@ -71,7 +71,11 @@ void decoder_LPD( { int16_t *prm; int16_t param_lpc[NPRM_LPC_NEW]; #ifdef FIX_1320_STACK_CPE_DECODER float synth_buf[OLD_SYNTH_INTERNAL_DEC + L_FRAME_PLUS_INTERNAL + M]; #else float synth_buf[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; #endif float *synth; float synth_bufFB[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; float *synthFB; Loading Loading @@ -124,7 +128,11 @@ void decoder_LPD( synthFB = synth_bufFB + st->hTcxDec->old_synth_lenFB; mvr2r( st->hTcxDec->old_synth, synth_buf, st->hTcxDec->old_synth_len ); mvr2r( st->hTcxDec->old_synthFB, synth_bufFB, st->hTcxDec->old_synth_lenFB ); #ifdef FIX_1320_STACK_CPE_DECODER set_zero( synth, L_FRAME_PLUS_INTERNAL + M ); #else set_zero( synth, L_FRAME_PLUS + M ); #endif set_zero( synthFB, L_FRAME_PLUS + M ); Loading
lib_dec/ivas_core_dec.c +30 −3 Original line number Diff line number Diff line Loading @@ -75,7 +75,12 @@ ivas_error ivas_core_dec( float synth[CPE_CHANNELS][L_FRAME48k]; float tmp_buffer[L_FRAME48k]; int16_t tmps, incr; #ifdef FIX_1320_STACK_CPE_DECODER float *bwe_exc_extended[CPE_CHANNELS] = { NULL, NULL }; int16_t flag_bwe_bws; #else float bwe_exc_extended[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; #endif float voice_factors[CPE_CHANNELS][NB_SUBFR16k]; int16_t core_switching_flag[CPE_CHANNELS]; float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; Loading Loading @@ -200,6 +205,9 @@ ivas_error ivas_core_dec( set_f( voice_factors[n], 0.f, NB_SUBFR16k ); set_f( hb_synth[n], 0.0f, L_FRAME48k ); #ifdef FIX_1320_STACK_CPE_DECODER bwe_exc_extended[n] = hb_synth[n]; /* note: reuse the buffer */ #endif /*------------------------------------------------------------------* * Decision matrix (selection of technologies) Loading Loading @@ -510,6 +518,10 @@ ivas_error ivas_core_dec( * SWB(FB) BWE decoding *---------------------------------------------------------------------*/ #ifdef FIX_1320_STACK_CPE_DECODER flag_bwe_bws = ( output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && st->bfi == 0 ); #endif if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->coder_type != AUDIO && st->coder_type != INACTIVE && st->core_brate >= SID_2k40 && st->core == ACELP_CORE && !st->con_tcx && output_Fs >= 32000 && st->bwidth > NB && st->bws_cnt > 0 ) ) { /* SWB TBE decoder */ Loading @@ -521,12 +533,24 @@ ivas_error ivas_core_dec( fb_tbe_dec( st, tmp_buffer /*fb_exc*/, hb_synth[n], tmp_buffer /*fb_synth_ref*/, output_frame ); } } #ifdef FIX_1320_STACK_CPE_DECODER else if ( st->extl == SWB_BWE || st->extl == FB_BWE || flag_bwe_bws ) #else else if ( st->extl == SWB_BWE || st->extl == FB_BWE || ( output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && !st->ppp_mode_dec && !( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) ) #endif { /* SWB BWE decoder */ swb_bwe_dec( st, output[n], synth[n], hb_synth[n], use_cldfb_for_dft, output_frame ); } #ifdef FIX_1320_STACK_CPE_DECODER if ( ( st->core == ACELP_CORE && ( st->extl == -1 || st->extl == SWB_CNG ) ) && flag_bwe_bws == 0 ) { set_f( hb_synth[n], 0.0f, L_FRAME48k ); } #endif /*---------------------------------------------------------------------* * FEC - recovery after lost HQ core (smoothing of the BWE component) *---------------------------------------------------------------------*/ Loading Loading @@ -560,6 +584,7 @@ ivas_error ivas_core_dec( stereo_icBWE_dec( hCPE, hb_synth[0], hb_synth[1], tmp_buffer /*fb_synth_ref*/, voice_factors[0], output_frame ); } #ifndef FIX_1320_STACK_CPE_DECODER if ( st->element_mode == EVS_MONO ) { /*----------------------------------------------------------------* Loading @@ -575,7 +600,7 @@ ivas_error ivas_core_dec( st->hPlcInfo->Pitch = 0; } } #endif /*----------------------------------------------------------------* * Transition and synchronization of BWE components *----------------------------------------------------------------*/ Loading @@ -590,6 +615,7 @@ ivas_error ivas_core_dec( } else { #ifndef FIX_1320_STACK_CPE_DECODER if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) { /* HR SWB BWE on top of ACELP@16kHz */ Loading @@ -597,9 +623,12 @@ ivas_error ivas_core_dec( } else { #endif /* TBE on top of ACELP@16kHz */ tmps = NS2SA( output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); #ifndef FIX_1320_STACK_CPE_DECODER } #endif } /* Smooth transitions when switching between different technologies */ Loading Loading @@ -733,11 +762,9 @@ ivas_error ivas_core_dec( } /* n_channels loop */ #ifdef DEBUG_MODE_INFO output_debug_mode_info_dec( sts, n_channels, output_frame, pitch_buf ); #endif pop_wmops(); return error; } Loading
lib_dec/ivas_cpe_dec.c +88 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,10 @@ static void read_stereo_mode_and_bwidth( CPE_DEC_HANDLE hCPE, const Decoder_Stru static void stereo_mode_combined_format_dec( const Decoder_Struct *st_ivas, CPE_DEC_HANDLE hCPE ); #ifdef FIX_1320_STACK_CPE_DECODER static ivas_error stereo_dft_dec_main( CPE_DEC_HANDLE hCPE, const int32_t ivas_total_brate, const int16_t n_channels, float *p_res_buf, float *output[], float outputHB[][L_FRAME48k], const int16_t output_frame ); #endif /*--------------------------------------------------------------------------* * ivas_cpe_dec() Loading @@ -74,7 +78,11 @@ ivas_error ivas_cpe_dec( int16_t last_bwidth; int16_t tdm_ratio_idx; float outputHB[CPE_CHANNELS][L_FRAME48k]; /* 'float' buffer for output HB synthesis, both channels */ #ifdef FIX_1320_STACK_CPE_DECODER float *res_buf = NULL; #else float res_buf[STEREO_DFT_N_8k]; #endif CPE_DEC_HANDLE hCPE; STEREO_DFT_CONFIG_DATA_HANDLE hConfigDft; Decoder_State **sts; Loading Loading @@ -265,6 +273,11 @@ ivas_error ivas_cpe_dec( } else { #ifdef FIX_1320_STACK_CPE_DECODER res_buf = outputHB[0]; /* note: temporarily reused buffer */ #endif if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) { nb_bits -= nb_bits_metadata; Loading Loading @@ -447,6 +460,12 @@ ivas_error ivas_cpe_dec( if ( hCPE->element_mode == IVAS_CPE_DFT && !( hCPE->nchan_out == 1 && hConfigDft->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) { #ifdef FIX_1320_STACK_CPE_DECODER if ( ( error = stereo_dft_dec_main( hCPE, ivas_total_brate, n_channels, res_buf, output, outputHB, output_frame ) ) != IVAS_ERR_OK ) { return error; } #else float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX]; /* core decoder */ Loading Loading @@ -481,6 +500,7 @@ ivas_error ivas_cpe_dec( { stereo_dft_dec_synthesize( hCPE, DFT, n, output[n], output_frame ); } #endif } else if ( hCPE->element_mode == IVAS_CPE_TD ) { Loading Loading @@ -605,6 +625,74 @@ ivas_error ivas_cpe_dec( return error; } #ifdef FIX_1320_STACK_CPE_DECODER /*------------------------------------------------------------------------- * stereo_dft_dec_main() * * DFT decoder main function *-------------------------------------------------------------------------*/ static ivas_error stereo_dft_dec_main( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ const int32_t ivas_total_brate, /* i : IVAS total bitrate */ const int16_t n_channels, /* i : number of channels to be decoded */ float *p_res_buf, /* i : DFT stereo residual S signal */ float *output[], /* o : output synthesis signal */ float outputHB[][L_FRAME48k], /* o : output HB synthesis signal */ const int16_t output_frame /* i : output frame length per channel */ ) { float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX]; int16_t n; Decoder_State *st0; ivas_error error; st0 = hCPE->hCoreCoder[0]; /* copy from temporary buffer */ if ( hCPE->hStereoDft->res_cod_band_max > 0 && !st0->bfi ) { mvr2r( p_res_buf, DFT[1], STEREO_DFT_N_8k ); } /* core decoder */ if ( ( error = ivas_core_dec( NULL, NULL, hCPE, NULL, n_channels, output, outputHB, DFT, 0 ) ) != IVAS_ERR_OK ) { return error; } /* DFT Stereo residual decoding */ if ( hCPE->hStereoDft->res_cod_band_max > 0 && !st0->bfi ) { stereo_dft_dec_res( hCPE, DFT[1] /*res_buf*/, output[1] ); stereo_dft_dec_analyze( hCPE, output[1], DFT, 1, L_FRAME8k, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); } /* DFT stereo CNG */ stereo_dtf_cng( hCPE, ivas_total_brate, DFT, output_frame ); /* decoding */ if ( hCPE->nchan_out == 1 ) { stereo_dft_unify_dmx( hCPE->hStereoDft, st0, DFT, hCPE->input_mem[1], hCPE->hStereoCng->prev_sid_nodata ); } else { stereo_dft_dec( hCPE->hStereoDft, st0, DFT, hCPE->input_mem[1], hCPE->hStereoCng, 0, 0, 0, 0, 0, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); } /* synthesis iFFT */ for ( n = 0; n < hCPE->nchan_out; n++ ) { stereo_dft_dec_synthesize( hCPE, DFT, n, output[n], output_frame ); } return IVAS_ERR_OK; } #endif /*------------------------------------------------------------------------- * create_cpe_dec() Loading