Loading lib_com/ivas_prot.h +4 −3 Original line number Diff line number Diff line Loading @@ -1336,7 +1336,8 @@ void ivas_ism_dec_digest_tc( void ivas_param_ism_dec_digest_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ Word32 *transport_channels_f[] /* i : synthesized core-coder transport channels/DirAC output */ Word32 *transport_channels[], /* i : synthesized core-coder transport channels/DirAC output */ Word16 q_tc_in ); #else void ivas_param_ism_dec_digest_tc( Loading lib_dec/ivas_ism_param_dec.c +26 −100 Original line number Diff line number Diff line Loading @@ -685,7 +685,7 @@ static void ivas_param_ism_render_slot_fx( { Word32 tmp_2 = Mpy_32_32( tmp_1_fx, mixing_matrix_fx[bin_idx][outchIdx + inchIdx * num_ch_LS] ); // hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin Word32 tmp_3 = Mpy_32_32( L_sub( ONE_IN_Q31, tmp_1_fx ), hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_old_fx[bin_idx][outchIdx + inchIdx * num_ch_LS] ); // 1 + hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old mixing_matrix_smooth_fx = BASOP_Util_Add_Mant32Exp( tmp_2, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx, tmp_3, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old_fx, &res_exp ); mixing_matrix_smooth_fx = BASOP_Util_Add_Mant32Exp( tmp_2, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx[bin_idx], tmp_3, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old_fx[bin_idx], &res_exp ); Word32 tmp_4 = Mpy_32_32( mixing_matrix_smooth_fx, Cldfb_RealBuffer_in_fx[inchIdx][bin_idx] ); // res_exp + hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp Word32 tmp_5 = Mpy_32_32( mixing_matrix_smooth_fx, Cldfb_ImagBuffer_in_fx[inchIdx][bin_idx] ); // res_exp + hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp Loading Loading @@ -833,16 +833,10 @@ static ivas_error ivas_param_ism_rendering_init_fx( set32_fx( hParamIsmRendering->mixing_matrix_lin_old_fx[bin_idx], 0, PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); } #ifdef MSAN_FIX hParamIsmRendering->exp_mixing_matrix_lin_old_fx = 0; set16_fx( hParamIsmRendering->exp_mixing_matrix_lin_old_fx, 0, CLDFB_NO_CHANNELS_MAX ); #endif /* memory allocation for proto matrix and interpolator */ #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED IF( ( hParamIsmRendering->proto_matrix = (float *) malloc( hOutSetup.nchan_out_woLFE * nchan_transport * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for proto matrix\n" ) ); } #endif IF( ( hParamIsmRendering->proto_matrix_fx = (Word16 *) malloc( hOutSetup.nchan_out_woLFE * nchan_transport * sizeof( Word16 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for proto matrix\n" ) ); Loading @@ -860,14 +854,6 @@ static ivas_error ivas_param_ism_rendering_init_fx( { /* computation of proto matrix */ ivas_ism_get_proto_matrix_fx( hOutSetup, nchan_transport, hParamIsmRendering->proto_matrix_fx ); #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED FOR( Word16 idx = 0; idx < hOutSetup.nchan_out_woLFE; idx++ ) { hParamIsmRendering->proto_matrix[idx] = (float) hParamIsmRendering->proto_matrix_fx[idx] / ( 1 << 15 ); hParamIsmRendering->proto_matrix[idx + hOutSetup.nchan_out_woLFE] = (float) hParamIsmRendering->proto_matrix_fx[idx + hOutSetup.nchan_out_woLFE] / ( 1 << 15 ); } #endif } /* computation of interpolator*/ Loading Loading @@ -918,7 +904,7 @@ static ivas_error ivas_param_ism_rendering_init( static void ivas_param_ism_update_mixing_matrix_fx( PARAM_ISM_DEC_HANDLE hParamIsmDec, Word32 mixing_matrix_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX], Word16 mixing_matrix_exp, Word16 mixing_matrix_exp[CLDFB_NO_CHANNELS_MAX], const Word16 nchan_in, const Word16 nchan_out ) { Loading @@ -945,7 +931,7 @@ static void ivas_param_ism_update_mixing_matrix_fx( } } hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old_fx = mixing_matrix_exp; Copy( mixing_matrix_exp, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old_fx, CLDFB_NO_CHANNELS_MAX ); move16(); return; Loading Loading @@ -1163,10 +1149,7 @@ ivas_error ivas_param_ism_dec_open_fx( IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) { nchan_full = nchan_transport; #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; #endif hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx = NULL; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx = NULL; } Loading @@ -1183,20 +1166,6 @@ ivas_error ivas_param_ism_dec_open_fx( n_slots_to_alloc = CLDFB_SLOTS_PER_SUBFRAME * MAX_PARAM_SPATIAL_SUBFRAMES; move16(); } #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED IF( ( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = (float *) malloc( n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM JBM Rendering handle\n" ) ); } set_zero( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc, n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands ); IF( ( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = (float *) malloc( n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM JBM Rendering handle\n" ) ); } set_zero( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc, n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands ); #endif IF( ( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx = (Word32 *) malloc( n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands * sizeof( Word32 ) ) ) == NULL ) { Loading @@ -1222,10 +1191,6 @@ ivas_error ivas_param_ism_dec_open_fx( } ELSE { #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; #endif hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx = NULL; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx = NULL; IF( st_ivas->hTcBuffer == NULL ) Loading Loading @@ -1475,14 +1440,6 @@ void ivas_param_ism_dec_close_fx( IF( !( EQ_16( output_config, IVAS_AUDIO_CONFIG_MONO ) || EQ_16( output_config, IVAS_AUDIO_CONFIG_STEREO ) ) ) { /* Param ISM Rendering */ #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED // To be removed later: Freeing memory allocated to float pointers IF( hParamIsmDec->hParamIsmRendering->proto_matrix != NULL ) { free( hParamIsmDec->hParamIsmRendering->proto_matrix ); hParamIsmDec->hParamIsmRendering->proto_matrix = NULL; } #endif IF( hParamIsmDec->hParamIsmRendering->interpolator_fx != NULL ) { free( hParamIsmDec->hParamIsmRendering->interpolator_fx ); Loading @@ -1494,19 +1451,6 @@ void ivas_param_ism_dec_close_fx( hParamIsmDec->hParamIsmRendering->proto_matrix_fx = NULL; } } #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED // To be removed later: Freeing memory allocated to float pointers IF( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc != NULL ) { free( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc ); hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; } IF( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc != NULL ) { free( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc ); hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; } #endif IF( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx != NULL ) { free( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx ); Loading Loading @@ -2090,14 +2034,14 @@ void ivas_ism_dec_digest_tc( void ivas_param_ism_dec_digest_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ Word32 *transport_channels[] /* i : synthesized core-coder transport channels/DirAC output */ ) Word32 *transport_channels[], /* i : synthesized core-coder transport channels/DirAC output */ Word16 q_tc_in ) { Word16 exp_ref_power = 31, exp_cx_diag = 31; Word16 exp_real_tmp = 0, exp_imag_tmp = 0; Word32 ref_power_fx[CLDFB_NO_CHANNELS_MAX]; Word32 cx_diag_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_DMX]; Word16 q_tc = 13; Word16 q_tc = q_tc_in; Word16 ch, nchan_transport, nchan_out, nchan_out_woLFE, i; Word16 slot_idx, bin_idx; Word32 ivas_total_brate; Loading @@ -2119,8 +2063,8 @@ void ivas_param_ism_dec_digest_tc_fx( nchan_transport = st_ivas->nchan_transport; ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = 23; hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = 23; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = 25; hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = 25; IF( EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { nchan_out = st_ivas->nchan_ism; Loading Loading @@ -2209,10 +2153,6 @@ void ivas_param_ism_dec_digest_tc_fx( hParamIsmDec->hParamIsmRendering->proto_matrix_fx[nchan_out_woLFE + j] = ONE_IN_Q14; } } #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED hParamIsmDec->hParamIsmRendering->proto_matrix[j] = fixedToFloat( hParamIsmDec->hParamIsmRendering->proto_matrix_fx[j], Q15 ); hParamIsmDec->hParamIsmRendering->proto_matrix[nchan_out_woLFE + j] = fixedToFloat( hParamIsmDec->hParamIsmRendering->proto_matrix_fx[nchan_out_woLFE + j], Q15 ); #endif } } Loading @@ -2220,9 +2160,14 @@ void ivas_param_ism_dec_digest_tc_fx( { /*TODO : FhG to check*/ ivas_ism_param_dec_tc_gain_ajust_fx( st_ivas, output_frame, fade_len, transport_channels, &q_tc ); IF( NE_16( q_tc, q_tc_in ) ) { FOR( i = 0; i < 2; i++ ) scale_sig32( transport_channels[i], output_frame, sub( Q13, q_tc ) ); q_tc = 13; { scale_sig32( transport_channels[i], output_frame, sub( q_tc_in, q_tc ) ); } q_tc = q_tc_in; } } FOR( ch = 0; ch < nchan_transport; ch++ ) Loading @@ -2234,12 +2179,12 @@ void ivas_param_ism_dec_digest_tc_fx( { Word32 RealBuffer_fx[CLDFB_NO_CHANNELS_MAX]; Word32 ImagBuffer_fx[CLDFB_NO_CHANNELS_MAX]; q_tc = 13; q_tc = q_tc_in; cldfbAnalysis_ts_fx_fixed_q( &( transport_channels[ch][hSpatParamRendCom->num_freq_bands * slot_idx] ), RealBuffer_fx, ImagBuffer_fx, hSpatParamRendCom->num_freq_bands, st_ivas->cldfbAnaDec[ch], &q_tc ); Copy32( RealBuffer_fx, &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); Copy32( ImagBuffer_fx, &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = 23; hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = 23; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = sub( 31, q_tc ); hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = sub( 31, q_tc ); } Word16 scale_factor_real, scale_factor_imag; Loading Loading @@ -2277,29 +2222,10 @@ void ivas_param_ism_dec_digest_tc_fx( set32_fx( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[bin_idx], 0, nchan_transport * nchan_out_woLFE ); } #endif #if 1 /*TODO : To be removed (Fixed to float) */ FOR( ch = 0; ch < nchan_transport; ch++ ) { scale_sig32( st_ivas->cldfbAnaDec[ch]->cldfb_state_fx, st_ivas->cldfbAnaDec[ch]->cldfb_size, sub( Q11, Q13 ) ); st_ivas->cldfbAnaDec[ch]->Q_cldfb_state = Q11; /* CLDFB Analysis */ FOR( slot_idx = 0; slot_idx < nCldfbSlots; slot_idx++ ) { fixedToFloat_arrL( &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], Q8, hSpatParamRendCom->num_freq_bands ); fixedToFloat_arrL( &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], Q8, hSpatParamRendCom->num_freq_bands ); } } #endif /* Compute mixing matrix */ Word16 temp_exp[CLDFB_NO_CHANNELS_MAX]; ivas_param_ism_compute_mixing_matrix_fx( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response_fx, nchan_transport, nchan_out_woLFE, cx_diag_fx, exp_cx_diag, ref_power_fx, exp_ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, temp_exp ); /////////fix2float (to be removed) for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) { me2f_buf( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[i], temp_exp[i], hParamIsmDec->hParamIsmRendering->mixing_matrix_lin[i], PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); } ////////////////////////////////// /* Compute mixing matrix */ ivas_param_ism_compute_mixing_matrix_fx( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response_fx, nchan_transport, nchan_out_woLFE, cx_diag_fx, exp_cx_diag, ref_power_fx, exp_ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx ); pop_wmops(); Loading lib_dec/ivas_jbm_dec.c +9 −32 Original line number Diff line number Diff line Loading @@ -2181,27 +2181,15 @@ void ivas_jbm_dec_feed_tc_to_renderer( ELSE IF( EQ_16( st_ivas->renderer_type, RENDERER_PARAM_ISM ) || EQ_16( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) { #ifdef IVAS_FLOAT_FIXED floatToFixed_arr32( p_data_f[0], p_data_f_fx[0], Q13, MAX_CLDFB_DIGEST_CHANNELS * MAX_JBM_L_FRAME48k ); #if 1 /*Float to fixed conversions*/ FOR( Word16 ch = 0; ch < MAX_INTERN_CHANNELS; ch++ ) { IF( st_ivas->cldfbAnaDec[ch] ) { scale_sig32( st_ivas->cldfbAnaDec[ch]->cldfb_state_fx, st_ivas->cldfbAnaDec[ch]->cldfb_size, sub( Q13, Q11 ) ); st_ivas->cldfbAnaDec[ch]->Q_cldfb_state = Q13; } } FOR( Word16 ch = 0; ch < st_ivas->nchan_transport; ch++ ) { FOR( Word16 slot_idx = 0; slot_idx < n_render_timeslots; slot_idx++ ) { floatToFixed_arr32( &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[slot_idx * st_ivas->hSpatParamRendCom->num_freq_bands * st_ivas->nchan_transport + ch * st_ivas->hSpatParamRendCom->num_freq_bands], &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[slot_idx * st_ivas->hSpatParamRendCom->num_freq_bands * st_ivas->nchan_transport + ch * st_ivas->hSpatParamRendCom->num_freq_bands], Q8, st_ivas->hSpatParamRendCom->num_freq_bands ); floatToFixed_arr32( &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[slot_idx * st_ivas->hSpatParamRendCom->num_freq_bands * st_ivas->nchan_transport + ch * st_ivas->hSpatParamRendCom->num_freq_bands], &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[slot_idx * st_ivas->hSpatParamRendCom->num_freq_bands * st_ivas->nchan_transport + ch * st_ivas->hSpatParamRendCom->num_freq_bands], Q8, st_ivas->hSpatParamRendCom->num_freq_bands ); } } #endif ivas_param_ism_dec_digest_tc_fx( st_ivas, n_render_timeslots, p_data_f_fx ); fixedToFloat_arrL( p_data_f_fx[0], p_data_f[0], Q13, MAX_CLDFB_DIGEST_CHANNELS * MAX_JBM_L_FRAME48k ); /////////////////////////// flt2fix /////////////////////// floatToFixed_arr32( p_data_f[0], p_data_f_fx[0], Q11, MAX_CLDFB_DIGEST_CHANNELS * MAX_JBM_L_FRAME48k ); /////////////////////////// flt2fix /////////////////////// ivas_param_ism_dec_digest_tc_fx( st_ivas, n_render_timeslots, p_data_f_fx, Q11 ); /////////////////////////// fix2flt /////////////////////// fixedToFloat_arrL( p_data_f_fx[0], p_data_f[0], Q11, MAX_CLDFB_DIGEST_CHANNELS * MAX_JBM_L_FRAME48k ); /////////////////////////// fix2flt /////////////////////// #else ivas_param_ism_dec_digest_tc( st_ivas, n_render_timeslots, p_data_f ); #endif Loading Loading @@ -2742,17 +2730,6 @@ ivas_error ivas_jbm_dec_render( /*i/o : st_ivas->cldfbSynDec[ch]->cldfb_state------------------------------------------------------------Q11----*/ /*--------------------------------------------------------------------------------------------------------------*/ f2me_buf( (float *) st_ivas->hParamIsmDec->hParamIsmRendering->mixing_matrix_lin, (Word32 *) st_ivas->hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, &st_ivas->hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx, CLDFB_NO_CHANNELS_MAX * ( PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ) ); Word16 n_slots_to_alloc = st_ivas->hDecoderConfig->Opt_tsm == 1 ? 32 : 16; Word16 n_chan_transport_t = st_ivas->nchan_transport; Word16 freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; Word16 size = n_slots_to_alloc * n_chan_transport_t * freq_bands; f2me_buf( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc, st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx, &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp, size ); f2me_buf( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc, st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx, &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp, size ); Word16 n_out; if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) { Loading lib_dec/ivas_stat_dec.h +6 −9 Original line number Diff line number Diff line Loading @@ -698,24 +698,21 @@ typedef struct param_ism_rendering Word16 *proto_matrix_fx; Word16 *interpolator_fx; /* Q15 */ Word32 *Cldfb_RealBuffer_tc_fx; Word16 *Cldfb_RealBuffer_tc_e; Word16 Cldfb_RealBuffer_tc_exp; Word32 *Cldfb_ImagBuffer_tc_fx; Word16 *Cldfb_ImagBuffer_tc_e; Word16 Cldfb_ImagBuffer_tc_exp; Word32 mixing_matrix_lin_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; Word16 exp_mixing_matrix_lin_fx; Word16 exp_mixing_matrix_lin_fx[CLDFB_NO_CHANNELS_MAX]; Word32 mixing_matrix_lin_old_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; Word16 exp_mixing_matrix_lin_old_fx; #endif // IVAS_FLOAT_FIXED Word16 exp_mixing_matrix_lin_old_fx[CLDFB_NO_CHANNELS_MAX]; #else // IVAS_FLOAT_FIXED float *proto_matrix; #ifndef IVAS_FLOAT_FIXED float *interpolator; float mixing_matrix_lin_old[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; #endif float mixing_matrix_lin[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; float mixing_matrix_lin_old[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; float *Cldfb_RealBuffer_tc; float *Cldfb_ImagBuffer_tc; #endif } PARAM_ISM_RENDERING_DATA, *PARAM_ISM_RENDERING_HANDLE; Loading lib_dec/lib_dec_fx.c +0 −22 Original line number Diff line number Diff line Loading @@ -1438,17 +1438,6 @@ static ivas_error IVAS_DEC_GetTcSamples( { num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; } FOR( Word16 lp = 0; lp < n_ch_cldfb_tmp; lp++ ) { Word16 length = 15 * num_freq_bands * n_ch_cldfb_tmp + num_freq_bands * ( n_ch_cldfb_tmp - 1 ) + st_ivas->cldfbAnaDec[lp]->no_channels; FOR( Word16 i = 0; i < length; i++ ) { st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[i] = floatToFixed( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[i], 6 ); st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[i] = floatToFixed( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[i], 6 ); } } } ELSE IF( st_ivas->ivas_format == MC_FORMAT ) { Loading Loading @@ -1500,17 +1489,6 @@ static ivas_error IVAS_DEC_GetTcSamples( { num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; } FOR( Word16 lp = 0; lp < n_ch_cldfb_tmp; lp++ ) { Word16 length = 15 * num_freq_bands * n_ch_cldfb_tmp + num_freq_bands * ( n_ch_cldfb_tmp - 1 ) + st_ivas->cldfbAnaDec[lp]->no_channels; FOR( Word16 lp2 = 0; lp2 < length; lp2++ ) { st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[lp2] = fixedToFloat( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[lp2], 6 ); st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[lp2] = fixedToFloat( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[lp2], 6 ); } } } ELSE IF( st_ivas->ivas_format == MC_FORMAT ) { Loading Loading
lib_com/ivas_prot.h +4 −3 Original line number Diff line number Diff line Loading @@ -1336,7 +1336,8 @@ void ivas_ism_dec_digest_tc( void ivas_param_ism_dec_digest_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ Word32 *transport_channels_f[] /* i : synthesized core-coder transport channels/DirAC output */ Word32 *transport_channels[], /* i : synthesized core-coder transport channels/DirAC output */ Word16 q_tc_in ); #else void ivas_param_ism_dec_digest_tc( Loading
lib_dec/ivas_ism_param_dec.c +26 −100 Original line number Diff line number Diff line Loading @@ -685,7 +685,7 @@ static void ivas_param_ism_render_slot_fx( { Word32 tmp_2 = Mpy_32_32( tmp_1_fx, mixing_matrix_fx[bin_idx][outchIdx + inchIdx * num_ch_LS] ); // hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin Word32 tmp_3 = Mpy_32_32( L_sub( ONE_IN_Q31, tmp_1_fx ), hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_old_fx[bin_idx][outchIdx + inchIdx * num_ch_LS] ); // 1 + hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old mixing_matrix_smooth_fx = BASOP_Util_Add_Mant32Exp( tmp_2, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx, tmp_3, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old_fx, &res_exp ); mixing_matrix_smooth_fx = BASOP_Util_Add_Mant32Exp( tmp_2, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx[bin_idx], tmp_3, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old_fx[bin_idx], &res_exp ); Word32 tmp_4 = Mpy_32_32( mixing_matrix_smooth_fx, Cldfb_RealBuffer_in_fx[inchIdx][bin_idx] ); // res_exp + hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp Word32 tmp_5 = Mpy_32_32( mixing_matrix_smooth_fx, Cldfb_ImagBuffer_in_fx[inchIdx][bin_idx] ); // res_exp + hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp Loading Loading @@ -833,16 +833,10 @@ static ivas_error ivas_param_ism_rendering_init_fx( set32_fx( hParamIsmRendering->mixing_matrix_lin_old_fx[bin_idx], 0, PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); } #ifdef MSAN_FIX hParamIsmRendering->exp_mixing_matrix_lin_old_fx = 0; set16_fx( hParamIsmRendering->exp_mixing_matrix_lin_old_fx, 0, CLDFB_NO_CHANNELS_MAX ); #endif /* memory allocation for proto matrix and interpolator */ #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED IF( ( hParamIsmRendering->proto_matrix = (float *) malloc( hOutSetup.nchan_out_woLFE * nchan_transport * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for proto matrix\n" ) ); } #endif IF( ( hParamIsmRendering->proto_matrix_fx = (Word16 *) malloc( hOutSetup.nchan_out_woLFE * nchan_transport * sizeof( Word16 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for proto matrix\n" ) ); Loading @@ -860,14 +854,6 @@ static ivas_error ivas_param_ism_rendering_init_fx( { /* computation of proto matrix */ ivas_ism_get_proto_matrix_fx( hOutSetup, nchan_transport, hParamIsmRendering->proto_matrix_fx ); #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED FOR( Word16 idx = 0; idx < hOutSetup.nchan_out_woLFE; idx++ ) { hParamIsmRendering->proto_matrix[idx] = (float) hParamIsmRendering->proto_matrix_fx[idx] / ( 1 << 15 ); hParamIsmRendering->proto_matrix[idx + hOutSetup.nchan_out_woLFE] = (float) hParamIsmRendering->proto_matrix_fx[idx + hOutSetup.nchan_out_woLFE] / ( 1 << 15 ); } #endif } /* computation of interpolator*/ Loading Loading @@ -918,7 +904,7 @@ static ivas_error ivas_param_ism_rendering_init( static void ivas_param_ism_update_mixing_matrix_fx( PARAM_ISM_DEC_HANDLE hParamIsmDec, Word32 mixing_matrix_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX], Word16 mixing_matrix_exp, Word16 mixing_matrix_exp[CLDFB_NO_CHANNELS_MAX], const Word16 nchan_in, const Word16 nchan_out ) { Loading @@ -945,7 +931,7 @@ static void ivas_param_ism_update_mixing_matrix_fx( } } hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old_fx = mixing_matrix_exp; Copy( mixing_matrix_exp, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_old_fx, CLDFB_NO_CHANNELS_MAX ); move16(); return; Loading Loading @@ -1163,10 +1149,7 @@ ivas_error ivas_param_ism_dec_open_fx( IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) { nchan_full = nchan_transport; #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; #endif hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx = NULL; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx = NULL; } Loading @@ -1183,20 +1166,6 @@ ivas_error ivas_param_ism_dec_open_fx( n_slots_to_alloc = CLDFB_SLOTS_PER_SUBFRAME * MAX_PARAM_SPATIAL_SUBFRAMES; move16(); } #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED IF( ( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = (float *) malloc( n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM JBM Rendering handle\n" ) ); } set_zero( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc, n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands ); IF( ( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = (float *) malloc( n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM JBM Rendering handle\n" ) ); } set_zero( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc, n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands ); #endif IF( ( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx = (Word32 *) malloc( n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands * sizeof( Word32 ) ) ) == NULL ) { Loading @@ -1222,10 +1191,6 @@ ivas_error ivas_param_ism_dec_open_fx( } ELSE { #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; #endif hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx = NULL; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx = NULL; IF( st_ivas->hTcBuffer == NULL ) Loading Loading @@ -1475,14 +1440,6 @@ void ivas_param_ism_dec_close_fx( IF( !( EQ_16( output_config, IVAS_AUDIO_CONFIG_MONO ) || EQ_16( output_config, IVAS_AUDIO_CONFIG_STEREO ) ) ) { /* Param ISM Rendering */ #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED // To be removed later: Freeing memory allocated to float pointers IF( hParamIsmDec->hParamIsmRendering->proto_matrix != NULL ) { free( hParamIsmDec->hParamIsmRendering->proto_matrix ); hParamIsmDec->hParamIsmRendering->proto_matrix = NULL; } #endif IF( hParamIsmDec->hParamIsmRendering->interpolator_fx != NULL ) { free( hParamIsmDec->hParamIsmRendering->interpolator_fx ); Loading @@ -1494,19 +1451,6 @@ void ivas_param_ism_dec_close_fx( hParamIsmDec->hParamIsmRendering->proto_matrix_fx = NULL; } } #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED // To be removed later: Freeing memory allocated to float pointers IF( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc != NULL ) { free( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc ); hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; } IF( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc != NULL ) { free( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc ); hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; } #endif IF( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx != NULL ) { free( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx ); Loading Loading @@ -2090,14 +2034,14 @@ void ivas_ism_dec_digest_tc( void ivas_param_ism_dec_digest_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ Word32 *transport_channels[] /* i : synthesized core-coder transport channels/DirAC output */ ) Word32 *transport_channels[], /* i : synthesized core-coder transport channels/DirAC output */ Word16 q_tc_in ) { Word16 exp_ref_power = 31, exp_cx_diag = 31; Word16 exp_real_tmp = 0, exp_imag_tmp = 0; Word32 ref_power_fx[CLDFB_NO_CHANNELS_MAX]; Word32 cx_diag_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_DMX]; Word16 q_tc = 13; Word16 q_tc = q_tc_in; Word16 ch, nchan_transport, nchan_out, nchan_out_woLFE, i; Word16 slot_idx, bin_idx; Word32 ivas_total_brate; Loading @@ -2119,8 +2063,8 @@ void ivas_param_ism_dec_digest_tc_fx( nchan_transport = st_ivas->nchan_transport; ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = 23; hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = 23; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = 25; hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = 25; IF( EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { nchan_out = st_ivas->nchan_ism; Loading Loading @@ -2209,10 +2153,6 @@ void ivas_param_ism_dec_digest_tc_fx( hParamIsmDec->hParamIsmRendering->proto_matrix_fx[nchan_out_woLFE + j] = ONE_IN_Q14; } } #ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED hParamIsmDec->hParamIsmRendering->proto_matrix[j] = fixedToFloat( hParamIsmDec->hParamIsmRendering->proto_matrix_fx[j], Q15 ); hParamIsmDec->hParamIsmRendering->proto_matrix[nchan_out_woLFE + j] = fixedToFloat( hParamIsmDec->hParamIsmRendering->proto_matrix_fx[nchan_out_woLFE + j], Q15 ); #endif } } Loading @@ -2220,9 +2160,14 @@ void ivas_param_ism_dec_digest_tc_fx( { /*TODO : FhG to check*/ ivas_ism_param_dec_tc_gain_ajust_fx( st_ivas, output_frame, fade_len, transport_channels, &q_tc ); IF( NE_16( q_tc, q_tc_in ) ) { FOR( i = 0; i < 2; i++ ) scale_sig32( transport_channels[i], output_frame, sub( Q13, q_tc ) ); q_tc = 13; { scale_sig32( transport_channels[i], output_frame, sub( q_tc_in, q_tc ) ); } q_tc = q_tc_in; } } FOR( ch = 0; ch < nchan_transport; ch++ ) Loading @@ -2234,12 +2179,12 @@ void ivas_param_ism_dec_digest_tc_fx( { Word32 RealBuffer_fx[CLDFB_NO_CHANNELS_MAX]; Word32 ImagBuffer_fx[CLDFB_NO_CHANNELS_MAX]; q_tc = 13; q_tc = q_tc_in; cldfbAnalysis_ts_fx_fixed_q( &( transport_channels[ch][hSpatParamRendCom->num_freq_bands * slot_idx] ), RealBuffer_fx, ImagBuffer_fx, hSpatParamRendCom->num_freq_bands, st_ivas->cldfbAnaDec[ch], &q_tc ); Copy32( RealBuffer_fx, &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); Copy32( ImagBuffer_fx, &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = 23; hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = 23; hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = sub( 31, q_tc ); hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = sub( 31, q_tc ); } Word16 scale_factor_real, scale_factor_imag; Loading Loading @@ -2277,29 +2222,10 @@ void ivas_param_ism_dec_digest_tc_fx( set32_fx( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[bin_idx], 0, nchan_transport * nchan_out_woLFE ); } #endif #if 1 /*TODO : To be removed (Fixed to float) */ FOR( ch = 0; ch < nchan_transport; ch++ ) { scale_sig32( st_ivas->cldfbAnaDec[ch]->cldfb_state_fx, st_ivas->cldfbAnaDec[ch]->cldfb_size, sub( Q11, Q13 ) ); st_ivas->cldfbAnaDec[ch]->Q_cldfb_state = Q11; /* CLDFB Analysis */ FOR( slot_idx = 0; slot_idx < nCldfbSlots; slot_idx++ ) { fixedToFloat_arrL( &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], Q8, hSpatParamRendCom->num_freq_bands ); fixedToFloat_arrL( &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], Q8, hSpatParamRendCom->num_freq_bands ); } } #endif /* Compute mixing matrix */ Word16 temp_exp[CLDFB_NO_CHANNELS_MAX]; ivas_param_ism_compute_mixing_matrix_fx( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response_fx, nchan_transport, nchan_out_woLFE, cx_diag_fx, exp_cx_diag, ref_power_fx, exp_ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, temp_exp ); /////////fix2float (to be removed) for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) { me2f_buf( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[i], temp_exp[i], hParamIsmDec->hParamIsmRendering->mixing_matrix_lin[i], PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); } ////////////////////////////////// /* Compute mixing matrix */ ivas_param_ism_compute_mixing_matrix_fx( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response_fx, nchan_transport, nchan_out_woLFE, cx_diag_fx, exp_cx_diag, ref_power_fx, exp_ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx ); pop_wmops(); Loading
lib_dec/ivas_jbm_dec.c +9 −32 Original line number Diff line number Diff line Loading @@ -2181,27 +2181,15 @@ void ivas_jbm_dec_feed_tc_to_renderer( ELSE IF( EQ_16( st_ivas->renderer_type, RENDERER_PARAM_ISM ) || EQ_16( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) { #ifdef IVAS_FLOAT_FIXED floatToFixed_arr32( p_data_f[0], p_data_f_fx[0], Q13, MAX_CLDFB_DIGEST_CHANNELS * MAX_JBM_L_FRAME48k ); #if 1 /*Float to fixed conversions*/ FOR( Word16 ch = 0; ch < MAX_INTERN_CHANNELS; ch++ ) { IF( st_ivas->cldfbAnaDec[ch] ) { scale_sig32( st_ivas->cldfbAnaDec[ch]->cldfb_state_fx, st_ivas->cldfbAnaDec[ch]->cldfb_size, sub( Q13, Q11 ) ); st_ivas->cldfbAnaDec[ch]->Q_cldfb_state = Q13; } } FOR( Word16 ch = 0; ch < st_ivas->nchan_transport; ch++ ) { FOR( Word16 slot_idx = 0; slot_idx < n_render_timeslots; slot_idx++ ) { floatToFixed_arr32( &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[slot_idx * st_ivas->hSpatParamRendCom->num_freq_bands * st_ivas->nchan_transport + ch * st_ivas->hSpatParamRendCom->num_freq_bands], &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[slot_idx * st_ivas->hSpatParamRendCom->num_freq_bands * st_ivas->nchan_transport + ch * st_ivas->hSpatParamRendCom->num_freq_bands], Q8, st_ivas->hSpatParamRendCom->num_freq_bands ); floatToFixed_arr32( &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[slot_idx * st_ivas->hSpatParamRendCom->num_freq_bands * st_ivas->nchan_transport + ch * st_ivas->hSpatParamRendCom->num_freq_bands], &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[slot_idx * st_ivas->hSpatParamRendCom->num_freq_bands * st_ivas->nchan_transport + ch * st_ivas->hSpatParamRendCom->num_freq_bands], Q8, st_ivas->hSpatParamRendCom->num_freq_bands ); } } #endif ivas_param_ism_dec_digest_tc_fx( st_ivas, n_render_timeslots, p_data_f_fx ); fixedToFloat_arrL( p_data_f_fx[0], p_data_f[0], Q13, MAX_CLDFB_DIGEST_CHANNELS * MAX_JBM_L_FRAME48k ); /////////////////////////// flt2fix /////////////////////// floatToFixed_arr32( p_data_f[0], p_data_f_fx[0], Q11, MAX_CLDFB_DIGEST_CHANNELS * MAX_JBM_L_FRAME48k ); /////////////////////////// flt2fix /////////////////////// ivas_param_ism_dec_digest_tc_fx( st_ivas, n_render_timeslots, p_data_f_fx, Q11 ); /////////////////////////// fix2flt /////////////////////// fixedToFloat_arrL( p_data_f_fx[0], p_data_f[0], Q11, MAX_CLDFB_DIGEST_CHANNELS * MAX_JBM_L_FRAME48k ); /////////////////////////// fix2flt /////////////////////// #else ivas_param_ism_dec_digest_tc( st_ivas, n_render_timeslots, p_data_f ); #endif Loading Loading @@ -2742,17 +2730,6 @@ ivas_error ivas_jbm_dec_render( /*i/o : st_ivas->cldfbSynDec[ch]->cldfb_state------------------------------------------------------------Q11----*/ /*--------------------------------------------------------------------------------------------------------------*/ f2me_buf( (float *) st_ivas->hParamIsmDec->hParamIsmRendering->mixing_matrix_lin, (Word32 *) st_ivas->hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, &st_ivas->hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx, CLDFB_NO_CHANNELS_MAX * ( PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ) ); Word16 n_slots_to_alloc = st_ivas->hDecoderConfig->Opt_tsm == 1 ? 32 : 16; Word16 n_chan_transport_t = st_ivas->nchan_transport; Word16 freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; Word16 size = n_slots_to_alloc * n_chan_transport_t * freq_bands; f2me_buf( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc, st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx, &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp, size ); f2me_buf( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc, st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx, &st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp, size ); Word16 n_out; if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) { Loading
lib_dec/ivas_stat_dec.h +6 −9 Original line number Diff line number Diff line Loading @@ -698,24 +698,21 @@ typedef struct param_ism_rendering Word16 *proto_matrix_fx; Word16 *interpolator_fx; /* Q15 */ Word32 *Cldfb_RealBuffer_tc_fx; Word16 *Cldfb_RealBuffer_tc_e; Word16 Cldfb_RealBuffer_tc_exp; Word32 *Cldfb_ImagBuffer_tc_fx; Word16 *Cldfb_ImagBuffer_tc_e; Word16 Cldfb_ImagBuffer_tc_exp; Word32 mixing_matrix_lin_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; Word16 exp_mixing_matrix_lin_fx; Word16 exp_mixing_matrix_lin_fx[CLDFB_NO_CHANNELS_MAX]; Word32 mixing_matrix_lin_old_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; Word16 exp_mixing_matrix_lin_old_fx; #endif // IVAS_FLOAT_FIXED Word16 exp_mixing_matrix_lin_old_fx[CLDFB_NO_CHANNELS_MAX]; #else // IVAS_FLOAT_FIXED float *proto_matrix; #ifndef IVAS_FLOAT_FIXED float *interpolator; float mixing_matrix_lin_old[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; #endif float mixing_matrix_lin[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; float mixing_matrix_lin_old[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; float *Cldfb_RealBuffer_tc; float *Cldfb_ImagBuffer_tc; #endif } PARAM_ISM_RENDERING_DATA, *PARAM_ISM_RENDERING_HANDLE; Loading
lib_dec/lib_dec_fx.c +0 −22 Original line number Diff line number Diff line Loading @@ -1438,17 +1438,6 @@ static ivas_error IVAS_DEC_GetTcSamples( { num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; } FOR( Word16 lp = 0; lp < n_ch_cldfb_tmp; lp++ ) { Word16 length = 15 * num_freq_bands * n_ch_cldfb_tmp + num_freq_bands * ( n_ch_cldfb_tmp - 1 ) + st_ivas->cldfbAnaDec[lp]->no_channels; FOR( Word16 i = 0; i < length; i++ ) { st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[i] = floatToFixed( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[i], 6 ); st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[i] = floatToFixed( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[i], 6 ); } } } ELSE IF( st_ivas->ivas_format == MC_FORMAT ) { Loading Loading @@ -1500,17 +1489,6 @@ static ivas_error IVAS_DEC_GetTcSamples( { num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; } FOR( Word16 lp = 0; lp < n_ch_cldfb_tmp; lp++ ) { Word16 length = 15 * num_freq_bands * n_ch_cldfb_tmp + num_freq_bands * ( n_ch_cldfb_tmp - 1 ) + st_ivas->cldfbAnaDec[lp]->no_channels; FOR( Word16 lp2 = 0; lp2 < length; lp2++ ) { st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[lp2] = fixedToFloat( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[lp2], 6 ); st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[lp2] = fixedToFloat( st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[lp2], 6 ); } } } ELSE IF( st_ivas->ivas_format == MC_FORMAT ) { Loading