Commit 14e237f8 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Fix for 3gpp issue 935: Decoder crash for multi-channel and ISM,...

Fix for 3gpp issue 935: Decoder crash for multi-channel and ISM, BINAURAL_ROOM_REVERB output with specific renderer configuration files

[x] Reason for crash:
Issue is related to division by 0 in response_step_limit_fx() for pTarget_color_L buffer values.
These are calculated using pAcoustic_dsr buffer values of IVAS_ROOM_ACOUSTICS_CONFIG_DATA handle.
However, for the configuration that is given values are very small.
Even with Q31, many of the values are becoming zero which eventually makes pTarget_color_L values zero.
Check is added to address this condition.
parent 48a885f2
Loading
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -681,9 +681,18 @@ static void response_step_limit_fx(
    FOR( i = add( pivot_bin_idx, 1 ); i < dim_x; i++ )
    {
        Word16 div_e;
        Word32 desiredChange = BASOP_Util_Divide3232_Scale_cadence( X[i], X[i - 1], &div_e );
        Word16 desiredChange_q = sub( 31, ( div_e ) );
        Word32 desiredChange = 0;
        move32();
        Word16 desiredChange_q = Q31;
        move16();
        Word64 temp;

        IF( X[i] )
        {
            desiredChange = BASOP_Util_Divide3232_Scale_cadence( X[i], X[i - 1], &div_e );
            desiredChange_q = sub( 31, ( div_e ) );
        }

        IF( GT_16( desiredChange_q, 30 ) )
        {
            desiredChange = L_shr( desiredChange, desiredChange_q - 30 );
@@ -720,9 +729,17 @@ static void response_step_limit_fx(
    FOR( i = sub( pivot_bin_idx, 1 ); i >= 0; i-- )
    {
        Word16 div_e;
        Word32 desiredChange = BASOP_Util_Divide3232_Scale_cadence( X[i], X[i + 1], &div_e );
        Word16 desiredChange_q = sub( 31, ( div_e ) );
        Word32 desiredChange = 0;
        move32();
        Word16 desiredChange_q = Q31;
        move16();
        Word64 temp;

        IF( X[i] )
        {
            desiredChange = BASOP_Util_Divide3232_Scale_cadence( X[i], X[i + 1], &div_e );
            desiredChange_q = sub( 31, ( div_e ) );
        }
        IF( GT_16( desiredChange_q, 30 ) )
        {
            desiredChange = L_shr( desiredChange, desiredChange_q - 30 );