diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 08ed2c26e31f93b27b74451f7bbe558b3a3cb394..af484f02e4b6159e7c8d2a043360ee190e8fc112 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -4178,7 +4178,7 @@ static void adaptTransportSignalsHeadtracked_fx( Word16 band_idx, bin_lo, bin_hi, norm, shift = 31; Word16 q_chEneIIR = 0, q_procChEneIIR = 0; Word32 temp_div; - Word16 e_div; + Word16 e_div, tmp; move16(); move16(); move16(); @@ -4409,10 +4409,16 @@ static void adaptTransportSignalsHeadtracked_fx( } } - - hHeadTrackData->q_chEneIIR = q_chEneIIR; - hHeadTrackData->q_procChEneIIR = q_procChEneIIR; + tmp = sub( s_min( getScaleFactor32( hHeadTrackData->chEneIIR_fx[0], MASA_FREQUENCY_BANDS ), getScaleFactor32( hHeadTrackData->chEneIIR_fx[1], MASA_FREQUENCY_BANDS ) ), 1 ); + scale_sig32( hHeadTrackData->chEneIIR_fx[0], MASA_FREQUENCY_BANDS, tmp ); + scale_sig32( hHeadTrackData->chEneIIR_fx[1], MASA_FREQUENCY_BANDS, tmp ); + hHeadTrackData->q_chEneIIR = add( q_chEneIIR, tmp ); move16(); + + tmp = sub( s_min( getScaleFactor32( hHeadTrackData->procChEneIIR_fx[0], MASA_FREQUENCY_BANDS ), getScaleFactor32( hHeadTrackData->procChEneIIR_fx[1], MASA_FREQUENCY_BANDS ) ), 1 ); + scale_sig32( hHeadTrackData->procChEneIIR_fx[0], MASA_FREQUENCY_BANDS, tmp ); + scale_sig32( hHeadTrackData->procChEneIIR_fx[1], MASA_FREQUENCY_BANDS, tmp ); + hHeadTrackData->q_procChEneIIR = add( q_procChEneIIR, tmp ); move16(); return; }