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

BASOP and instrumentation code addded for lib_rend files

[x] BASOPs and instrumentation changes for following files:
   ivas_objectRenderer_vec.c
   ivas_omasa_ana.c
   ivas_orient_trk.c
   ivas_output_init.c
   ivas_output_init_fx.c
parent 1c1937ca
Loading
Loading
Loading
Loading
Loading
+23 −9
Original line number Diff line number Diff line
@@ -152,21 +152,21 @@ void TDREND_SPATIAL_VecNormalize_fx(
    scaler_fx = ISqrt32( sqrd_sum, &exp );

    VecNorm_p_fx[0] = Mpy_32_32( scaler_fx, Vec_p_fx[0] );
    move16();
    move32();
    VecNorm_p_fx[1] = Mpy_32_32( scaler_fx, Vec_p_fx[1] );
    move16();
    move32();
    VecNorm_p_fx[2] = Mpy_32_32( scaler_fx, Vec_p_fx[2] );
    move16();
    move32();
    exp = add( exp, sub( 31, q ) );

    // Since vector is normalised, all values will be <= 1. Hence making all values in Q30
    shift = sub( exp, 1 );
    VecNorm_p_fx[0] = L_shl( VecNorm_p_fx[0], shift );
    move16();
    move32();
    VecNorm_p_fx[1] = L_shl( VecNorm_p_fx[1], shift );
    move16();
    move32();
    VecNorm_p_fx[2] = L_shl( VecNorm_p_fx[2], shift );
    move16();
    move32();

    return;
}
@@ -305,21 +305,35 @@ Word16 TDREND_SPATIAL_EvalOrthonormOrient_fx(
    /* Evaluate the orthonormal right vector  */
    /* through the cross product of the front and the up vectors */
    RightVecON_p_fx[0] = L_shl_sat( L_sub( Mpy_32_32( FrontVecON_p_fx[1], UpVec_p_fx[2] ), Mpy_32_32( FrontVecON_p_fx[2], UpVec_p_fx[1] ) ), 1 );
    move32();
    RightVecON_p_fx[1] = L_shl_sat( L_sub( Mpy_32_32( FrontVecON_p_fx[2], UpVec_p_fx[0] ), Mpy_32_32( FrontVecON_p_fx[0], UpVec_p_fx[2] ) ), 1 );
    move32();
    RightVecON_p_fx[2] = L_shl_sat( L_sub( Mpy_32_32( FrontVecON_p_fx[0], UpVec_p_fx[1] ), Mpy_32_32( FrontVecON_p_fx[1], UpVec_p_fx[0] ) ), 1 );
    move32();

    TDREND_SPATIAL_VecNormalize_fx( RightVecON_p_fx, orient_q, RightVecON_p_fx ); // RightVecON_p_fx -> Q30

    /* Evaluate the orthonormal up vector  */
    /* through the cross product of the front and the right vectors */
    UpVecON_p_fx[0] = L_shl_sat( L_sub( Mpy_32_32( RightVecON_p_fx[1], FrontVecON_p_fx[2] ), Mpy_32_32( RightVecON_p_fx[2], FrontVecON_p_fx[1] ) ), 1 );
    move32();
    UpVecON_p_fx[1] = L_shl_sat( L_sub( Mpy_32_32( RightVecON_p_fx[2], FrontVecON_p_fx[0] ), Mpy_32_32( RightVecON_p_fx[0], FrontVecON_p_fx[2] ) ), 1 );
    move32();
    UpVecON_p_fx[2] = L_shl_sat( L_sub( Mpy_32_32( RightVecON_p_fx[0], FrontVecON_p_fx[1] ), Mpy_32_32( RightVecON_p_fx[1], FrontVecON_p_fx[0] ) ), 1 );
    move32();

    TDREND_SPATIAL_VecNormalize_fx( UpVecON_p_fx, orient_q, UpVecON_p_fx ); // UpVecON_p_fx -> Q30

    /* Check if vectors have been changed */
    IF( NE_32( FrontVecON_p_fx[0], tmp_fx[0] ) || NE_32( FrontVecON_p_fx[1], tmp_fx[1] ) || NE_32( FrontVecON_p_fx[2], tmp_fx[2] ) ||
    test();
    test();
    test();
    test();
    test();
    test();
    test();
    test();
    if ( NE_32( FrontVecON_p_fx[0], tmp_fx[0] ) || NE_32( FrontVecON_p_fx[1], tmp_fx[1] ) || NE_32( FrontVecON_p_fx[2], tmp_fx[2] ) ||
         NE_32( RightVecON_p_fx[0], tmp_fx[3] ) || NE_32( RightVecON_p_fx[1], tmp_fx[4] ) || NE_32( RightVecON_p_fx[2], tmp_fx[5] ) ||
         NE_32( UpVecON_p_fx[0], tmp_fx[6] ) || NE_32( UpVecON_p_fx[1], tmp_fx[7] ) || NE_32( UpVecON_p_fx[2], tmp_fx[8] ) )
    {
+65 −23
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ ivas_error ivas_omasa_ana_open(
    Word16 scale;

    error = IVAS_ERR_OK;
    move32();

    IF( ( hOMasa = (OMASA_ANA_HANDLE) malloc( sizeof( OMASA_ANA_DATA ) ) ) == NULL )
    {
@@ -145,7 +146,7 @@ ivas_error ivas_omasa_ana_open(
    hOMasa->num_Cldfb_instances = numAnalysisChannels;
    FOR( i = 0; i < hOMasa->num_Cldfb_instances; i++ )
    {
        IF( ( error = openCldfb_ivas( &( hOMasa->cldfbAnaEnc[i] ), CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK )
        IF( NE_32( ( error = openCldfb_ivas( &( hOMasa->cldfbAnaEnc[i] ), CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_5_00MS ) ), IVAS_ERR_OK ) )
        {
            return error;
        }
@@ -199,7 +200,9 @@ ivas_error ivas_omasa_ana_open(
    FOR( i = 0; i < input_frame; i++ )
    {
        hOMasa->interpolator_fx[i] = BASOP_Util_Divide1616_Scale( i, input_frame, &scale );
        move16();
        hOMasa->interpolator_fx[i] = shl( hOMasa->interpolator_fx[i], scale ); // Q15
        move16();
    }

    hOMasa->index_buffer_intensity = 0;
@@ -225,9 +228,6 @@ ivas_error ivas_omasa_ana_open(
    set_zero_fx( hOMasa->ism_azimuth_fx, MAX_NUM_OBJECTS );
    set_zero_fx( hOMasa->ism_elevation_fx, MAX_NUM_OBJECTS );

#ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED
#endif

    ( *hOMasaPtr ) = hOMasa;

    return error;
@@ -373,6 +373,7 @@ void ivas_omasa_ana_close(
{
    Word16 i, j;

    test();
    IF( hOMasa == NULL || *hOMasa == NULL )
    {
        return;
@@ -755,6 +756,7 @@ static void ivas_omasa_param_est_ana_fx(
    move16();
    Word32 diffuseness_m_fx[MASA_FREQUENCY_BANDS];
    Word16 diffuseness_m_q = 0;
    move16();
    Word32 renormalization_factor_diff_fx[MASA_FREQUENCY_BANDS];
    Word16 renormalization_factor_diff_q = 0;
    move16();
@@ -765,9 +767,8 @@ static void ivas_omasa_param_est_ana_fx(
    Word16 dir_v_q, norm_tmp_q;
    Word16 foa_q;

    int16_t band_m_idx, block_m_idx;
    Word16 band_m_idx, block_m_idx;

    // float norm_tmp;
    Word16 mrange[2];
    Word16 brange[2];

@@ -775,7 +776,10 @@ static void ivas_omasa_param_est_ana_fx(
    move16();
    num_freq_bands = hOMasa->nbands;
    move16();
    l_ts = input_frame / CLDFB_NO_COL_MAX;

    // l_ts = input_frame / CLDFB_NO_COL_MAX;
    l_ts = shr( input_frame, 4 );
    move16();

    Word16 intensity_q;
    Word16 direction_q, reference_power_q;
@@ -796,10 +800,12 @@ static void ivas_omasa_param_est_ana_fx(
        tmp1 = mult( tmp1, EVS_PI_FX );
        tmp1 = getCosWord16( tmp1 );
        hOMasa->chnlToFoaMtx_fx[1][i] = shl( mult( tmp, tmp1 ), 1 ); // Q14 + Q15 - Q15 + Q1 -> Q15
        move16();

        tmp = BASOP_Util_Divide3232_Scale( hOMasa->ism_elevation_fx[i], 754974720, &scale );
        tmp = mult( tmp, EVS_PI_FX );                        // Q13 + Q15 - Q15 --> Q13
        hOMasa->chnlToFoaMtx_fx[2][i] = getSinWord16( tmp ); // Q15
        move16();

        tmp = BASOP_Util_Divide3232_Scale( hOMasa->ism_azimuth_fx[i], 754974720, &scale );
        tmp = mult( tmp, EVS_PI_FX ); // Q13 + Q15 - Q15 --> Q13
@@ -811,6 +817,7 @@ static void ivas_omasa_param_est_ana_fx(
        tmp1 = getCosWord16( tmp );    // Q14

        hOMasa->chnlToFoaMtx_fx[3][i] = shl( mult( tmp, tmp1 ), 2 ); // Q14 + Q14 - Q15 + Q2-> Q13 + Q2 -> Q15
        move16();
    }

    /* do processing over all CLDFB time slots */
@@ -845,12 +852,14 @@ static void ivas_omasa_param_est_ana_fx(
                in_q = data_f_q;
                move16();

                cldfbAnalysis_ts_fx( &( data_f_fx[i][l_ts * ts] ), Chnl_RealBuffer_fx[i], Chnl_ImagBuffer_fx[i], l_ts, hOMasa->cldfbAnaEnc[i], &in_q );
                cldfbAnalysis_ts_fx( &( data_f_fx[i][i_mult( l_ts, ts )] ), Chnl_RealBuffer_fx[i], Chnl_ImagBuffer_fx[i], l_ts, hOMasa->cldfbAnaEnc[i], &in_q );

                FOR( Word16 ind = 0; ind < CLDFB_NO_CHANNELS_MAX; ind++ )
                {
                    Chnl_RealBuffer_fx[i][ind] = Chnl_RealBuffer_fx[i][ind] / ( 1 << 4 );
                    Chnl_ImagBuffer_fx[i][ind] = Chnl_ImagBuffer_fx[i][ind] / ( 1 << 4 );
                    Chnl_RealBuffer_fx[i][ind] = L_shr( Chnl_RealBuffer_fx[i][ind], 4 );
                    move32();
                    Chnl_ImagBuffer_fx[i][ind] = L_shr( Chnl_ImagBuffer_fx[i][ind], 4 );
                    move32();
                }

                Chnl_RealBuffer_q = sub( in_q, 4 );
@@ -872,7 +881,9 @@ static void ivas_omasa_param_est_ana_fx(
                        L_tmp1 = Mpy_32_32( Chnl_RealBuffer_fx[i][j], Chnl_RealBuffer_fx[i][j] );
                        L_tmp2 = Mpy_32_32( Chnl_ImagBuffer_fx[i][j], Chnl_ImagBuffer_fx[i][j] );
                        hOMasa->energy_fx[block_m_idx][band_m_idx] = L_add( hOMasa->energy_fx[block_m_idx][band_m_idx], L_add( L_tmp1, L_tmp2 ) ); // Chnl_RealBuffer_q + Chnl_RealBuffer_q - 31
                        move32();
                        hOMasa->energy_q = sub( add( Chnl_RealBuffer_q, Chnl_RealBuffer_q ), 31 );
                        move16();
                    }
                }
            }
@@ -926,7 +937,9 @@ static void ivas_omasa_param_est_ana_fx(
                FOR( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ )
                {
                    Foa_RealBuffer_fx[i][j] = L_shr( Foa_RealBuffer_fx[i][j], 5 );
                    move32();
                    Foa_ImagBuffer_fx[i][j] = L_shr( Foa_ImagBuffer_fx[i][j], 5 );
                    move32();
                }
            }
            foa_q = sub( Chnl_ImagBuffer_q, 5 );
@@ -942,18 +955,20 @@ static void ivas_omasa_param_est_ana_fx(
            reference_power_q = sub( shl( Chnl_ImagBuffer_q, 1 ), 30 );

            /* Fill buffers of length "averaging_length" time slots for intensity and energy */
            hOMasa->index_buffer_intensity = ( hOMasa->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1; /* averaging_length = 32 */
            hOMasa->index_buffer_intensity = add( ( hOMasa->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ), 1 ); /* averaging_length = 32 */
            move16();
            index = hOMasa->index_buffer_intensity;
            move16();

            FOR( i = 0; i < DIRAC_NUM_DIMS; i++ )
            {
                /* only real part needed */
                Copy32( intensity_real_fx[i], &( hOMasa->buffer_intensity_real_fx[i][index - 1][0] ), num_freq_bands );
                Copy32( intensity_real_fx[i], &( hOMasa->buffer_intensity_real_fx[i][sub( index, 1 )][0] ), num_freq_bands );
            }
            hOMasa->buffer_intensity_real_q[index - 1] = intensity_q;
            hOMasa->buffer_intensity_real_q[sub( index, 1 )] = intensity_q;
            move16();
            Copy32( reference_power_fx, &( hOMasa->buffer_energy_fx[( index - 1 ) * num_freq_bands] ), num_freq_bands );
            hOMasa->buffer_energy_q[index - 1] = reference_power_q;
            Copy32( reference_power_fx, &( hOMasa->buffer_energy_fx[i_mult( sub( index, 1 ), num_freq_bands )] ), num_freq_bands );
            hOMasa->buffer_energy_q[sub( index, 1 )] = reference_power_q;
            move16();

            computeDiffuseness_fixed( hOMasa->buffer_intensity_real_fx, hOMasa->buffer_energy_fx, num_freq_bands, diffuseness_vector_fx, hOMasa->buffer_intensity_real_q, hOMasa->buffer_energy_q, &diffuseness_q );
@@ -964,16 +979,21 @@ static void ivas_omasa_param_est_ana_fx(
                norm_tmp_q = sub( add( reference_power_q, 30 ), 31 );

                hOMasa->direction_vector_m_fx[0][block_m_idx][band_m_idx] = L_add( hOMasa->direction_vector_m_fx[0][block_m_idx][band_m_idx], Mpy_32_32( norm_tmp_fx, direction_vector_fx[0][band_m_idx] ) );
                move32();

                hOMasa->direction_vector_m_fx[1][block_m_idx][band_m_idx] = L_add( hOMasa->direction_vector_m_fx[0][block_m_idx][band_m_idx], Mpy_32_32( norm_tmp_fx, direction_vector_fx[1][band_m_idx] ) );
                move32();
                hOMasa->direction_vector_m_fx[2][block_m_idx][band_m_idx] = L_add( hOMasa->direction_vector_m_fx[0][block_m_idx][band_m_idx], Mpy_32_32( norm_tmp_fx, direction_vector_fx[2][band_m_idx] ) );
                move32();

                hOMasa->direction_vector_m_q = sub( add( norm_tmp_q, direction_q ), 31 );


                diffuseness_m_fx[band_m_idx] = L_add( diffuseness_m_fx[band_m_idx], Mpy_32_32( reference_power_fx[band_m_idx], diffuseness_vector_fx[band_m_idx] ) );
                move32();
                diffuseness_m_q = sub( add( reference_power_q, diffuseness_q ), 31 );
                renormalization_factor_diff_fx[band_m_idx] = L_add( renormalization_factor_diff_fx[band_m_idx], reference_power_fx[band_m_idx] );
                move32();
                renormalization_factor_diff_q = reference_power_q;
                move16();
            }
@@ -987,10 +1007,12 @@ static void ivas_omasa_param_est_ana_fx(
                move32();
            }
            dir_v_q = hOMasa->direction_vector_m_q;
            move16();

            FOR( i = 0; i < DIRAC_NUM_DIMS; i++ )
            {
                dir_v_fx[i] = L_shr( dir_v_fx[i], 1 );
                move32();
            }

            dir_v_q = sub( dir_v_q, 1 );
@@ -1003,9 +1025,11 @@ static void ivas_omasa_param_est_ana_fx(
            IF( BASOP_Util_Cmp_Mant32Exp( renormalization_factor_diff_fx[band_m_idx], sub( 31, renormalization_factor_diff_q ), L_deposit_h( EPSILON_FX ), 2 ) > 0 )
            {
                diffuseness_m_fx[band_m_idx] = BASOP_Util_Divide3232_Scale( diffuseness_m_fx[band_m_idx], renormalization_factor_diff_fx[band_m_idx], &scale );
                move32();
                scale = add( scale, sub( sub( 31, diffuseness_m_q ), sub( 31, renormalization_factor_diff_q ) ) );

                diffuseness_m_fx[band_m_idx] = L_shr( diffuseness_m_fx[band_m_idx], sub( 31, add( scale, diffuseness_m_q ) ) );
                move32();
            }
            ELSE
            {
@@ -1013,6 +1037,7 @@ static void ivas_omasa_param_est_ana_fx(
                move32();
            }
            energyRatio_fx[block_m_idx][band_m_idx] = L_sub( L_shl( 1, diffuseness_m_q ), diffuseness_m_fx[band_m_idx] );
            move32();
        }

        /* Set coherences to zero, as this mode is used at lowest bit rates where the coherences are not transmitted */
@@ -1078,7 +1103,8 @@ static void ivas_omasa_dmx_fx(
        /* Downmix using the panning gains */
        FOR( j = 0; j < nchan_transport; j++ )
        {
            IF( GT_32( L_abs( L_deposit_h( gains_fx[j] ) ), 0 ) || GT_32( L_abs( prev_gains_fx[i][j] ), 0 ) )
            test();
            IF( abs_s( gains_fx[j] ) > 0 || L_abs( prev_gains_fx[i][j] ) > 0 )
            {
                FOR( k = 0; k < input_frame; k++ )
                {
@@ -1100,6 +1126,7 @@ static void ivas_omasa_dmx_fx(
                    scale = add( scale, tmp_e );

                    data_out_f_fx[j][k] = BASOP_Util_Add_Mant32Exp( data_out_f_fx[j][k], data_e[j], L_tmp, scale, &in_e[k] );
                    move32();
                }
            }
            max_e = in_e[0];
@@ -1116,11 +1143,13 @@ static void ivas_omasa_dmx_fx(
            FOR( l = 0; l < L_FRAME48k; l++ )
            {
                data_out_f_fx[j][l] = L_shr( data_out_f_fx[j][l], sub( max_e, in_e[l] ) );
                move32();
            }
            data_e[j] = max_e;
            move16();

            prev_gains_fx[i][j] = L_deposit_h( gains_fx[j] ); // Q31
            move32();
        }
    }

@@ -1128,7 +1157,7 @@ static void ivas_omasa_dmx_fx(
    move16();
    FOR( i = 1; i < nchan_transport; i++ )
    {
        IF( LT_16( max_e, data_e[i] ) )
        if ( LT_16( max_e, data_e[i] ) )
        {
            max_e = data_e[i];
            move16();
@@ -1139,7 +1168,8 @@ static void ivas_omasa_dmx_fx(
    {
        FOR( j = 0; j < input_frame; j++ )
        {
            data_out_f_fx[i][j] = L_shr( data_out_f_fx[i][j], max_e - data_e[i] );
            data_out_f_fx[i][j] = L_shr( data_out_f_fx[i][j], sub( max_e, data_e[i] ) );
            move32();
        }
    }

@@ -1233,23 +1263,31 @@ void computeIntensityVector_ana_fx(
    Word32 real, img;
    Word16 brange[2];

    for ( i = 0; i < num_frequency_bands; i++ )
    FOR( i = 0; i < num_frequency_bands; i++ )
    {
        brange[0] = band_grouping[i];
        move16();
        brange[1] = band_grouping[i + 1];
        move16();

        intensity_real[0][i] = 0;
        move32();
        intensity_real[1][i] = 0;
        move32();
        intensity_real[2][i] = 0;
        move32();

        for ( j = brange[0]; j < brange[1]; j++ )
        FOR( j = brange[0]; j < brange[1]; j++ )
        {
            real = Cldfb_RealBuffer[0][j];
            img = Cldfb_ImagBuffer[0][j];
            /* Intensity is XYZ order, audio is WYZX order. */
            intensity_real[0][i] = L_add( intensity_real[0][i], L_add( Mpy_32_32( Cldfb_RealBuffer[3][j], real ), Mpy_32_32( Cldfb_ImagBuffer[3][j], img ) ) ); // output Q= 2* input_q -31
            move32();
            intensity_real[1][i] = L_add( intensity_real[1][i], L_add( Mpy_32_32( Cldfb_RealBuffer[1][j], real ), Mpy_32_32( Cldfb_ImagBuffer[1][j], img ) ) ); // output Q= 2* input_q -31
            move32();
            intensity_real[2][i] = L_add( intensity_real[2][i], L_add( Mpy_32_32( Cldfb_RealBuffer[2][j], real ), Mpy_32_32( Cldfb_ImagBuffer[2][j], img ) ) ); // output Q= 2* input_q -31
            move32();
        }
    }

@@ -1318,19 +1356,23 @@ void computeReferencePower_ana_fx(
    Word16 brange[2];
    Word16 ch_idx, i, j;

    for ( i = 0; i < num_freq_bands; i++ )
    FOR( i = 0; i < num_freq_bands; i++ )
    {
        brange[0] = band_grouping[i];
        move16();
        brange[1] = band_grouping[i + 1];
        move16();
        reference_power[i] = 0;
        move32();

        for ( ch_idx = 0; ch_idx < FOA_CHANNELS; ch_idx++ )
        FOR( ch_idx = 0; ch_idx < FOA_CHANNELS; ch_idx++ )
        {
            /* abs()^2 */
            for ( j = brange[0]; j < brange[1]; j++ )
            FOR( j = brange[0]; j < brange[1]; j++ )
            {
                // Q = 2*inputq - 31
                reference_power[i] = L_add( L_add( Mpy_32_32( Cldfb_RealBuffer[ch_idx][j], Cldfb_RealBuffer[ch_idx][j] ), Mpy_32_32( Cldfb_ImagBuffer[ch_idx][j], Cldfb_ImagBuffer[ch_idx][j] ) ), reference_power[i] );
                move32();
            }
        }
    }
+156 −27

File changed.

Preview size limit exceeded, changes collapsed.

+38 −8
Original line number Diff line number Diff line
@@ -222,15 +222,22 @@ void ivas_output_init(

    /* set general default values */
    hOutSetup->output_config = output_config;
    move16();
    hOutSetup->is_loudspeaker_setup = 0;
    move16();
    hOutSetup->is_binaural_setup = 0;
    move16();
    hOutSetup->ambisonics_order = -1;
    move16();
    hOutSetup->separateChannelEnabled = 0;
    move16();
    hOutSetup->separateChannelIndex = 0;
    move16();

    IF( EQ_16( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) )
    {
        hOutSetup->is_loudspeaker_setup = 1;
        move16();
        /* set in ivas_init_decoder: */
        /* hOutSetup->ls_azimuth */
        /* hOutSetup->ls_elevation    */
@@ -244,68 +251,96 @@ void ivas_output_init(
        hOutSetup->ls_azimuth_fx = NULL;
        hOutSetup->ls_elevation_fx = NULL;
        hOutSetup->num_lfe = 0;
        move16();
        hOutSetup->index_lfe[0] = -1;
        move16();
        hOutSetup->is_planar_setup = 0;
        move16();

        /* set output setup specific values */
        SWITCH( output_config )
        {
            case IVAS_AUDIO_CONFIG_MONO:
                hOutSetup->is_loudspeaker_setup = 1;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_STEREO:
                hOutSetup->is_loudspeaker_setup = 1;
                move16();
                hOutSetup->ls_azimuth_fx = ls_azimuth_CICP2_fx;
                hOutSetup->ls_elevation_fx = ls_elevation_CICP2_fx;
                BREAK;
            case IVAS_AUDIO_CONFIG_FOA:
                hOutSetup->ambisonics_order = SBA_FOA_ORDER;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_HOA2:
                hOutSetup->ambisonics_order = SBA_HOA2_ORDER;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_HOA3:
                hOutSetup->ambisonics_order = SBA_HOA3_ORDER;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_5_1:
                hOutSetup->num_lfe = 1;
                move16();
                hOutSetup->index_lfe[0] = 3;
                move16();
                hOutSetup->is_loudspeaker_setup = 1;
                move16();
                hOutSetup->ls_azimuth_fx = ls_azimuth_CICP6_fx;
                hOutSetup->ls_elevation_fx = ls_elevation_CICP6_fx;
                hOutSetup->is_planar_setup = 1;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_7_1:
                hOutSetup->num_lfe = 1;
                move16();
                hOutSetup->index_lfe[0] = 3;
                move16();
                hOutSetup->is_loudspeaker_setup = 1;
                move16();
                hOutSetup->ls_azimuth_fx = ls_azimuth_CICP12_fx;
                hOutSetup->ls_elevation_fx = ls_elevation_CICP12_fx;
                hOutSetup->is_planar_setup = 1;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_5_1_2:
                hOutSetup->num_lfe = 1;
                move16();
                hOutSetup->index_lfe[0] = 3;
                move16();
                hOutSetup->is_loudspeaker_setup = 1;
                move16();
                hOutSetup->ls_azimuth_fx = ls_azimuth_CICP14_fx;
                hOutSetup->ls_elevation_fx = ls_elevation_CICP14_fx;
                hOutSetup->is_planar_setup = 0;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_5_1_4:
                hOutSetup->num_lfe = 1;
                move16();
                hOutSetup->index_lfe[0] = 3;
                move16();
                hOutSetup->is_loudspeaker_setup = 1;
                move16();
                hOutSetup->ls_azimuth_fx = ls_azimuth_CICP16_fx;
                hOutSetup->ls_elevation_fx = ls_elevation_CICP16_fx;
                hOutSetup->is_planar_setup = 0;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_7_1_4:
                hOutSetup->num_lfe = 1;
                move16();
                hOutSetup->index_lfe[0] = 3;
                move16();
                hOutSetup->is_loudspeaker_setup = 1;
                move16();
                hOutSetup->ls_azimuth_fx = ls_azimuth_CICP19_fx;
                hOutSetup->ls_elevation_fx = ls_elevation_CICP19_fx;
                hOutSetup->is_planar_setup = 0;
                move16();
                BREAK;
            case IVAS_AUDIO_CONFIG_BINAURAL:
            case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR:
@@ -315,6 +350,7 @@ void ivas_output_init(
            case IVAS_AUDIO_CONFIG_ISM3:
            case IVAS_AUDIO_CONFIG_ISM4:
                hOutSetup->is_binaural_setup = 1;
                move16();
            case IVAS_AUDIO_CONFIG_EXTERNAL:
                /* Default values are used */
                BREAK;
@@ -323,10 +359,12 @@ void ivas_output_init(
        }
    }

    test();
    IF( NE_16( output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) && NE_16( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) )
    {
        nchan_out = audioCfg2channels( output_config );
        hOutSetup->nchan_out_woLFE = sub( nchan_out, hOutSetup->num_lfe );
        move16();
    }

    return;
@@ -531,11 +569,7 @@ Word16 ivas_get_nchan_buffers_dec(
    ELSE IF( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) )
    {
        Word16 nchan_internal;
#ifndef IVAS_FLOAT_FIXED
        nchan_internal = ivas_sba_get_nchan_metadata( sba_analysis_order, ivas_total_brate );
#else
        nchan_internal = ivas_sba_get_nchan_metadata_fx( sba_analysis_order, ivas_total_brate );
#endif
        nchan_out_buff = st_ivas->hDecoderConfig->nchan_out;
        move16();

@@ -589,11 +623,7 @@ Word16 ivas_get_nchan_buffers_dec(
    ELSE IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) )
    {
        Word16 nchan_internal;
#ifndef IVAS_FLOAT_FIXED
        nchan_internal = ivas_sba_get_nchan_metadata( sba_analysis_order, ivas_total_brate );
#else
        nchan_internal = ivas_sba_get_nchan_metadata_fx( sba_analysis_order, ivas_total_brate );
#endif
        nchan_out_buff = add( st_ivas->nchan_ism, st_ivas->nchan_transport );

        IF( st_ivas->hMCT != NULL )
+1 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ Word16 ivas_get_nchan_buffers_dec_ivas_fx(
    IF( EQ_16( st_ivas->ivas_format, MONO_FORMAT ) )
    {
        nchan_out_buff = st_ivas->hDecoderConfig->nchan_out;
        move16();
    }
    ELSE IF( EQ_16( st_ivas->ivas_format, STEREO_FORMAT ) )
    {