diff --git a/apps/decoder.c b/apps/decoder.c index a8803b586214fb3f5448df8d48f32f2aeb9e76d2..3b3b0573764c0461a743f3bbfc41a11a2e75602f 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -3487,7 +3487,11 @@ static void do_object_editing_fx( if ( readInfo->obj_gain_relative[obj_idx] ) { /* gain: apply relative edit + saturation */ +#ifdef FIX_2140_OBJECT_EDITING_SANITIZER_ISSUES + editableParameters->ism_metadata[obj_idx].gain_fx = L_max( L_min( L_shl_sat( Mpy_32_32( editableParameters->ism_metadata[obj_idx].gain_fx, (Word32) readInfo->obj_gain[obj_idx] * 536870912 ), 2 ), OBJ_EDIT_GAIN_MAX_FX ), OBJ_EDIT_GAIN_MIN_FX ); /* Q29*Q29 -> Q27 shift back to Q29 */ +#else editableParameters->ism_metadata[obj_idx].gain_fx = L_max( L_min( editableParameters->ism_metadata[obj_idx].gain_fx * (Word32) readInfo->obj_gain[obj_idx] * 536870912, OBJ_EDIT_GAIN_MAX_FX ), OBJ_EDIT_GAIN_MIN_FX ); /* Q29 */ +#endif } else { diff --git a/lib_com/options.h b/lib_com/options.h index baca2536d7da96c4c9dfdbe63ca2fcdf3762dda5..027c1a617783b68a332637ca503be87a33567f91 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -123,6 +123,7 @@ #define NONBE_1217_OBJ_EDIT_FOA /* VA/Nokia: isse 1217: fix crash in object editing to FOA output in ParamISM */ #define NONBE_FIX_1255_OBJ_EDIT_JBM /* VA: issue 1255: restore object editing in JBM */ #define FIX_1372_OSBA_OBJECT_EDITING /* VA: issue 1372: Fix OSBA object-editing in BINAURAL_ROOM_IR */ +#define FIX_2140_OBJECT_EDITING_SANITIZER_ISSUES /* Nokia: Issue 2140, fixes three different sanitizer issues persisting in object editing code. */ /* #################### End BASOP porting switches ############################ */ diff --git a/lib_dec/ivas_dirac_dec_fx.c b/lib_dec/ivas_dirac_dec_fx.c index 2eecca0e56fb89ddf2fd90948f9e9d79028c9b48..6e30bc084031b0268c4a1865f7db633dc795938a 100644 --- a/lib_dec/ivas_dirac_dec_fx.c +++ b/lib_dec/ivas_dirac_dec_fx.c @@ -2318,7 +2318,9 @@ void ivas_dirac_dec_render_sf_fx( Word32 Cldfb_RealBuffer_Temp_fx[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; Word32 Cldfb_ImagBuffer_Temp_fx[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; #endif +#ifndef FIX_2140_OBJECT_EDITING_SANITIZER_ISSUES Word16 cldfb_buf_q; +#endif Word16 offset = 0, buff_len = 0; move16(); move16(); @@ -2831,7 +2833,11 @@ void ivas_dirac_dec_render_sf_fx( IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) { #ifdef FIX_1319_STACK_SBA_DECODER +#ifdef FIX_2140_OBJECT_EDITING_SANITIZER_ISSUES + ivas_omasa_preProcessStereoTransportsForEditedObjects_fx( st_ivas, Cldfb_RealBuffer_Binaural_fx[0], Cldfb_ImagBuffer_Binaural_fx[0], &q_cldfb, hSpatParamRendCom->num_freq_bands, subframe_idx ); +#else ivas_omasa_preProcessStereoTransportsForEditedObjects_fx( st_ivas, Cldfb_RealBuffer_Binaural_fx[0], Cldfb_ImagBuffer_Binaural_fx[0], &cldfb_buf_q, hSpatParamRendCom->num_freq_bands, subframe_idx ); +#endif #else ivas_omasa_preProcessStereoTransportsForEditedObjects_fx( st_ivas, Cldfb_RealBuffer_Temp_fx, Cldfb_ImagBuffer_Temp_fx, &cldfb_buf_q, hSpatParamRendCom->num_freq_bands, subframe_idx ); #endif diff --git a/lib_rend/ivas_dirac_dec_binaural_functions_fx.c b/lib_rend/ivas_dirac_dec_binaural_functions_fx.c index a38f024d0a3577f7474ec3bf88cf18d24eacf418..0539b7b85524aacc82866eb1afc7eb7d8bc0db43 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions_fx.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions_fx.c @@ -5855,6 +5855,16 @@ void ivas_omasa_preProcessStereoTransportsForEditedObjects_fx( move16(); move16(); +#ifdef FIX_2140_OBJECT_EDITING_SANITIZER_ISSUES + totalTargetEneCh[0] = subframeEneCh[0]; // subQch[0] + move32(); + totalTargetEneCh[1] = subframeEneCh[1]; // subQch[1] + move32(); + masaEneThisCh[0] = subframeEneCh[0]; // subQch[0] + move32(); + masaEneThisCh[1] = subframeEneCh[1]; // subQch[1] + move32(); +#else /* Zero check */ IF( GT_32( subframeEne, 0 ) ) { @@ -5867,6 +5877,7 @@ void ivas_omasa_preProcessStereoTransportsForEditedObjects_fx( masaEneThisCh[1] = subframeEneCh[1]; // subQch[1] move32(); } +#endif /* Gain editing */ /* For each object, estimate new target energy per channel based on the applied gain */