Commit d070e531 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch 'param_ism_render_float_cleanup' into 'main'

Float members cleaned from param_ism_rendering

See merge request !361
parents cdb14738 a2ec28a8
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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(
+26 −100
Original line number Diff line number Diff line
@@ -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
@@ -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" ) );
@@ -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*/
@@ -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 )
{
@@ -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;
@@ -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;
        }
@@ -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 )
            {
@@ -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 )
@@ -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 );
@@ -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 );
@@ -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;
@@ -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;
@@ -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
        }
    }

@@ -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++ )
@@ -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;

@@ -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();

+9 −32
Original line number Diff line number Diff line
@@ -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
@@ -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 )
                {
+6 −9
Original line number Diff line number Diff line
@@ -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;

+0 −22
Original line number Diff line number Diff line
@@ -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 )
            {
@@ -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 )
            {