diff --git a/lib_dec/ivas_stereo_cng_dec.c b/lib_dec/ivas_stereo_cng_dec.c index ef165175bf95ac905e1d418d298d2fff631eec0e..20e10d4f49640968680d09c42c22c267c85a47a6 100644 --- a/lib_dec/ivas_stereo_cng_dec.c +++ b/lib_dec/ivas_stereo_cng_dec.c @@ -803,34 +803,34 @@ void stereo_cng_compute_PScorr_fx( } Word32 Var1 = Mpy_32_32( enrP_fx, enrS_fx ); // 2*( outputPptr_Q - 31 - guard_bits + outputSptr_Q - 31 - guard_bits ) - Word32 temp = L_add( Var1, 1 ); /*adding one in order to make temp non-zero*/ - Word16 q = 2 * ( outputPptr_Q - 31 - guard_bits + outputSptr_Q - 31 - guard_bits ); + Word16 exp = 31 - ( 2 * ( outputPptr_Q - 31 - guard_bits + outputSptr_Q - 31 - guard_bits ) ); - Word16 nrm = norm_l( Var1 ); - Word32 frac = L_shl( temp, nrm ); - Word16 exp = 31 - ( q + nrm ); - Word32 Var2 = Isqrt_lc( frac, &exp ); /*Q(31 - exp)*/ - - Word32 Var3 = L_add( dotPS_fx, 1 ); /*adding one in order to make temp non-zero. q = Q_outputSptr + Q_outputPptr - guard_bits*/ + IF( Var1 == 0 ) + { + Var1 = 1; + } + Word32 Var2, Var3; + Var2 = ISqrt32(Var1, &exp); + Var3 = L_add( dotPS_fx, 1 ); /*adding one in order to make temp non-zero. q = Q_outputSptr + Q_outputPptr - guard_bits*/ c_PS_fx = Mpy_32_32( Var3, Var2 ); /* outputSptr_Q + outputPptr_Q - guard_bits - exp */ - Word16 c_PS_fx_Q = outputSptr_Q + outputPptr_Q - guard_bits - exp - 31; - + Word16 c_PS_fx_Q = outputSptr_Q + outputPptr_Q - guard_bits - exp - 31; Word32 a = 0, b = 0; - a = Mpy_32_32( c_PS_fx, ONE_MINUS_STEREO_TD_PS_CORR_FILT_Q31 ); // Q(c_PS_fx_Q) Word16 a_q = 0, b_q = 0, ab_q = 0; + + a = Mpy_32_32( c_PS_fx, ONE_MINUS_STEREO_TD_PS_CORR_FILT_Q31 ); // Q(c_PS_fx_Q) a_q = c_PS_fx_Q; b = Mpy_32_32( STEREO_TD_PS_CORR_FILT_Q31, *c_PS_LT_fx ); // Q(Q_c_PS_LT_fx) b_q = Q_c_PS_LT_fx; - if ( a_q > b_q ) + IF (GT_16( a_q , b_q) ) { ab_q = a_q - b_q; *c_PS_LT_fx = L_add( L_shr( a, (Word16) ab_q ), b ); Q_c_PS_LT_fx = b_q; } - else if ( b_q < a_q ) + ELSE IF ( LT_16(b_q , a_q )) { ab_q = b_q - a_q; *c_PS_LT_fx = L_add( a, L_shr( b, (Word16) ab_q ) );