From 14e237f866ccc379dd30c1803aa01511f0770638 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Mon, 21 Oct 2024 18:18:01 +0530 Subject: [PATCH] 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. --- lib_rend/ivas_reverb_filter_design.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/lib_rend/ivas_reverb_filter_design.c b/lib_rend/ivas_reverb_filter_design.c index 79ad2c151..b4cc42a34 100644 --- a/lib_rend/ivas_reverb_filter_design.c +++ b/lib_rend/ivas_reverb_filter_design.c @@ -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 ); -- GitLab