Commit bbaba90a authored by multrus's avatar multrus
Browse files

smaller improvements on minimum_statistics_fx()

parent 4505e8b3
Loading
Loading
Loading
Loading
Loading
+39 −32
Original line number Diff line number Diff line
@@ -1753,12 +1753,6 @@ void minimum_statistics_fx(
    Word32 *msNoiseEst_buffer32 = (Word32 *) msNoiseEst_buffer;
    Word16 *msNoiseEst_buffer16 = (Word16 *) msNoiseEst_buffer;


    if ( EQ_16( element_mode, 0 ) )
    {
        (void) enc_dec;
    }

    len2 = i_mult( MSNUMSUBFR, len );

    msM_win = hFdCngCom->msM_win;
@@ -1779,7 +1773,8 @@ void minimum_statistics_fx(
    {
        Copy( msPeriodog, msPsd, len );            /* 6Q9 */
        Copy( msPeriodog, msPsdFirstMoment, len ); /* 6Q9 */
        IF( element_mode == 0 )

        IF( EQ_16( element_mode, EVS_MONO ) )
        {

            Copy( msPeriodog, msNoiseFloor_buffer16, len ); /* 6Q9 */
@@ -1901,7 +1896,7 @@ void minimum_statistics_fx(

            /* msPeriodogSum[cnt] with format 16Q15 */
            Word16 msNoiseFloor16tmp[NPART_SHAPING];
            IF( element_mode == 0 )
            IF( EQ_16( element_mode, EVS_MONO ) )
            {
                snr = dotp_s_fx( msNoiseFloor_buffer16 + start, psize + start, current_len, CNG_HS );
            }
@@ -1940,7 +1935,7 @@ void minimum_statistics_fx(
                test();
                test();
                test();
                IF( ( scalar == 0 ) || ( ( element_mode == 0 ) ? ( msNoiseFloor_buffer16[j] == 0 ) : ( msNoiseFloor_buffer32[j] == 0 ) ) )
                IF( ( scalar == 0 ) || ( EQ_16( element_mode, EVS_MONO ) ? ( msNoiseFloor_buffer16[j] == 0 ) : ( msNoiseFloor_buffer32[j] == 0 ) ) )
                {
                    msAlpha[j] = msAlphaHatMin2;
                    move32();
@@ -1951,7 +1946,7 @@ void minimum_statistics_fx(
                    s1 = WORD16_BITS - 1;
                    move16();

                    IF( element_mode == 0 )
                    IF( EQ_16( element_mode, EVS_MONO ) )
                    {
                        if ( msNoiseFloor_buffer16[j] != 0 )
                        {
@@ -2076,9 +2071,9 @@ void minimum_statistics_fx(
                move16();
                test();
                test();
                IF( ( element_mode == 0 ) ? ( msNoiseFloor_buffer16[j] != 0 ) : ( msNoiseFloor_buffer32[j] != 0 ) )
                IF( EQ_16( element_mode, EVS_MONO ) ? ( msNoiseFloor_buffer16[j] != 0 ) : ( msNoiseFloor_buffer32[j] != 0 ) )
                {
                    IF( element_mode == 0 )
                    IF( EQ_16( element_mode, EVS_MONO ) )
                    {
                        tmp = L_mult( msNoiseFloor_buffer16[j], msNoiseFloor_buffer16[j] );
                    }
@@ -2197,7 +2192,7 @@ void minimum_statistics_fx(
                }
            }
            /* Get the current noise floor */
            IF( element_mode == 0 )
            IF( EQ_16( element_mode, EVS_MONO ) )
            {
                Copy_Scale_sig_32_16( msCurrentMinOut, msNoiseFloor_buffer16, len, -16 );
            }
@@ -2262,7 +2257,7 @@ void minimum_statistics_fx(
                set32_fx( msCurrentMin, 2147483647l /*1.0 Q31*/, len );

                /* Get the current noise floor */
                IF( element_mode == 0 )
                IF( EQ_16( element_mode, EVS_MONO ) )
                {
                    Copy_Scale_sig_32_16( msCurrentMinOut, msNoiseFloor_buffer16, len, -16 );
                }
@@ -2328,7 +2323,7 @@ void minimum_statistics_fx(
        }

        /* Smooth noise estimate during CNG phases */
        IF( element_mode == 0 )
        IF( EQ_16( element_mode, EVS_MONO ) )
        {
            FOR( j = 0; j < len; j++ )
            {
@@ -2348,14 +2343,12 @@ void minimum_statistics_fx(
        }
    }

    IF( element_mode > 0 )
    {
    IF( EQ_16( enc_dec, DEC ) && EQ_16( element_mode, IVAS_CPE_TD ) )
    {
        // v_multc(msNoiseEst, 1.4125f, msNoiseEst, NPART_SHAPING);
        v_multc_att32( msNoiseEst_buffer32, 23142, msNoiseEst_buffer32, NPART_SHAPING );
    }
    }

    /* Collect buffers */
    Copy( msPeriodog, msPeriodogBuf + len * ( *msPeriodogBufPtr ), len );

@@ -2368,6 +2361,8 @@ void minimum_statistics_fx(
    }

    /* Upper limit the noise floors with the averaged input energy */
    IF( EQ_16( element_mode, EVS_MONO ) )
    {
        FOR( j = 0; j < len; j++ )
        {
            scalar = L_mult( msPeriodogBuf[j], 6554 /*1.0/MSBUFLEN Q15*/ );
@@ -2376,24 +2371,36 @@ void minimum_statistics_fx(
            {
                scalar = L_mac( scalar, msPeriodogBuf[i], 6554 /*1.0/MSBUFLEN Q15*/ );
            }
        IF( element_mode == 0 )
        {

            scalar16 = round_fx( scalar );
            if ( GT_16( msNoiseEst_buffer16[j], scalar16 ) /*0.0 Q15*/ )
            {
                msNoiseEst_buffer16[j] = scalar16;
                move16();
            }

            assert( msNoiseEst_buffer16[j] >= 0 );
        }
    }
    ELSE
    {
        FOR( j = 0; j < len; j++ )
        {
            scalar = L_mult( msPeriodogBuf[j], 6554 /*1.0/MSBUFLEN Q15*/ );

            FOR( i = j + len; i < MSBUFLEN * len; i += len )
            {
                scalar = L_mac( scalar, msPeriodogBuf[i], 6554 /*1.0/MSBUFLEN Q15*/ );
            }

            if ( GT_32( msNoiseEst_buffer32[j], scalar ) /*0.0 Q15*/ )
            {
                msNoiseEst_buffer32[j] = scalar;
                move32();
            }

            assert( msNoiseEst_buffer32[j] >= 0 );
        }
        assert( ( ( element_mode == 0 ) ? ( msNoiseEst_buffer16[j] >= 0 ) : ( msNoiseEst_buffer32[j] >= 0 ) ) );
    }
}