Loading lib_dec/ivas_binRenderer_internal.c +17 −32 Original line number Diff line number Diff line Loading @@ -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++ ) Loading Loading @@ -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; } Loading Loading
lib_dec/ivas_binRenderer_internal.c +17 −32 Original line number Diff line number Diff line Loading @@ -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++ ) Loading Loading @@ -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; } Loading