Commit fcdd4e3b authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

[fix] change to constant scaling factor

parent 9d5a2ea0
Loading
Loading
Loading
Loading
Loading
+17 −32
Original line number Diff line number Diff line
@@ -77,11 +77,19 @@ static void ivas_binRenderer_filterModule(
{
    int16_t bandIdx, k, chIdx, tapIdx;
#ifdef NONBE_FIX_1134_FASTCONV_MC_LOUDNESS
    float eq, in_nrg, out_nrg;
    float gain;
#endif
    float *filterStatesLeftRealPtr, *filterStatesLeftImagPtr;
    const float *filterTapsLeftRealPtr, *filterTapsLeftImagPtr, *filterTapsRightRealPtr, *filterTapsRightImagPtr;

#ifdef NONBE_FIX_1134_FASTCONV_MC_LOUDNESS
    gain = 1.f;

    if ( hBinRenderer->ivas_format == MC_FORMAT )
    {
        gain = 1.f / sqrtf( hBinRenderer->nInChannels );
    }
#endif
    for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ )
    {
        for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ )
@@ -123,44 +131,21 @@ static void ivas_binRenderer_filterModule(
                /* Right Real and Imag */
                out_Conv_CLDFB_real[1][k][bandIdx] += outRealRight + ( filterStatesLeftRealPtr[0] * filterTapsRightRealPtr[0] ) - ( filterStatesLeftImagPtr[0] * filterTapsRightImagPtr[0] );
                out_Conv_CLDFB_imag[1][k][bandIdx] += outImagRight + ( filterStatesLeftRealPtr[0] * filterTapsRightImagPtr[0] ) + ( filterStatesLeftImagPtr[0] * filterTapsRightRealPtr[0] );
            }
        }
    }
#ifdef NONBE_FIX_1134_FASTCONV_MC_LOUDNESS
    if ( hBinRenderer->ivas_format == MC_FORMAT )
    {
        for ( k = 0; k < numTimeSlots; k++ )
        {
            for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ )
            {
                in_nrg = 0.f;
                out_nrg = 0.f;

                /* total input energy */
                for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ )
                {
                    in_nrg += CLDFB_real[chIdx][k][bandIdx] * CLDFB_real[chIdx][k][bandIdx];
                    in_nrg += CLDFB_imag[chIdx][k][bandIdx] * CLDFB_imag[chIdx][k][bandIdx];
                }

                /* total output energy */
                for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ )
                if ( hBinRenderer->ivas_format == MC_FORMAT )
                {
                    out_nrg += out_Conv_CLDFB_real[chIdx][k][bandIdx] * out_Conv_CLDFB_real[chIdx][k][bandIdx];
                    out_nrg += out_Conv_CLDFB_imag[chIdx][k][bandIdx] * out_Conv_CLDFB_imag[chIdx][k][bandIdx];
                    /* equalization gain for multichannel */
                    out_Conv_CLDFB_real[0][k][bandIdx] *= gain;
                    out_Conv_CLDFB_imag[0][k][bandIdx] *= gain;
                    out_Conv_CLDFB_real[1][k][bandIdx] *= gain;
                    out_Conv_CLDFB_imag[1][k][bandIdx] *= gain;
                }

                /* EQ factor */
                eq = sqrtf( in_nrg / ( out_nrg + EPSILON ) );

                out_Conv_CLDFB_real[0][k][bandIdx] *= eq;
                out_Conv_CLDFB_imag[0][k][bandIdx] *= eq;
                out_Conv_CLDFB_real[1][k][bandIdx] *= eq;
                out_Conv_CLDFB_imag[1][k][bandIdx] *= eq;
#endif
            }
        }
    }
#endif


    return;
}