Loading lib_com/tools.c +1 −1 Original line number Diff line number Diff line Loading @@ -1447,7 +1447,7 @@ void polezero_filter( } #define WMC_TOOL_MAN // VE: define complexity macros here static float fleft_shift( float input, const int16_t shift ) { return ( input * (float) pow( 2.0, (double) shift ) ); Loading lib_dec/ivas_spar_decoder.c +1 −2 Original line number Diff line number Diff line Loading @@ -1004,7 +1004,6 @@ void ivas_spar_dec_upmixer( #endif } /*---------------------------------------------------------------------* * TD decorrelation *---------------------------------------------------------------------*/ Loading @@ -1018,7 +1017,7 @@ void ivas_spar_dec_upmixer( mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - i], output[nchan_internal - 1 - i], output_frame ); } hSpar->hFbMixer->fb_cfg->num_in_chans = num_in_ingest; hSpar->hFbMixer->fb_cfg->num_in_chans = num_in_ingest; // VE2DB: same as below, can be simplified } else { Loading lib_enc/ivas_dirac_enc.c +54 −11 Original line number Diff line number Diff line Loading @@ -438,9 +438,7 @@ void ivas_dirac_enc( else { /* encode SID parameters */ ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT, SBA_MODE_DIRAC ); ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT, SBA_MODE_DIRAC ); } } } Loading @@ -465,6 +463,51 @@ void ivas_dirac_enc_spar_delay_synchro( int16_t ch_idx; float tmp_buffer[L_FRAME48k]; #ifdef IMPR_TC_SWITCHING_MEMORY #if 1 /* check last sba_mode */ if ( ivas_sba_mode_select( st_ivas->hEncoderConfig->last_ivas_total_brate ) == SBA_MODE_SPAR ) { Encoder_State *sts[MCT_MAX_BLOCKS]; int16_t i_chan = 0; /* initializations */ for ( int16_t sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { sts[sce_id] = st_ivas->hSCE[sce_id]->hCoreCoder[0]; i_chan++; } for ( int16_t cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { for ( int16_t ch = 0; ch < CPE_CHANNELS; ch++ ) { sts[i_chan] = st_ivas->hCPE[cpe_id]->hCoreCoder[ch]; i_chan++; } } for ( ch_idx = 0; ch_idx < i_chan; ch_idx++ ) { mvr2r( sts[ch_idx]->input, st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay ); } } #else /* check last sba_mode */ if ( ivas_sba_mode_select( st_ivas->hEncoderConfig->last_ivas_total_brate ) == SBA_MODE_SPAR ) { for ( ch_idx = 0; ch_idx < st_ivas->hEncoderConfig->nchan_inp; ch_idx++ ) { mvr2r( data_f[ch_idx], tmp_buffer, input_frame ); //set_f( data_f[ch_idx], 0, 48 ); mvr2r( tmp_buffer, &data_f[ch_idx][st_ivas->hDirAC->num_samples_synchro_delay], input_frame - st_ivas->hDirAC->num_samples_synchro_delay ); mvr2r( &tmp_buffer[input_frame - st_ivas->hDirAC->num_samples_synchro_delay], st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay ); } } else #endif #endif { for ( ch_idx = 0; ch_idx < st_ivas->hEncoderConfig->nchan_inp; ch_idx++ ) { mvr2r( data_f[ch_idx], tmp_buffer, input_frame ); Loading @@ -472,7 +515,7 @@ void ivas_dirac_enc_spar_delay_synchro( mvr2r( tmp_buffer, &data_f[ch_idx][st_ivas->hDirAC->num_samples_synchro_delay], input_frame - st_ivas->hDirAC->num_samples_synchro_delay ); mvr2r( &tmp_buffer[input_frame - st_ivas->hDirAC->num_samples_synchro_delay], st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay ); } } return; } Loading lib_enc/ivas_enc.c +11 −0 Original line number Diff line number Diff line Loading @@ -234,6 +234,17 @@ ivas_error ivas_enc( ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format, ivas_total_brate, hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1 ); } float tmpF = 0; dbgwrite( &tmpF, 4, 1, 960, "res/tmp_ppFilterbank_prior_input" ); if ( st_ivas->nSCE > 0 ) { dbgwrite( st_ivas->hSCE[0]->hCoreCoder[0]->input_buff, 4, 960, 1, "res/tmp_input_buff" ); } else { dbgwrite( st_ivas->hCPE[0]->hCoreCoder[0]->input_buff, 4, 960, 1, "res/tmp_input_buff" ); } } else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) { Loading lib_enc/ivas_sba_enc.c +57 −6 Original line number Diff line number Diff line Loading @@ -218,6 +218,9 @@ ivas_error ivas_sba_enc_reconfigure( { int16_t nchan_transport_old, nSCE_old, nCPE_old; int16_t n, sce_id, cpe_id; #ifdef IMPR_TC_SWITCHING_MEMORY int16_t len_inp_memory; #endif Indice *ind_list_metadata; int32_t ivas_total_brate; ENCODER_CONFIG_HANDLE hEncoderConfig; Loading @@ -225,6 +228,10 @@ ivas_error ivas_sba_enc_reconfigure( hEncoderConfig = st_ivas->hEncoderConfig; error = IVAS_ERR_OK; #ifdef IMPR_TC_SWITCHING_MEMORY //VE: TBD - last 1ms sample are not correct but are needed for DirAC<->SPAR delay compensation len_inp_memory = ( int16_t )( hEncoderConfig->input_Fs / FRAMES_PER_SEC ) + NS2SA( hEncoderConfig->input_Fs, IVAS_FB_ENC_DELAY_NS ); #endif ivas_total_brate = hEncoderConfig->ivas_total_brate; Loading Loading @@ -376,11 +383,12 @@ ivas_error ivas_sba_enc_reconfigure( else { Indice *ind_list; int16_t nb_bits_tot; int16_t next_ind; int16_t last_ind; BSTR_ENC_HANDLE hBstr; BSTR_ENC_HANDLE hMetaData; int16_t nb_bits_tot, next_ind, last_ind; BSTR_ENC_HANDLE hBstr, hMetaData; #ifdef IMPR_TC_SWITCHING_MEMORY int16_t n_CoreCoder_save; float input_buff[MCT_MAX_BLOCKS][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )]; #endif ind_list = NULL; hBstr = NULL; Loading Loading @@ -411,15 +419,36 @@ ivas_error ivas_sba_enc_reconfigure( last_ind = hBstr->last_ind; ind_list_metadata = hMetaData->ind_list; /* destroy superfluous core coder elements */ // VE: TBV whether a core-coder can be reused #ifdef IMPR_TC_SWITCHING_MEMORY n_CoreCoder_save = min( st_ivas->nchan_transport, nchan_transport_old ); #endif /* destroy superfluous core coder elements */ for ( sce_id = st_ivas->nSCE; sce_id < nSCE_old; sce_id++ ) { #ifdef IMPR_TC_SWITCHING_MEMORY /* save input audio buffers */ if ( n_CoreCoder_save > sce_id ) { mvr2r( st_ivas->hSCE[sce_id]->hCoreCoder[0]->input_buff, input_buff[sce_id], len_inp_memory ); } #endif destroy_sce_enc( st_ivas->hSCE[sce_id] ); st_ivas->hSCE[sce_id] = NULL; } for ( cpe_id = st_ivas->nCPE; cpe_id < nCPE_old; cpe_id++ ) { #ifdef IMPR_TC_SWITCHING_MEMORY /* save input audio buffers */ for ( n = 0; n < CPE_CHANNELS; n++ ) { if( n_CoreCoder_save > cpe_id * CPE_CHANNELS + n ) { mvr2r( st_ivas->hCPE[cpe_id]->hCoreCoder[0]->input_buff, input_buff[( cpe_id - st_ivas->nCPE ) * CPE_CHANNELS + n], len_inp_memory ); } } #endif destroy_cpe_enc( st_ivas->hCPE[cpe_id] ); st_ivas->hCPE[cpe_id] = NULL; } Loading @@ -442,12 +471,14 @@ ivas_error ivas_sba_enc_reconfigure( { int16_t nSCE_existing; nSCE_existing = min( nSCE_old, st_ivas->nSCE ); for ( sce_id = 0; sce_id < nSCE_existing; sce_id++ ) { copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ } for ( sce_id = nSCE_existing; sce_id < st_ivas->nSCE; sce_id++ ) { if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) Loading @@ -455,6 +486,14 @@ ivas_error ivas_sba_enc_reconfigure( return error; } #ifdef IMPR_TC_SWITCHING_MEMORY /* propagate input audio buffers */ if ( n_CoreCoder_save > sce_id ) { mvr2r( input_buff[sce_id], st_ivas->hSCE[sce_id]->hCoreCoder[0]->input_buff, len_inp_memory ); } #endif /* prepare bitstream buffers */ st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list + sce_id * MAX_NUM_INDICES; Loading @@ -479,6 +518,7 @@ ivas_error ivas_sba_enc_reconfigure( { int16_t nCPE_existing; nCPE_existing = min( nCPE_old, st_ivas->nCPE ); for ( cpe_id = 0; cpe_id < nCPE_existing; cpe_id++ ) { st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; Loading @@ -498,6 +538,17 @@ ivas_error ivas_sba_enc_reconfigure( return error; } #ifdef IMPR_TC_SWITCHING_MEMORY /* propagate input audio buffers */ for ( n = 0; n < CPE_CHANNELS; n++ ) { if ( n_CoreCoder_save > cpe_id * CPE_CHANNELS + n ) { mvr2r( input_buff[n], st_ivas->hCPE[cpe_id]->hCoreCoder[0]->input_buff, len_inp_memory ); } } #endif /* prepare bitstream buffers */ for ( n = 0; n < CPE_CHANNELS; n++ ) { Loading Loading
lib_com/tools.c +1 −1 Original line number Diff line number Diff line Loading @@ -1447,7 +1447,7 @@ void polezero_filter( } #define WMC_TOOL_MAN // VE: define complexity macros here static float fleft_shift( float input, const int16_t shift ) { return ( input * (float) pow( 2.0, (double) shift ) ); Loading
lib_dec/ivas_spar_decoder.c +1 −2 Original line number Diff line number Diff line Loading @@ -1004,7 +1004,6 @@ void ivas_spar_dec_upmixer( #endif } /*---------------------------------------------------------------------* * TD decorrelation *---------------------------------------------------------------------*/ Loading @@ -1018,7 +1017,7 @@ void ivas_spar_dec_upmixer( mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - i], output[nchan_internal - 1 - i], output_frame ); } hSpar->hFbMixer->fb_cfg->num_in_chans = num_in_ingest; hSpar->hFbMixer->fb_cfg->num_in_chans = num_in_ingest; // VE2DB: same as below, can be simplified } else { Loading
lib_enc/ivas_dirac_enc.c +54 −11 Original line number Diff line number Diff line Loading @@ -438,9 +438,7 @@ void ivas_dirac_enc( else { /* encode SID parameters */ ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT, SBA_MODE_DIRAC ); ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT, SBA_MODE_DIRAC ); } } } Loading @@ -465,6 +463,51 @@ void ivas_dirac_enc_spar_delay_synchro( int16_t ch_idx; float tmp_buffer[L_FRAME48k]; #ifdef IMPR_TC_SWITCHING_MEMORY #if 1 /* check last sba_mode */ if ( ivas_sba_mode_select( st_ivas->hEncoderConfig->last_ivas_total_brate ) == SBA_MODE_SPAR ) { Encoder_State *sts[MCT_MAX_BLOCKS]; int16_t i_chan = 0; /* initializations */ for ( int16_t sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { sts[sce_id] = st_ivas->hSCE[sce_id]->hCoreCoder[0]; i_chan++; } for ( int16_t cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { for ( int16_t ch = 0; ch < CPE_CHANNELS; ch++ ) { sts[i_chan] = st_ivas->hCPE[cpe_id]->hCoreCoder[ch]; i_chan++; } } for ( ch_idx = 0; ch_idx < i_chan; ch_idx++ ) { mvr2r( sts[ch_idx]->input, st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay ); } } #else /* check last sba_mode */ if ( ivas_sba_mode_select( st_ivas->hEncoderConfig->last_ivas_total_brate ) == SBA_MODE_SPAR ) { for ( ch_idx = 0; ch_idx < st_ivas->hEncoderConfig->nchan_inp; ch_idx++ ) { mvr2r( data_f[ch_idx], tmp_buffer, input_frame ); //set_f( data_f[ch_idx], 0, 48 ); mvr2r( tmp_buffer, &data_f[ch_idx][st_ivas->hDirAC->num_samples_synchro_delay], input_frame - st_ivas->hDirAC->num_samples_synchro_delay ); mvr2r( &tmp_buffer[input_frame - st_ivas->hDirAC->num_samples_synchro_delay], st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay ); } } else #endif #endif { for ( ch_idx = 0; ch_idx < st_ivas->hEncoderConfig->nchan_inp; ch_idx++ ) { mvr2r( data_f[ch_idx], tmp_buffer, input_frame ); Loading @@ -472,7 +515,7 @@ void ivas_dirac_enc_spar_delay_synchro( mvr2r( tmp_buffer, &data_f[ch_idx][st_ivas->hDirAC->num_samples_synchro_delay], input_frame - st_ivas->hDirAC->num_samples_synchro_delay ); mvr2r( &tmp_buffer[input_frame - st_ivas->hDirAC->num_samples_synchro_delay], st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay ); } } return; } Loading
lib_enc/ivas_enc.c +11 −0 Original line number Diff line number Diff line Loading @@ -234,6 +234,17 @@ ivas_error ivas_enc( ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format, ivas_total_brate, hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1 ); } float tmpF = 0; dbgwrite( &tmpF, 4, 1, 960, "res/tmp_ppFilterbank_prior_input" ); if ( st_ivas->nSCE > 0 ) { dbgwrite( st_ivas->hSCE[0]->hCoreCoder[0]->input_buff, 4, 960, 1, "res/tmp_input_buff" ); } else { dbgwrite( st_ivas->hCPE[0]->hCoreCoder[0]->input_buff, 4, 960, 1, "res/tmp_input_buff" ); } } else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) { Loading
lib_enc/ivas_sba_enc.c +57 −6 Original line number Diff line number Diff line Loading @@ -218,6 +218,9 @@ ivas_error ivas_sba_enc_reconfigure( { int16_t nchan_transport_old, nSCE_old, nCPE_old; int16_t n, sce_id, cpe_id; #ifdef IMPR_TC_SWITCHING_MEMORY int16_t len_inp_memory; #endif Indice *ind_list_metadata; int32_t ivas_total_brate; ENCODER_CONFIG_HANDLE hEncoderConfig; Loading @@ -225,6 +228,10 @@ ivas_error ivas_sba_enc_reconfigure( hEncoderConfig = st_ivas->hEncoderConfig; error = IVAS_ERR_OK; #ifdef IMPR_TC_SWITCHING_MEMORY //VE: TBD - last 1ms sample are not correct but are needed for DirAC<->SPAR delay compensation len_inp_memory = ( int16_t )( hEncoderConfig->input_Fs / FRAMES_PER_SEC ) + NS2SA( hEncoderConfig->input_Fs, IVAS_FB_ENC_DELAY_NS ); #endif ivas_total_brate = hEncoderConfig->ivas_total_brate; Loading Loading @@ -376,11 +383,12 @@ ivas_error ivas_sba_enc_reconfigure( else { Indice *ind_list; int16_t nb_bits_tot; int16_t next_ind; int16_t last_ind; BSTR_ENC_HANDLE hBstr; BSTR_ENC_HANDLE hMetaData; int16_t nb_bits_tot, next_ind, last_ind; BSTR_ENC_HANDLE hBstr, hMetaData; #ifdef IMPR_TC_SWITCHING_MEMORY int16_t n_CoreCoder_save; float input_buff[MCT_MAX_BLOCKS][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )]; #endif ind_list = NULL; hBstr = NULL; Loading Loading @@ -411,15 +419,36 @@ ivas_error ivas_sba_enc_reconfigure( last_ind = hBstr->last_ind; ind_list_metadata = hMetaData->ind_list; /* destroy superfluous core coder elements */ // VE: TBV whether a core-coder can be reused #ifdef IMPR_TC_SWITCHING_MEMORY n_CoreCoder_save = min( st_ivas->nchan_transport, nchan_transport_old ); #endif /* destroy superfluous core coder elements */ for ( sce_id = st_ivas->nSCE; sce_id < nSCE_old; sce_id++ ) { #ifdef IMPR_TC_SWITCHING_MEMORY /* save input audio buffers */ if ( n_CoreCoder_save > sce_id ) { mvr2r( st_ivas->hSCE[sce_id]->hCoreCoder[0]->input_buff, input_buff[sce_id], len_inp_memory ); } #endif destroy_sce_enc( st_ivas->hSCE[sce_id] ); st_ivas->hSCE[sce_id] = NULL; } for ( cpe_id = st_ivas->nCPE; cpe_id < nCPE_old; cpe_id++ ) { #ifdef IMPR_TC_SWITCHING_MEMORY /* save input audio buffers */ for ( n = 0; n < CPE_CHANNELS; n++ ) { if( n_CoreCoder_save > cpe_id * CPE_CHANNELS + n ) { mvr2r( st_ivas->hCPE[cpe_id]->hCoreCoder[0]->input_buff, input_buff[( cpe_id - st_ivas->nCPE ) * CPE_CHANNELS + n], len_inp_memory ); } } #endif destroy_cpe_enc( st_ivas->hCPE[cpe_id] ); st_ivas->hCPE[cpe_id] = NULL; } Loading @@ -442,12 +471,14 @@ ivas_error ivas_sba_enc_reconfigure( { int16_t nSCE_existing; nSCE_existing = min( nSCE_old, st_ivas->nSCE ); for ( sce_id = 0; sce_id < nSCE_existing; sce_id++ ) { copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ } for ( sce_id = nSCE_existing; sce_id < st_ivas->nSCE; sce_id++ ) { if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) Loading @@ -455,6 +486,14 @@ ivas_error ivas_sba_enc_reconfigure( return error; } #ifdef IMPR_TC_SWITCHING_MEMORY /* propagate input audio buffers */ if ( n_CoreCoder_save > sce_id ) { mvr2r( input_buff[sce_id], st_ivas->hSCE[sce_id]->hCoreCoder[0]->input_buff, len_inp_memory ); } #endif /* prepare bitstream buffers */ st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list + sce_id * MAX_NUM_INDICES; Loading @@ -479,6 +518,7 @@ ivas_error ivas_sba_enc_reconfigure( { int16_t nCPE_existing; nCPE_existing = min( nCPE_old, st_ivas->nCPE ); for ( cpe_id = 0; cpe_id < nCPE_existing; cpe_id++ ) { st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; Loading @@ -498,6 +538,17 @@ ivas_error ivas_sba_enc_reconfigure( return error; } #ifdef IMPR_TC_SWITCHING_MEMORY /* propagate input audio buffers */ for ( n = 0; n < CPE_CHANNELS; n++ ) { if ( n_CoreCoder_save > cpe_id * CPE_CHANNELS + n ) { mvr2r( input_buff[n], st_ivas->hCPE[cpe_id]->hCoreCoder[0]->input_buff, len_inp_memory ); } } #endif /* prepare bitstream buffers */ for ( n = 0; n < CPE_CHANNELS; n++ ) { Loading