Loading lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -106,4 +106,6 @@ #define FIX_1713_EXP /* VA: proposed correction to exp in ic-BWE*/ #define OPT_SBA_DEC_PATH #endif lib_dec/ivas_dirac_dec_fx.c +41 −6 Original line number Diff line number Diff line Loading @@ -1750,32 +1750,67 @@ void ivas_qmetadata_to_dirac_fx( } ELSE { #ifndef OPT_SBA_DEC_PATH Word16 tmp1, tmp4; #endif /* OPT_SBA_DEC_PATH */ Word16 a, b_tmp; Word16 exp_factor = 0; move16(); a = rand_triangular_signed_fx( seed_ptr, &exp_factor ); // q = exp_factor #ifndef OPT_SBA_DEC_PATH tmp1 = mult( a, dirac_dithering_azi_scale_fx[diff_idx] ); // exp_factor + 5 Word32 tmp1_32 = L_deposit_h( tmp1 ); #else /* OPT_SBA_DEC_PATH */ Word32 tmp1_32 = L_mult( a, dirac_dithering_azi_scale_fx[diff_idx] ); // exp_factor + 5 #endif /* OPT_SBA_DEC_PATH */ Word16 final_1_exp; Word32 final_1_32 = BASOP_Util_Add_Mant32Exp( azimuth_fx, 9, tmp1_32, exp_factor + 5, &final_1_exp ); Word32 final_1_32; #ifndef OPT_SBA_DEC_PATH final_1_32 = BASOP_Util_Add_Mant32Exp( azimuth_fx, 9, tmp1_32, add( exp_factor, 5 ), &final_1_exp ); #else /* OPT_SBA_DEC_PATH */ Word16 norm_op1 = norm_l( azimuth_fx ); Word16 norm_op2 = norm_l( tmp1_32 ); Word16 op2_e = add( exp_factor, 5 ); final_1_exp = add( s_max( s_max( sub( 9, norm_op1 ), sub( op2_e, norm_op2 ) ), 0 ), 2 ); // 2 for headroom final_1_32 = L_add( L_shr( azimuth_fx, sub( final_1_exp, 9 ) ), L_shr( tmp1_32, sub( final_1_exp, op2_e ) ) ); #endif /* OPT_SBA_DEC_PATH */ b_tmp = rand_triangular_signed_fx( seed_ptr, &exp_factor ); // q = exp_factor #ifndef OPT_SBA_DEC_PATH tmp4 = mult( b_tmp, dirac_dithering_ele_scale_fx[diff_idx] ); // exp_factor + 4 Word32 tmp4_32 = L_deposit_h( tmp4 ); Word16 final_2_exp; Word32 final_2_32 = BASOP_Util_Add_Mant32Exp( elevation_fx, 9, tmp4_32, exp_factor + 4, &final_2_exp ); #else /* OPT_SBA_DEC_PATH */ Word32 tmp4_32 = L_mult( b_tmp, dirac_dithering_ele_scale_fx[diff_idx] ); // exp_factor + 4 #endif /* OPT_SBA_DEC_PATH */ Word16 final_2_exp; Word32 final_2_32; #ifndef OPT_SBA_DEC_PATH final_2_32 = BASOP_Util_Add_Mant32Exp( elevation_fx, 9, tmp4_32, add( exp_factor, 4 ), &final_2_exp ); #else /* OPT_SBA_DEC_PATH */ norm_op1 = norm_l( elevation_fx ); norm_op2 = norm_l( tmp4_32 ); op2_e = add( exp_factor, 4 ); final_2_exp = add( s_max( s_max( sub( 9, norm_op1 ), sub( op2_e, norm_op2 ) ), 0 ), 2 ); // 2 for headroom final_2_32 = L_add( L_shr( elevation_fx, sub( final_2_exp, 9 ) ), L_shr( tmp4_32, sub( final_2_exp, op2_e ) ) ); #endif /* OPT_SBA_DEC_PATH */ #ifndef OPT_SBA_DEC_PATH final_1_32 = BASOP_Util_Add_Mant32Exp( final_1_32, final_1_exp, ONE_IN_Q30, 0, &final_1_exp ); /*0.5 in q31*/ final_2_32 = BASOP_Util_Add_Mant32Exp( final_2_32, final_2_exp, ONE_IN_Q30, 0, &final_2_exp ); azi = extract_h( L_shr( final_1_32, sub( sub( 31, final_1_exp ), 16 ) ) ); ele = extract_h( L_shr( final_2_32, sub( sub( 31, final_2_exp ), 16 ) ) ); #else /* OPT_SBA_DEC_PATH */ final_1_32 = L_add( final_1_32, L_shl( 1, sub( 30, final_1_exp ) ) ); /*0.5 in q31*/ final_2_32 = L_add( final_2_32, L_shl( 1, sub( 30, final_2_exp ) ) ); azi = extract_h( L_shr( final_1_32, sub( 15, final_1_exp ) ) ); ele = extract_h( L_shr( final_2_32, sub( 15, final_2_exp ) ) ); #endif /* OPT_SBA_DEC_PATH */ /*addition of one to compensate precision loss*/ if ( azi < 0 ) { Loading Loading
lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -106,4 +106,6 @@ #define FIX_1713_EXP /* VA: proposed correction to exp in ic-BWE*/ #define OPT_SBA_DEC_PATH #endif
lib_dec/ivas_dirac_dec_fx.c +41 −6 Original line number Diff line number Diff line Loading @@ -1750,32 +1750,67 @@ void ivas_qmetadata_to_dirac_fx( } ELSE { #ifndef OPT_SBA_DEC_PATH Word16 tmp1, tmp4; #endif /* OPT_SBA_DEC_PATH */ Word16 a, b_tmp; Word16 exp_factor = 0; move16(); a = rand_triangular_signed_fx( seed_ptr, &exp_factor ); // q = exp_factor #ifndef OPT_SBA_DEC_PATH tmp1 = mult( a, dirac_dithering_azi_scale_fx[diff_idx] ); // exp_factor + 5 Word32 tmp1_32 = L_deposit_h( tmp1 ); #else /* OPT_SBA_DEC_PATH */ Word32 tmp1_32 = L_mult( a, dirac_dithering_azi_scale_fx[diff_idx] ); // exp_factor + 5 #endif /* OPT_SBA_DEC_PATH */ Word16 final_1_exp; Word32 final_1_32 = BASOP_Util_Add_Mant32Exp( azimuth_fx, 9, tmp1_32, exp_factor + 5, &final_1_exp ); Word32 final_1_32; #ifndef OPT_SBA_DEC_PATH final_1_32 = BASOP_Util_Add_Mant32Exp( azimuth_fx, 9, tmp1_32, add( exp_factor, 5 ), &final_1_exp ); #else /* OPT_SBA_DEC_PATH */ Word16 norm_op1 = norm_l( azimuth_fx ); Word16 norm_op2 = norm_l( tmp1_32 ); Word16 op2_e = add( exp_factor, 5 ); final_1_exp = add( s_max( s_max( sub( 9, norm_op1 ), sub( op2_e, norm_op2 ) ), 0 ), 2 ); // 2 for headroom final_1_32 = L_add( L_shr( azimuth_fx, sub( final_1_exp, 9 ) ), L_shr( tmp1_32, sub( final_1_exp, op2_e ) ) ); #endif /* OPT_SBA_DEC_PATH */ b_tmp = rand_triangular_signed_fx( seed_ptr, &exp_factor ); // q = exp_factor #ifndef OPT_SBA_DEC_PATH tmp4 = mult( b_tmp, dirac_dithering_ele_scale_fx[diff_idx] ); // exp_factor + 4 Word32 tmp4_32 = L_deposit_h( tmp4 ); Word16 final_2_exp; Word32 final_2_32 = BASOP_Util_Add_Mant32Exp( elevation_fx, 9, tmp4_32, exp_factor + 4, &final_2_exp ); #else /* OPT_SBA_DEC_PATH */ Word32 tmp4_32 = L_mult( b_tmp, dirac_dithering_ele_scale_fx[diff_idx] ); // exp_factor + 4 #endif /* OPT_SBA_DEC_PATH */ Word16 final_2_exp; Word32 final_2_32; #ifndef OPT_SBA_DEC_PATH final_2_32 = BASOP_Util_Add_Mant32Exp( elevation_fx, 9, tmp4_32, add( exp_factor, 4 ), &final_2_exp ); #else /* OPT_SBA_DEC_PATH */ norm_op1 = norm_l( elevation_fx ); norm_op2 = norm_l( tmp4_32 ); op2_e = add( exp_factor, 4 ); final_2_exp = add( s_max( s_max( sub( 9, norm_op1 ), sub( op2_e, norm_op2 ) ), 0 ), 2 ); // 2 for headroom final_2_32 = L_add( L_shr( elevation_fx, sub( final_2_exp, 9 ) ), L_shr( tmp4_32, sub( final_2_exp, op2_e ) ) ); #endif /* OPT_SBA_DEC_PATH */ #ifndef OPT_SBA_DEC_PATH final_1_32 = BASOP_Util_Add_Mant32Exp( final_1_32, final_1_exp, ONE_IN_Q30, 0, &final_1_exp ); /*0.5 in q31*/ final_2_32 = BASOP_Util_Add_Mant32Exp( final_2_32, final_2_exp, ONE_IN_Q30, 0, &final_2_exp ); azi = extract_h( L_shr( final_1_32, sub( sub( 31, final_1_exp ), 16 ) ) ); ele = extract_h( L_shr( final_2_32, sub( sub( 31, final_2_exp ), 16 ) ) ); #else /* OPT_SBA_DEC_PATH */ final_1_32 = L_add( final_1_32, L_shl( 1, sub( 30, final_1_exp ) ) ); /*0.5 in q31*/ final_2_32 = L_add( final_2_32, L_shl( 1, sub( 30, final_2_exp ) ) ); azi = extract_h( L_shr( final_1_32, sub( 15, final_1_exp ) ) ); ele = extract_h( L_shr( final_2_32, sub( 15, final_2_exp ) ) ); #endif /* OPT_SBA_DEC_PATH */ /*addition of one to compensate precision loss*/ if ( azi < 0 ) { Loading