Loading apps/decoder.c +12 −7 Original line number Diff line number Diff line Loading @@ -3561,13 +3561,18 @@ static void do_object_editing_fx( if ( readInfo->obj_radius_relative[obj_idx] ) { /* radius: apply relative edit + saturation */ Word32 temp_radius = L_max( L_min( ( L_shl_sat( Mpy_32_32( (Word32) editableParameters->ism_metadata[obj_idx].radius_fx, (Word32) ( readInfo->obj_radius[obj_idx] * 512 ) ), 2 ) ), OBJ_EDIT_RADIUS_MAX_FX ), 0 ); /* Q9*Q9 -> Q7 shift back to Q9 */ // Saturate to 16-bit range if ( temp_radius > 32767 ) temp_radius = 32767; if ( temp_radius < -32768 ) temp_radius = -32768; editableParameters->ism_metadata[obj_idx].radius_fx = (Word16) temp_radius; #define SQ 9 #define SHIFT_DUE_TO_SQxSQ ( SQ - ( SQ + SQ + 1 - 16 ) ) /* ^shift by 6 == mult by 2^6 = 64.0 */ Word32 L_tmp1 = L_mult( editableParameters->ism_metadata[obj_idx].radius_fx, (Word16) ( readInfo->obj_radius[obj_idx] * ( 1L << ( SQ ) ) ) ); /*SQ*SQ*/ Word32 L_tmp2 = L_shl_sat( L_tmp1, SHIFT_DUE_TO_SQxSQ); /*shift back to Q(9+16)*/ Word16 temp_radius = round_fx(L_tmp2); /* Q25 -> Q9 */ temp_radius = s_max( s_min( temp_radius , OBJ_EDIT_RADIUS_MAX_FX ), 0 ); /* L_tmp2 is in S31Q25 stored in a signed Word32 temp_radius is in S15Q9 stored in a signed Word16 */ } else { Loading Loading
apps/decoder.c +12 −7 Original line number Diff line number Diff line Loading @@ -3561,13 +3561,18 @@ static void do_object_editing_fx( if ( readInfo->obj_radius_relative[obj_idx] ) { /* radius: apply relative edit + saturation */ Word32 temp_radius = L_max( L_min( ( L_shl_sat( Mpy_32_32( (Word32) editableParameters->ism_metadata[obj_idx].radius_fx, (Word32) ( readInfo->obj_radius[obj_idx] * 512 ) ), 2 ) ), OBJ_EDIT_RADIUS_MAX_FX ), 0 ); /* Q9*Q9 -> Q7 shift back to Q9 */ // Saturate to 16-bit range if ( temp_radius > 32767 ) temp_radius = 32767; if ( temp_radius < -32768 ) temp_radius = -32768; editableParameters->ism_metadata[obj_idx].radius_fx = (Word16) temp_radius; #define SQ 9 #define SHIFT_DUE_TO_SQxSQ ( SQ - ( SQ + SQ + 1 - 16 ) ) /* ^shift by 6 == mult by 2^6 = 64.0 */ Word32 L_tmp1 = L_mult( editableParameters->ism_metadata[obj_idx].radius_fx, (Word16) ( readInfo->obj_radius[obj_idx] * ( 1L << ( SQ ) ) ) ); /*SQ*SQ*/ Word32 L_tmp2 = L_shl_sat( L_tmp1, SHIFT_DUE_TO_SQxSQ); /*shift back to Q(9+16)*/ Word16 temp_radius = round_fx(L_tmp2); /* Q25 -> Q9 */ temp_radius = s_max( s_min( temp_radius , OBJ_EDIT_RADIUS_MAX_FX ), 0 ); /* L_tmp2 is in S31Q25 stored in a signed Word32 temp_radius is in S15Q9 stored in a signed Word16 */ } else { Loading