diff --git a/lib_rend/ivas_dirac_decorr_dec.c b/lib_rend/ivas_dirac_decorr_dec.c index d1f758fe8df76c3f992573afb445899e5f86ba84..99c17d529c222248241500363d4af9d7cbc69eb8 100644 --- a/lib_rend/ivas_dirac_decorr_dec.c +++ b/lib_rend/ivas_dirac_decorr_dec.c @@ -1124,8 +1124,14 @@ void ivas_dirac_dec_decorr_process_fx( set32_fx( &h_freq_domain_decorr_ap_state->decorr_buffer_fx[imult1616( imult1616( imult1616( 2, sub( decorr_buffer_len, 1 ) ), max_band_decorr ), num_channels )], 0, imult1616( imult1616( 2, max_band_decorr ), num_channels ) ); Word16 decorr_buff_tot_len = imult1616( imult1616( shl( decorr_buffer_len, 1 ), max_band_decorr ), num_channels ); - - guarded_bits = s_max( find_guarded_bits_fx( 2 ), 3 ); + guarded_bits = 0; + FOR( Word16 i = 0; i < decorr_buff_tot_len; i++ ) + { + IF( h_freq_domain_decorr_ap_state->decorr_buffer_fx[i] != 0 ) + { + guarded_bits = s_max( find_guarded_bits_fx( 2 ), 3 ); + } + } q_shift = sub( getScaleFactor32( h_freq_domain_decorr_ap_state->decorr_buffer_fx, decorr_buff_tot_len ), guarded_bits ); Scale_sig32( h_freq_domain_decorr_ap_state->decorr_buffer_fx, decorr_buff_tot_len, q_shift ); q_decorr_buf = add( q_decorr_buf, q_shift );