Loading lib_com/ivas_spar_com_fx.c +0 −75 Original line number Original line Diff line number Diff line Loading @@ -2369,7 +2369,6 @@ static void ivas_calc_p_coeffs_per_band_enc_fx( } } ELSE IF( EQ_16( num_dmx, 3 ) ) ELSE IF( EQ_16( num_dmx, 3 ) ) { { #ifdef FIX_1970_SBA_CRASH Word64 re64[2]; Word64 re64[2]; Word32 re32[2], re32_2; Word32 re32[2], re32_2; Word16 qtmp2; Word16 qtmp2; Loading Loading @@ -2399,80 +2398,6 @@ static void ivas_calc_p_coeffs_per_band_enc_fx( q_tmp = s_min( 63, qtmp2 ); q_tmp = s_min( 63, qtmp2 ); recon_uu_re[0][0] = L_max( 0, re32_2 ); recon_uu_re[0][0] = L_max( 0, re32_2 ); move32(); move32(); #else Word32 re1[2], re2; Word16 q_re1[2]; set32_fx( re1, 0, 2 ); set16_fx( q_re1, 31, 2 ); FOR( j = 0; j < 2; j++ ) { FOR( k = 0; k < 2; k++ ) { Word32 re; W_tmp = W_mult0_32_32( pSparMd->band_coeffs[b_ts_idx].C_re_fx[0][k], cov_dd_re[k][j] ); // q_C_re+q_cov_dd_re q_tmp = sub( W_norm( W_tmp ), 33 ); re = W_shl_sat_l( W_tmp, q_tmp ); // q_C_re+q_cov_dd_re+q_tmp q_tmp = add( add( q_C_re, q_tmp ), q_cov_dd_re ); if ( W_tmp == 0 ) { q_tmp = 31; move16(); } IF( LT_16( q_tmp, q_re1[j] ) ) { re1[j] = L_shr( re1[j], sub( q_re1[j], q_tmp ) ); // q_tmp move32(); q_re1[j] = q_tmp; move16(); } ELSE { re = L_shr( re, sub( q_tmp, q_re1[j] ) ); // q_re1[j] } re1[j] = L_add( re1[j], re ); // q_re1[j] move32(); } } W_tmp = W_mult0_32_32( pSparMd->band_coeffs[b_ts_idx].C_re_fx[0][0], re1[0] ); // q_C_re+q_re1[0] q_tmp = sub( W_norm( W_tmp ), 33 ); re2 = W_shl_sat_l( W_tmp, q_tmp ); // q_C_re+q_re1[0]+q_tmp q_tmp = add( add( q_C_re, q_tmp ), q_re1[0] ); if ( W_tmp == 0 ) { q_tmp = 31; move16(); } recon_uu_re[0][0] = re2; // q_C_re+q_re1[0]+q_tmp-32 move32(); W_tmp = W_mult0_32_32( pSparMd->band_coeffs[b_ts_idx].C_re_fx[0][1], re1[1] ); // q_C_re+q_re1[1] q_tmp1 = sub( W_norm( W_tmp ), 33 ); re2 = W_shl_sat_l( W_tmp, q_tmp1 ); // q_C_re+q_re1[1]+q_tmp1 q_tmp1 = add( add( q_C_re, q_tmp1 ), q_re1[1] ); if ( W_tmp == 0 ) { q_tmp1 = 31; move16(); } IF( LT_16( q_tmp, q_tmp1 ) ) { re2 = L_shr( re2, sub( q_tmp1, q_tmp ) ); // q_tmp } ELSE { recon_uu_re[0][0] = L_shr( recon_uu_re[0][0], sub( q_tmp, q_tmp1 ) ); // q_tmp1 move32(); q_tmp = q_tmp1; move16(); } recon_uu_re[0][0] = L_add( recon_uu_re[0][0], re2 ); // q_tmp move32(); #endif IF( LT_16( q_cov_uu_re, q_tmp ) ) IF( LT_16( q_cov_uu_re, q_tmp ) ) { { Loading lib_com/options.h +0 −9 Original line number Original line Diff line number Diff line Loading @@ -72,15 +72,6 @@ #endif #endif /* ################### Start FIXES switches ########################### */ /* ################### Start FIXES switches ########################### */ /* Note: each compile switch (FIX_1101_...) is independent from the other ones */ #define ISSUE_1867_replace_overflow_libenc /* FhG: BE - replace overflow operators by non-overflow-alternatives all over the lib_enc module */ #define FIX_1942_ASSERTION_LOWSHELF /* FhG: Modified the target_gains_db_fx calculation in compute_t60_coeffs_fx() */ #define FIX_1944_CRASH_FOR_STEREO /* FhG: improve TonalMDCTConceal_InsertNoise calculation precision */ #define FIX_1970_SBA_CRASH /* Dlb: Fix for issue 1970, SBA crash */ #define FIX_1978_SAT_MISSING_IN_GAIN_ENC /* VA: Fix add saturation missing that lead to a crash in P800-10 */ #define FIX_1981_MAXIMUM_EXP_FX /* FhG: Fix bug in function to find maximum value in vector */ #define FIX_1981_MAXIMUM_EXP_FX_ZEROMANTISSA /* FhG: Fix bug in function to find maximum value in vector:zero-mantissa fix*/ #define FIX_1979_SAT_MISSING_IN_LSF_ENC /* VA: Proposal to fix 1979, saturation in lsf_enc, NOkia to review */ #define FIX_1979_SAT_MISSING_IN_LSF_ENC /* VA: Proposal to fix 1979, saturation in lsf_enc, NOkia to review */ #define FIX_1946_CRASH_JBM_PROCESSING /* FhG: Increased guard bits of DFT_fx */ #define FIX_1946_CRASH_JBM_PROCESSING /* FhG: Increased guard bits of DFT_fx */ Loading lib_com/tools_fx.c +2 −29 Original line number Original line Diff line number Diff line Loading @@ -2083,7 +2083,6 @@ Word16 maximum_exp_fx( const Word16 *exp_vec, /* i : exponents of input vector */ const Word16 *exp_vec, /* i : exponents of input vector */ const Word16 lvec_fx /* i : length of input vector */ const Word16 lvec_fx /* i : length of input vector */ ) ) #ifdef FIX_1981_MAXIMUM_EXP_FX { { Word16 j, ind; Word16 j, ind; ind = 0; ind = 0; Loading @@ -2092,49 +2091,23 @@ Word16 maximum_exp_fx( FOR( j = 1; j < lvec_fx; j++ ) FOR( j = 1; j < lvec_fx; j++ ) { { Word16 scale = sub( exp_vec[j], exp_vec[ind] ); Word16 scale = sub( exp_vec[j], exp_vec[ind] ); #ifdef FIX_1981_MAXIMUM_EXP_FX_ZEROMANTISSA test(); test(); if ( vec_fx[j] == 0 || vec_fx[ind] == 0 ) if ( vec_fx[j] == 0 || vec_fx[ind] == 0 ) { { scale = 0; scale = 0; move16(); move16(); } } #endif if ( L_mac0_sat( L_shl_sat( L_deposit_l( vec_fx[j] ), scale ), vec_fx[ind], -0x0001 ) > 0 ) { ind = j; move16(); } } return ind; } #else { Word16 j, ind; Word16 tmp, exp; ind = 0; move16(); tmp = vec_fx[0]; move16(); exp = exp_vec[0]; move16(); FOR( j = 1; j < lvec_fx; j++ ) if ( L_mac0_sat( L_shl_sat( L_deposit_l( vec_fx[j] ), scale ), vec_fx[ind], -0x0001 ) > 0 ) { IF( LT_16( tmp, shr_sat( vec_fx[j], sub( exp, exp_vec[j] ) ) ) ) { { ind = j; ind = j; move16(); move16(); tmp = vec_fx[j]; move16(); exp = exp_vec[j]; move16(); } } } } return ind; return ind; } } #endif /*---------------------------------------------------------------------* /*---------------------------------------------------------------------* Loading lib_dec/arith_coder_dec_fx.c +1 −20 Original line number Original line Diff line number Diff line Loading @@ -28,27 +28,16 @@ static Word16 tcx_arith_decode_fx( Word16 exp_k; Word16 exp_k; Word16 tmp; Word16 tmp; #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Word32 L_tmp, Q; Flag Overflow = 0; move32(); Flag Carry = 0; #else Word32 Q; Word32 Q; Word64 W_tmp; Word64 W_tmp; #endif move32(); move32(); #endif #endif bp = ari_start_decoding_14bits_prm_fx( prm, 0, &as ); bp = ari_start_decoding_14bits_prm_fx( prm, 0, &as ); tmp = sub( envelope_e, 1 + 15 ); tmp = sub( envelope_e, 1 + 15 ); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_tmp = L_deposit_l( 0 ); #else W_tmp = 0; W_tmp = 0; #endif FOR( k = 0; k < L_frame; k++ ) FOR( k = 0; k < L_frame; k++ ) { { IF( envelope[k] == 0 ) /* safety check in case of bit errors */ IF( envelope[k] == 0 ) /* safety check in case of bit errors */ Loading @@ -72,11 +61,7 @@ static Word16 tcx_arith_decode_fx( { { bp = ari_decode_14bits_sign_fx( prm, bp, target_bits, &s, &as ); bp = ari_decode_14bits_sign_fx( prm, bp, target_bits, &s, &as ); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_tmp = L_macNs_co( L_tmp, q, k, &Carry, &Overflow ); #else W_tmp = W_mac_16_16( W_tmp, q, k ); W_tmp = W_mac_16_16( W_tmp, q, k ); #endif Q = L_mult( q, negate( shl( 1, sub( 30, SPEC_EXP_DEC ) ) ) ); Q = L_mult( q, negate( shl( 1, sub( 30, SPEC_EXP_DEC ) ) ) ); IF( EQ_16( s, 0 ) ) IF( EQ_16( s, 0 ) ) Loading @@ -101,11 +86,7 @@ static Word16 tcx_arith_decode_fx( set32_fx( q_spectrum + k, 0, sub( L_frame, k ) ); set32_fx( q_spectrum + k, 0, sub( L_frame, k ) ); /* noise filling seed */ /* noise filling seed */ #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW *nf_seed = extract_l( L_tmp ); #else *nf_seed = extract_l( W_extract_l( W_tmp ) ); *nf_seed = extract_l( W_extract_l( W_tmp ) ); #endif move16(); move16(); return bp; return bp; Loading lib_dec/er_dec_tcx_fx.c +3 −69 Original line number Original line Diff line number Diff line Loading @@ -16,35 +16,14 @@ static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, Word16 L_subfr /*Q0*/, Word32 lp_gainp /*Q16*/, Word32 *lp_gainc /*Q16*/ ) static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, Word16 L_subfr /*Q0*/, Word32 lp_gainp /*Q16*/, Word32 *lp_gainc /*Q16*/ ) { { Word16 tmp16, tmp16_2, tmp16_3, tmp_e, tmp2_e, tmp_loop, i; Word16 tmp16, tmp16_2, tmp16_3, tmp_e, tmp2_e, tmp_loop, i; #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Word32 L_c; Word32 L_acc, L_tmp; #else Word64 W_acc; Word64 W_acc; Word32 L_tmp; Word32 L_tmp; #endif #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Flag Overflow = 0; Flag Carry = 0; #endif move32(); move32(); move32(); move32(); #endif #endif #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_acc = L_deposit_l( 0 ); L_c = L_deposit_l( 0 ); #else W_acc = 0; W_acc = 0; #endif #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Overflow = 0; move16(); Carry = 0; move16(); #endif tmp16 = round_fx( old_fpitch ); /*Q0*/ tmp16 = round_fx( old_fpitch ); /*Q0*/ tmp_loop = shl( L_subfr, 1 ); tmp_loop = shl( L_subfr, 1 ); Loading @@ -57,22 +36,9 @@ static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, /*st->lp_gainc += ( exc[i-2*L_subfr] - st->Mode2_lp_gainp * exc[i-2*L_subfr-(int)(st->old_fpitch+0.5f)] ) * /*st->lp_gainc += ( exc[i-2*L_subfr] - st->Mode2_lp_gainp * exc[i-2*L_subfr-(int)(st->old_fpitch+0.5f)] ) * ( exc[i-2*L_subfr] - st->Mode2_lp_gainp * exc[i-2*L_subfr-(int)(st->old_fpitch+0.5f)] );*/ ( exc[i-2*L_subfr] - st->Mode2_lp_gainp * exc[i-2*L_subfr-(int)(st->old_fpitch+0.5f)] );*/ tmp16_3 = sub_sat( exc[( i - ( L_subfr * 2 ) )] /*Q1*/, mult_r( tmp16_2 /*Q15*/, exc[( ( i - ( L_subfr * 2 ) ) - tmp16 )] /*Q1*/ ) /*Q1*/ ); tmp16_3 = sub_sat( exc[( i - ( L_subfr * 2 ) )] /*Q1*/, mult_r( tmp16_2 /*Q15*/, exc[( ( i - ( L_subfr * 2 ) ) - tmp16 )] /*Q1*/ ) /*Q1*/ ); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_acc = L_macNs_co( L_acc, tmp16_3, tmp16_3, &Carry, &Overflow ); /*Q3*/ Overflow = 0; move16(); L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Accumulate Carrys Q-1*/ Carry = 0; move16(); #else W_acc = W_mac_16_16( W_acc, tmp16_3, tmp16_3 ); /*Q3*/ W_acc = W_mac_16_16( W_acc, tmp16_3, tmp16_3 ); /*Q3*/ #endif } } #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_tmp = norm_llQ31( L_c, L_acc, &tmp_e ); /*Q3,norm,tmp_e*/ #else L_tmp = w_norm_llQ31( W_acc, &tmp_e ); /*Q3,norm,tmp_e*/ L_tmp = w_norm_llQ31( W_acc, &tmp_e ); /*Q3,norm,tmp_e*/ #endif tmp_e = add( tmp_e, 31 - ( add( shl( Q_exc, 1 ), 1 ) ) ); /*L_tmp is Q31, now*/ tmp_e = add( tmp_e, 31 - ( add( shl( Q_exc, 1 ), 1 ) ) ); /*L_tmp is Q31, now*/ tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/; tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/; tmp_e = sub( add( tmp2_e, tmp_e ), 15 ); tmp_e = sub( add( tmp2_e, tmp_e ), 15 ); Loading @@ -88,56 +54,24 @@ static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, static void calcGainc2_fx( Word16 *exc, Word16 Q_exc, Word16 L_subfr /*Q0*/, Word32 *lp_gainc /*Q16*/ ) static void calcGainc2_fx( Word16 *exc, Word16 Q_exc, Word16 L_subfr /*Q0*/, Word32 *lp_gainc /*Q16*/ ) { { Word16 i, cnt, tmp16, tmp_e, tmp2_e; Word16 i, cnt, tmp16, tmp_e, tmp2_e; #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Word32 L_c, L_acc, L_tmp; #else Word64 W_acc; Word64 W_acc; Word32 L_tmp; Word32 L_tmp; #endif #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Flag Overflow = 0; Flag Carry = 0; #endif #endif move16(); move16(); move16(); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Carry = 0; move16(); Overflow = 0; move16(); move16(); #endif L_c = L_deposit_l( 0 ); L_acc = L_deposit_l( 0 ); #else W_acc = 0; W_acc = 0; #endif cnt = shl( L_subfr, 1 ); cnt = shl( L_subfr, 1 ); FOR( i = 0; i < cnt; i++ ) FOR( i = 0; i < cnt; i++ ) { { /* *gainc += ( exc[i-2*L_subfr] ) * ( exc[i-2*L_subfr]); */ /* *gainc += ( exc[i-2*L_subfr] ) * ( exc[i-2*L_subfr]); */ #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_acc = L_macNs_co( L_acc, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, &Carry, &Overflow ); /*Q3*/ Overflow = 0; move16(); L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /* Accumulate Carrys Q-1*/ Carry = 0; move16(); #else W_acc = W_mac_16_16( W_acc, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, exc[( i - ( L_subfr * 2 ) )] /*Q1*/ ); /*Q3*/ W_acc = W_mac_16_16( W_acc, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, exc[( i - ( L_subfr * 2 ) )] /*Q1*/ ); /*Q3*/ #endif } } #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_tmp = norm_llQ31( L_c, L_acc, &tmp_e ); /*Q3,norm,tmp_e*/ #else L_tmp = w_norm_llQ31( W_acc, &tmp_e ); /*Q3,norm,tmp_e*/ L_tmp = w_norm_llQ31( W_acc, &tmp_e ); /*Q3,norm,tmp_e*/ #endif tmp_e = add( tmp_e, sub( 31, ( add( shl( Q_exc, 1 ), 1 ) ) ) ); /*L_tmp is Q31, now*/ tmp_e = add( tmp_e, sub( 31, ( add( shl( Q_exc, 1 ), 1 ) ) ) ); /*L_tmp is Q31, now*/ tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/; tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/; tmp_e = sub( add( tmp2_e, tmp_e ), 15 ); tmp_e = sub( add( tmp2_e, tmp_e ), 15 ); Loading Loading
lib_com/ivas_spar_com_fx.c +0 −75 Original line number Original line Diff line number Diff line Loading @@ -2369,7 +2369,6 @@ static void ivas_calc_p_coeffs_per_band_enc_fx( } } ELSE IF( EQ_16( num_dmx, 3 ) ) ELSE IF( EQ_16( num_dmx, 3 ) ) { { #ifdef FIX_1970_SBA_CRASH Word64 re64[2]; Word64 re64[2]; Word32 re32[2], re32_2; Word32 re32[2], re32_2; Word16 qtmp2; Word16 qtmp2; Loading Loading @@ -2399,80 +2398,6 @@ static void ivas_calc_p_coeffs_per_band_enc_fx( q_tmp = s_min( 63, qtmp2 ); q_tmp = s_min( 63, qtmp2 ); recon_uu_re[0][0] = L_max( 0, re32_2 ); recon_uu_re[0][0] = L_max( 0, re32_2 ); move32(); move32(); #else Word32 re1[2], re2; Word16 q_re1[2]; set32_fx( re1, 0, 2 ); set16_fx( q_re1, 31, 2 ); FOR( j = 0; j < 2; j++ ) { FOR( k = 0; k < 2; k++ ) { Word32 re; W_tmp = W_mult0_32_32( pSparMd->band_coeffs[b_ts_idx].C_re_fx[0][k], cov_dd_re[k][j] ); // q_C_re+q_cov_dd_re q_tmp = sub( W_norm( W_tmp ), 33 ); re = W_shl_sat_l( W_tmp, q_tmp ); // q_C_re+q_cov_dd_re+q_tmp q_tmp = add( add( q_C_re, q_tmp ), q_cov_dd_re ); if ( W_tmp == 0 ) { q_tmp = 31; move16(); } IF( LT_16( q_tmp, q_re1[j] ) ) { re1[j] = L_shr( re1[j], sub( q_re1[j], q_tmp ) ); // q_tmp move32(); q_re1[j] = q_tmp; move16(); } ELSE { re = L_shr( re, sub( q_tmp, q_re1[j] ) ); // q_re1[j] } re1[j] = L_add( re1[j], re ); // q_re1[j] move32(); } } W_tmp = W_mult0_32_32( pSparMd->band_coeffs[b_ts_idx].C_re_fx[0][0], re1[0] ); // q_C_re+q_re1[0] q_tmp = sub( W_norm( W_tmp ), 33 ); re2 = W_shl_sat_l( W_tmp, q_tmp ); // q_C_re+q_re1[0]+q_tmp q_tmp = add( add( q_C_re, q_tmp ), q_re1[0] ); if ( W_tmp == 0 ) { q_tmp = 31; move16(); } recon_uu_re[0][0] = re2; // q_C_re+q_re1[0]+q_tmp-32 move32(); W_tmp = W_mult0_32_32( pSparMd->band_coeffs[b_ts_idx].C_re_fx[0][1], re1[1] ); // q_C_re+q_re1[1] q_tmp1 = sub( W_norm( W_tmp ), 33 ); re2 = W_shl_sat_l( W_tmp, q_tmp1 ); // q_C_re+q_re1[1]+q_tmp1 q_tmp1 = add( add( q_C_re, q_tmp1 ), q_re1[1] ); if ( W_tmp == 0 ) { q_tmp1 = 31; move16(); } IF( LT_16( q_tmp, q_tmp1 ) ) { re2 = L_shr( re2, sub( q_tmp1, q_tmp ) ); // q_tmp } ELSE { recon_uu_re[0][0] = L_shr( recon_uu_re[0][0], sub( q_tmp, q_tmp1 ) ); // q_tmp1 move32(); q_tmp = q_tmp1; move16(); } recon_uu_re[0][0] = L_add( recon_uu_re[0][0], re2 ); // q_tmp move32(); #endif IF( LT_16( q_cov_uu_re, q_tmp ) ) IF( LT_16( q_cov_uu_re, q_tmp ) ) { { Loading
lib_com/options.h +0 −9 Original line number Original line Diff line number Diff line Loading @@ -72,15 +72,6 @@ #endif #endif /* ################### Start FIXES switches ########################### */ /* ################### Start FIXES switches ########################### */ /* Note: each compile switch (FIX_1101_...) is independent from the other ones */ #define ISSUE_1867_replace_overflow_libenc /* FhG: BE - replace overflow operators by non-overflow-alternatives all over the lib_enc module */ #define FIX_1942_ASSERTION_LOWSHELF /* FhG: Modified the target_gains_db_fx calculation in compute_t60_coeffs_fx() */ #define FIX_1944_CRASH_FOR_STEREO /* FhG: improve TonalMDCTConceal_InsertNoise calculation precision */ #define FIX_1970_SBA_CRASH /* Dlb: Fix for issue 1970, SBA crash */ #define FIX_1978_SAT_MISSING_IN_GAIN_ENC /* VA: Fix add saturation missing that lead to a crash in P800-10 */ #define FIX_1981_MAXIMUM_EXP_FX /* FhG: Fix bug in function to find maximum value in vector */ #define FIX_1981_MAXIMUM_EXP_FX_ZEROMANTISSA /* FhG: Fix bug in function to find maximum value in vector:zero-mantissa fix*/ #define FIX_1979_SAT_MISSING_IN_LSF_ENC /* VA: Proposal to fix 1979, saturation in lsf_enc, NOkia to review */ #define FIX_1979_SAT_MISSING_IN_LSF_ENC /* VA: Proposal to fix 1979, saturation in lsf_enc, NOkia to review */ #define FIX_1946_CRASH_JBM_PROCESSING /* FhG: Increased guard bits of DFT_fx */ #define FIX_1946_CRASH_JBM_PROCESSING /* FhG: Increased guard bits of DFT_fx */ Loading
lib_com/tools_fx.c +2 −29 Original line number Original line Diff line number Diff line Loading @@ -2083,7 +2083,6 @@ Word16 maximum_exp_fx( const Word16 *exp_vec, /* i : exponents of input vector */ const Word16 *exp_vec, /* i : exponents of input vector */ const Word16 lvec_fx /* i : length of input vector */ const Word16 lvec_fx /* i : length of input vector */ ) ) #ifdef FIX_1981_MAXIMUM_EXP_FX { { Word16 j, ind; Word16 j, ind; ind = 0; ind = 0; Loading @@ -2092,49 +2091,23 @@ Word16 maximum_exp_fx( FOR( j = 1; j < lvec_fx; j++ ) FOR( j = 1; j < lvec_fx; j++ ) { { Word16 scale = sub( exp_vec[j], exp_vec[ind] ); Word16 scale = sub( exp_vec[j], exp_vec[ind] ); #ifdef FIX_1981_MAXIMUM_EXP_FX_ZEROMANTISSA test(); test(); if ( vec_fx[j] == 0 || vec_fx[ind] == 0 ) if ( vec_fx[j] == 0 || vec_fx[ind] == 0 ) { { scale = 0; scale = 0; move16(); move16(); } } #endif if ( L_mac0_sat( L_shl_sat( L_deposit_l( vec_fx[j] ), scale ), vec_fx[ind], -0x0001 ) > 0 ) { ind = j; move16(); } } return ind; } #else { Word16 j, ind; Word16 tmp, exp; ind = 0; move16(); tmp = vec_fx[0]; move16(); exp = exp_vec[0]; move16(); FOR( j = 1; j < lvec_fx; j++ ) if ( L_mac0_sat( L_shl_sat( L_deposit_l( vec_fx[j] ), scale ), vec_fx[ind], -0x0001 ) > 0 ) { IF( LT_16( tmp, shr_sat( vec_fx[j], sub( exp, exp_vec[j] ) ) ) ) { { ind = j; ind = j; move16(); move16(); tmp = vec_fx[j]; move16(); exp = exp_vec[j]; move16(); } } } } return ind; return ind; } } #endif /*---------------------------------------------------------------------* /*---------------------------------------------------------------------* Loading
lib_dec/arith_coder_dec_fx.c +1 −20 Original line number Original line Diff line number Diff line Loading @@ -28,27 +28,16 @@ static Word16 tcx_arith_decode_fx( Word16 exp_k; Word16 exp_k; Word16 tmp; Word16 tmp; #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Word32 L_tmp, Q; Flag Overflow = 0; move32(); Flag Carry = 0; #else Word32 Q; Word32 Q; Word64 W_tmp; Word64 W_tmp; #endif move32(); move32(); #endif #endif bp = ari_start_decoding_14bits_prm_fx( prm, 0, &as ); bp = ari_start_decoding_14bits_prm_fx( prm, 0, &as ); tmp = sub( envelope_e, 1 + 15 ); tmp = sub( envelope_e, 1 + 15 ); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_tmp = L_deposit_l( 0 ); #else W_tmp = 0; W_tmp = 0; #endif FOR( k = 0; k < L_frame; k++ ) FOR( k = 0; k < L_frame; k++ ) { { IF( envelope[k] == 0 ) /* safety check in case of bit errors */ IF( envelope[k] == 0 ) /* safety check in case of bit errors */ Loading @@ -72,11 +61,7 @@ static Word16 tcx_arith_decode_fx( { { bp = ari_decode_14bits_sign_fx( prm, bp, target_bits, &s, &as ); bp = ari_decode_14bits_sign_fx( prm, bp, target_bits, &s, &as ); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_tmp = L_macNs_co( L_tmp, q, k, &Carry, &Overflow ); #else W_tmp = W_mac_16_16( W_tmp, q, k ); W_tmp = W_mac_16_16( W_tmp, q, k ); #endif Q = L_mult( q, negate( shl( 1, sub( 30, SPEC_EXP_DEC ) ) ) ); Q = L_mult( q, negate( shl( 1, sub( 30, SPEC_EXP_DEC ) ) ) ); IF( EQ_16( s, 0 ) ) IF( EQ_16( s, 0 ) ) Loading @@ -101,11 +86,7 @@ static Word16 tcx_arith_decode_fx( set32_fx( q_spectrum + k, 0, sub( L_frame, k ) ); set32_fx( q_spectrum + k, 0, sub( L_frame, k ) ); /* noise filling seed */ /* noise filling seed */ #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW *nf_seed = extract_l( L_tmp ); #else *nf_seed = extract_l( W_extract_l( W_tmp ) ); *nf_seed = extract_l( W_extract_l( W_tmp ) ); #endif move16(); move16(); return bp; return bp; Loading
lib_dec/er_dec_tcx_fx.c +3 −69 Original line number Original line Diff line number Diff line Loading @@ -16,35 +16,14 @@ static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, Word16 L_subfr /*Q0*/, Word32 lp_gainp /*Q16*/, Word32 *lp_gainc /*Q16*/ ) static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, Word16 L_subfr /*Q0*/, Word32 lp_gainp /*Q16*/, Word32 *lp_gainc /*Q16*/ ) { { Word16 tmp16, tmp16_2, tmp16_3, tmp_e, tmp2_e, tmp_loop, i; Word16 tmp16, tmp16_2, tmp16_3, tmp_e, tmp2_e, tmp_loop, i; #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Word32 L_c; Word32 L_acc, L_tmp; #else Word64 W_acc; Word64 W_acc; Word32 L_tmp; Word32 L_tmp; #endif #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Flag Overflow = 0; Flag Carry = 0; #endif move32(); move32(); move32(); move32(); #endif #endif #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_acc = L_deposit_l( 0 ); L_c = L_deposit_l( 0 ); #else W_acc = 0; W_acc = 0; #endif #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Overflow = 0; move16(); Carry = 0; move16(); #endif tmp16 = round_fx( old_fpitch ); /*Q0*/ tmp16 = round_fx( old_fpitch ); /*Q0*/ tmp_loop = shl( L_subfr, 1 ); tmp_loop = shl( L_subfr, 1 ); Loading @@ -57,22 +36,9 @@ static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, /*st->lp_gainc += ( exc[i-2*L_subfr] - st->Mode2_lp_gainp * exc[i-2*L_subfr-(int)(st->old_fpitch+0.5f)] ) * /*st->lp_gainc += ( exc[i-2*L_subfr] - st->Mode2_lp_gainp * exc[i-2*L_subfr-(int)(st->old_fpitch+0.5f)] ) * ( exc[i-2*L_subfr] - st->Mode2_lp_gainp * exc[i-2*L_subfr-(int)(st->old_fpitch+0.5f)] );*/ ( exc[i-2*L_subfr] - st->Mode2_lp_gainp * exc[i-2*L_subfr-(int)(st->old_fpitch+0.5f)] );*/ tmp16_3 = sub_sat( exc[( i - ( L_subfr * 2 ) )] /*Q1*/, mult_r( tmp16_2 /*Q15*/, exc[( ( i - ( L_subfr * 2 ) ) - tmp16 )] /*Q1*/ ) /*Q1*/ ); tmp16_3 = sub_sat( exc[( i - ( L_subfr * 2 ) )] /*Q1*/, mult_r( tmp16_2 /*Q15*/, exc[( ( i - ( L_subfr * 2 ) ) - tmp16 )] /*Q1*/ ) /*Q1*/ ); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_acc = L_macNs_co( L_acc, tmp16_3, tmp16_3, &Carry, &Overflow ); /*Q3*/ Overflow = 0; move16(); L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Accumulate Carrys Q-1*/ Carry = 0; move16(); #else W_acc = W_mac_16_16( W_acc, tmp16_3, tmp16_3 ); /*Q3*/ W_acc = W_mac_16_16( W_acc, tmp16_3, tmp16_3 ); /*Q3*/ #endif } } #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_tmp = norm_llQ31( L_c, L_acc, &tmp_e ); /*Q3,norm,tmp_e*/ #else L_tmp = w_norm_llQ31( W_acc, &tmp_e ); /*Q3,norm,tmp_e*/ L_tmp = w_norm_llQ31( W_acc, &tmp_e ); /*Q3,norm,tmp_e*/ #endif tmp_e = add( tmp_e, 31 - ( add( shl( Q_exc, 1 ), 1 ) ) ); /*L_tmp is Q31, now*/ tmp_e = add( tmp_e, 31 - ( add( shl( Q_exc, 1 ), 1 ) ) ); /*L_tmp is Q31, now*/ tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/; tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/; tmp_e = sub( add( tmp2_e, tmp_e ), 15 ); tmp_e = sub( add( tmp2_e, tmp_e ), 15 ); Loading @@ -88,56 +54,24 @@ static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, static void calcGainc2_fx( Word16 *exc, Word16 Q_exc, Word16 L_subfr /*Q0*/, Word32 *lp_gainc /*Q16*/ ) static void calcGainc2_fx( Word16 *exc, Word16 Q_exc, Word16 L_subfr /*Q0*/, Word32 *lp_gainc /*Q16*/ ) { { Word16 i, cnt, tmp16, tmp_e, tmp2_e; Word16 i, cnt, tmp16, tmp_e, tmp2_e; #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Word32 L_c, L_acc, L_tmp; #else Word64 W_acc; Word64 W_acc; Word32 L_tmp; Word32 L_tmp; #endif #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Flag Overflow = 0; Flag Carry = 0; #endif #endif move16(); move16(); move16(); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Carry = 0; move16(); Overflow = 0; move16(); move16(); #endif L_c = L_deposit_l( 0 ); L_acc = L_deposit_l( 0 ); #else W_acc = 0; W_acc = 0; #endif cnt = shl( L_subfr, 1 ); cnt = shl( L_subfr, 1 ); FOR( i = 0; i < cnt; i++ ) FOR( i = 0; i < cnt; i++ ) { { /* *gainc += ( exc[i-2*L_subfr] ) * ( exc[i-2*L_subfr]); */ /* *gainc += ( exc[i-2*L_subfr] ) * ( exc[i-2*L_subfr]); */ #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_acc = L_macNs_co( L_acc, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, &Carry, &Overflow ); /*Q3*/ Overflow = 0; move16(); L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /* Accumulate Carrys Q-1*/ Carry = 0; move16(); #else W_acc = W_mac_16_16( W_acc, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, exc[( i - ( L_subfr * 2 ) )] /*Q1*/ ); /*Q3*/ W_acc = W_mac_16_16( W_acc, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, exc[( i - ( L_subfr * 2 ) )] /*Q1*/ ); /*Q3*/ #endif } } #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW L_tmp = norm_llQ31( L_c, L_acc, &tmp_e ); /*Q3,norm,tmp_e*/ #else L_tmp = w_norm_llQ31( W_acc, &tmp_e ); /*Q3,norm,tmp_e*/ L_tmp = w_norm_llQ31( W_acc, &tmp_e ); /*Q3,norm,tmp_e*/ #endif tmp_e = add( tmp_e, sub( 31, ( add( shl( Q_exc, 1 ), 1 ) ) ) ); /*L_tmp is Q31, now*/ tmp_e = add( tmp_e, sub( 31, ( add( shl( Q_exc, 1 ), 1 ) ) ) ); /*L_tmp is Q31, now*/ tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/; tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/; tmp_e = sub( add( tmp2_e, tmp_e ), 15 ); tmp_e = sub( add( tmp2_e, tmp_e ), 15 ); Loading