Commit a77a208f authored by Mohammadreza Naghibzadeh's avatar Mohammadreza Naghibzadeh
Browse files

modified prescale calculation in hp20_fx_32_opt()

parent f84afb41
Loading
Loading
Loading
Loading
Loading
+8 −16
Original line number Diff line number Diff line
@@ -349,35 +349,27 @@ void hp20_fx_32_opt(
{
    Word32 i;
    Word32 a1_fx, a2_fx, b1_fx, b2_fx;
    Word32 diff_pos, diff_neg;
#ifndef ISSUE_1836_replace_overflow_libcom
    Flag Overflow = 0;
#endif
    Word16 prescale, prescaleOld, prescale_current_frame, diff;
    Word32 tmp_mem[4];

    prescale = L_norm_arr( signal_fx, lg );
    prescale_current_frame = sub( add( 1, HP20_FX_COEFF_SCALE ), prescale );

    prescaleOld = extract_l( mem_fx[4] );

#ifdef ISSUE_1836_replace_overflow_libcom
    diff_pos = norm_l( L_shl_sat( L_max( mem_fx[2], mem_fx[3] ), prescaleOld ) );
    diff_neg = norm_l( L_shl_sat( L_min( mem_fx[2], mem_fx[3] ), prescaleOld ) );
#else
    diff_pos = norm_l( L_shl_o( L_max( mem_fx[2], mem_fx[3] ), prescaleOld, &Overflow ) );
    diff_neg = norm_l( L_shl_o( L_min( mem_fx[2], mem_fx[3] ), prescaleOld, &Overflow ) );
#endif
    Copy32( mem_fx, tmp_mem, 4 );
    Scale_sig32( tmp_mem, 4, prescaleOld );
    diff = L_norm_arr( tmp_mem, 4 );

    prescale = s_min( prescale, diff );

    diff = L_min( diff_pos, diff_neg );
    prescale = sub( add( 1, HP20_FX_COEFF_SCALE ), prescale );

    IF( NE_16( diff, 0 ) )
    IF( EQ_16( prescale_current_frame, -29 ) ) // signal_fx buffer contains only zeros, so use the mem_fx scale_factor instead
    {
        prescale = s_min( prescale, diff );
        prescale_current_frame = prescale;
    }

    prescale = sub( add( 1, HP20_FX_COEFF_SCALE ), prescale );

    diff = sub( prescale, prescaleOld );
#ifdef ISSUE_1836_replace_overflow_libcom
    mem_fx[0] = L_shr_sat( mem_fx[0], diff );