Commit 8bc8bd60 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Fix for 3GPP issue 1724: Renderer MASA output metadata difference - 2

Link #1724
parent 433b9a91
Loading
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@
/*-------------------------------------------------------------------------
 * Local function prototypes
 *------------------------------------------------------------------------*/
static void ivas_dirac_param_est_ana_fx( DIRAC_ANA_HANDLE hDirAC, Word32 data_f[][L_FRAME48k], Word32 elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], const Word16 input_frame );
static void ivas_dirac_param_est_ana_fx( DIRAC_ANA_HANDLE hDirAC, Word32 data_f[][L_FRAME48k], Word32 elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], const Word16 input_frame, const Word16 data_q );
static void ivas_dirac_dmx_fx( Word32 data_in_fx[][L_FRAME48k], const Word16 input_frame, const Word16 nchan_transport );


@@ -247,8 +247,8 @@ void ivas_dirac_ana_fx(
    DIRAC_ANA_HANDLE hDirAC,      /* i/o: DIRAC analysis handle               */
    Word32 data_fx[][L_FRAME48k], /* i/o: Input / transport audio signals, Q7 */
    const Word16 input_frame,     /* i  : Input frame size                    */
    const Word16 nchan_transport  /* i  : Number of transport channels        */
)
    const Word16 nchan_transport, /* i  : Number of transport channels        */
    const Word16 data_q )
{
    Word32 elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
    Word32 azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
@@ -256,7 +256,7 @@ void ivas_dirac_ana_fx(
    Word32 spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
    Word32 surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
    /* Estimate MASA parameters from the SBA signals */
    ivas_dirac_param_est_ana_fx( hDirAC, data_fx, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, input_frame );
    ivas_dirac_param_est_ana_fx( hDirAC, data_fx, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, input_frame, data_q );
    /* Create MASA metadata buffer from the estimated values */

    ivas_create_masa_out_meta_fx( hDirAC->hMasaOut, hDirAC->sph_grid16, nchan_transport, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, Q31, Q31, Q31 );
@@ -281,7 +281,8 @@ static void ivas_dirac_param_est_ana_fx(
    Word32 energyRatio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS],          /* Q30 */
    Word32 spreadCoherence_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS],      /* Qx  */
    Word32 surroundingCoherence_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* Qx  */
    const Word16 input_frame )
    const Word16 input_frame,
    const Word16 data_q )
{
    Word32 reference_power_fx[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX];
    Word16 ts, i, d, j;
@@ -356,23 +357,23 @@ static void ivas_dirac_param_est_ana_fx(
        FOR( ts = mrange[0]; ts < mrange[1]; ts++ )
        {
            Word16 cr_q = MAX_16, ci_q = MAX_16, sf, c_e;
            inp_q = Q7; // Input Q of data_fx
            inp_q = data_q; // Input Q of data_fx
            move16();
            move16();
            move16();
            FOR( i = 0; i < numAnalysisChannels; i++ )
            {
                inp_q = Q7;
                inp_q = data_q;
                move16();
                cldfbAnalysis_ts_fx_var_q( &( data_fx[i][l_ts * ts] ), Foa_RealBuffer_fx[i], Foa_ImagBuffer_fx[i], l_ts, hDirAC->cldfbAnaEnc[i], &inp_q );
                cr_q = s_min( cr_q, getScaleFactor32( Foa_RealBuffer_fx[i], CLDFB_NO_CHANNELS_MAX ) );
                ci_q = s_min( ci_q, getScaleFactor32( Foa_ImagBuffer_fx[i], CLDFB_NO_CHANNELS_MAX ) );
                cr_q = s_min( cr_q, getScaleFactor32( Foa_RealBuffer_fx[i], l_ts ) );
                ci_q = s_min( ci_q, getScaleFactor32( Foa_ImagBuffer_fx[i], l_ts ) );
            }
            sf = sub( s_min( cr_q, ci_q ), 4 );
            FOR( i = 0; i < numAnalysisChannels; i++ )
            {
                scale_sig32( Foa_RealBuffer_fx[i], CLDFB_NO_CHANNELS_MAX, sf ); // Q-> inp_q + sf
                scale_sig32( Foa_ImagBuffer_fx[i], CLDFB_NO_CHANNELS_MAX, sf ); // Q-> inp_q + sf
                scale_sig32( Foa_RealBuffer_fx[i], l_ts, sf ); // Q-> inp_q + sf
                scale_sig32( Foa_ImagBuffer_fx[i], l_ts, sf ); // Q-> inp_q + sf
            }
            inp_q = add( inp_q, sf );
            c_e = sub( 31, inp_q );
+16 −8
Original line number Diff line number Diff line
@@ -192,12 +192,17 @@ void diffuse_meta_merge_1x1_fx(
            tmp = BASOP_Util_Divide3232_Scale( total_diff_nrg_fx, L_add( total_nrg_fx, EPSILON_FX ), &scale );
            L_tmp1 = L_deposit_h( tmp ); /* Q( 31 - ( scale + total_nrg_e - total_diff_nrg_e ) ) */
            scale = add( scale, sub( total_diff_nrg_e, total_nrg_e ) );
            if ( L_tmp1 == 0 )
            IF( L_tmp1 == 0 )
            {
                scale = 30;
                scale = 31;
                move16();
                L_tmp2 = 1;
                move32();
            }
            ELSE
            {
                L_tmp2 = BASOP_Util_Add_Mant32Exp( ONE_IN_Q31, 0, L_negate( L_tmp1 ), scale, &scale );
            }
            L_tmp2 = L_sub( L_shl( 1, scale ), L_tmp1 );

            L_tmp1 = BASOP_Util_Add_Mant32Exp( dir_ratio_ism_fx, dir_ratio_ism_e, L_tmp2, scale, &tmp );
            L_tmp1 = L_shr( L_tmp1, 1 );
@@ -220,13 +225,16 @@ void diffuse_meta_merge_1x1_fx(

                tmp = BASOP_Util_Divide3232_Scale( total_diff_nrg_fx, L_add( EPSILON_FX, total_nrg_fx ), &scale );
                scale = add( scale, sub( total_diff_nrg_e, total_nrg_e ) );
                dir_nrg_ratio_fx = L_sub( L_shl_sat( 1, sub( 31, scale ) ), L_deposit_h( tmp ) );
                Word32 temp32 = L_shr( L_deposit_h( tmp ), sub( sub( 31, scale ), Q30 ) ); // Q30
                scale = 1;
                move16();
                dir_nrg_ratio_fx = L_sub( ONE_IN_Q30, temp32 );
                dir_nrg_ratio_e = scale;
                move16();

                new_dir_ratio_fx = dir_nrg_ratio_fx;
                new_dir_ratio_fx = dir_ratio_ism_fx;
                move32();
                new_dir_ratio_e = dir_nrg_ratio_e;
                new_dir_ratio_e = dir_ratio_ism_e;
                move16();
                tmp = BASOP_Util_Cmp_Mant32Exp( dir_nrg_ratio_fx, dir_nrg_ratio_e, dir_ratio_ism_fx, dir_ratio_ism_e );
                IF( tmp <= 0 )
@@ -237,7 +245,7 @@ void diffuse_meta_merge_1x1_fx(
                    move16();
                }

                outMeta->directToTotalRatio[0][sf][band] = (UWord8) imult1616( extract_l( L_shr( new_dir_ratio_fx, sub( 31, new_dir_ratio_e ) ) ), UINT8_MAX );
                outMeta->directToTotalRatio[0][sf][band] = (UWord8) extract_l( L_shr( new_dir_ratio_fx, sub( sub( 31, new_dir_ratio_e ), 8 ) ) );
                move16();
                IF( GT_16( sub( 31, new_dir_ratio_e ), Q30 ) )
                {
@@ -250,7 +258,7 @@ void diffuse_meta_merge_1x1_fx(
                {
                    new_diff_ratio_fx = L_sub( L_shl( 1, sub( 31, new_dir_ratio_e ) ), new_dir_ratio_fx ); /* Q(31 - new_dir_ratiio_e) */
                }
                outMeta->diffuseToTotalRatio[sf][band] = (UWord8) imult1616( extract_l( L_shr( new_diff_ratio_fx, sub( 31, new_dir_ratio_e ) ) ), UINT8_MAX );
                outMeta->diffuseToTotalRatio[sf][band] = (UWord8) extract_l( L_shr( new_diff_ratio_fx, sub( sub( 31, new_dir_ratio_e ), 8 ) ) );
                move16();
            }
            ELSE
+4 −4
Original line number Diff line number Diff line
@@ -635,14 +635,14 @@ void ivas_mcmasa_param_est_ana_fx(
                inp_q = q_data;
                move16();
                cldfbAnalysis_ts_fx_var_q( &( data_fx[i][i_mult( l_ts, ts )] ), Chnl_RealBuffer_fx[i], Chnl_ImagBuffer_fx[i], l_ts, hMcMasa->cldfbAnaEnc[i], &inp_q );
                cr_q = s_min( cr_q, getScaleFactor32( Chnl_ImagBuffer_fx[i], CLDFB_NO_CHANNELS_MAX ) );
                ci_q = s_min( ci_q, getScaleFactor32( Chnl_RealBuffer_fx[i], CLDFB_NO_CHANNELS_MAX ) );
                cr_q = s_min( cr_q, getScaleFactor32( Chnl_ImagBuffer_fx[i], l_ts ) );
                ci_q = s_min( ci_q, getScaleFactor32( Chnl_RealBuffer_fx[i], l_ts ) );
            }
            sf = sub( s_min( cr_q, ci_q ), 4 );
            FOR( i = 0; i < numAnalysisChannels; i++ )
            {
                scale_sig32( Chnl_RealBuffer_fx[i], CLDFB_NO_CHANNELS_MAX, sf ); // Q-> inp_q + sf
                scale_sig32( Chnl_ImagBuffer_fx[i], CLDFB_NO_CHANNELS_MAX, sf ); // Q-> inp_q + sf
                scale_sig32( Chnl_RealBuffer_fx[i], l_ts, sf ); // Q-> inp_q + sf
                scale_sig32( Chnl_ImagBuffer_fx[i], l_ts, sf ); // Q-> inp_q + sf
            }
            inp_q = add( inp_q, sf );
            c_e = sub( 31, inp_q );
+4 −4
Original line number Diff line number Diff line
@@ -451,14 +451,14 @@ static void ivas_omasa_param_est_ana_fx(
                inp_q = data_f_q;
                cldfbAnalysis_ts_fx_var_q( &( data_f_fx[i][i_mult( l_ts, ts )] ), Chnl_RealBuffer_fx[i], Chnl_ImagBuffer_fx[i], l_ts, hOMasa->cldfbAnaEnc[i], &inp_q );

                cr_q = s_min( cr_q, L_norm_arr( Chnl_ImagBuffer_fx[i], CLDFB_NO_CHANNELS_MAX ) );
                ci_q = s_min( ci_q, L_norm_arr( Chnl_RealBuffer_fx[i], CLDFB_NO_CHANNELS_MAX ) );
                cr_q = s_min( cr_q, L_norm_arr( Chnl_ImagBuffer_fx[i], l_ts ) );
                ci_q = s_min( ci_q, L_norm_arr( Chnl_RealBuffer_fx[i], l_ts ) );
            }
            sf = sub( s_min( cr_q, ci_q ), 4 );
            FOR( i = 0; i < nchan_ism; i++ )
            {
                scale_sig32( Chnl_RealBuffer_fx[i], CLDFB_NO_CHANNELS_MAX, sf ); // Q-> inp_q + sf
                scale_sig32( Chnl_ImagBuffer_fx[i], CLDFB_NO_CHANNELS_MAX, sf ); // Q-> inp_q + sf
                scale_sig32( Chnl_RealBuffer_fx[i], l_ts, sf ); // Q-> inp_q + sf
                scale_sig32( Chnl_ImagBuffer_fx[i], l_ts, sf ); // Q-> inp_q + sf
            }
            inp_q = add( inp_q, sf );
            c_e = sub( 31, inp_q );
+4 −3
Original line number Diff line number Diff line
@@ -1464,9 +1464,10 @@ ivas_error ivas_dirac_ana_open_fx(

void ivas_dirac_ana_fx(
    DIRAC_ANA_HANDLE hDirAC,                                   /* i/o: DIRAC analysis handle                   */
    Word32 data_in_fx[][L_FRAME48k],                           /* i/o: Input / transport audio signals, Q7     */
    Word32 data_in_fx[][L_FRAME48k],                           /* i/o: Input / transport audio signals     */
    const Word16 input_frame,                                  /* i  : Input frame size                        */
    const Word16 nchan_transport                               /* i  : Number of transport channels            */
    const Word16 nchan_transport,                               /* i  : Number of transport channels            */
    const Word16 data_q                                         /*i : Q of data_in_fx*/
    );

void ivas_dirac_ana_close_fx(
Loading