diff --git a/lib_dec/core_switching_dec_fx.c b/lib_dec/core_switching_dec_fx.c index 4eaa564ea2956c1d91a06b5ffcdcdd5ad49de555..3f6bb58e41519af5b01ec33ad395f72ab5e30979 100644 --- a/lib_dec/core_switching_dec_fx.c +++ b/lib_dec/core_switching_dec_fx.c @@ -1694,7 +1694,7 @@ ivas_error core_switching_post_dec_ivas_fx( } /* delay HQ synthesis to synchronize with ACELP synthesis */ /* rescaling to the min exp of the 2 */ - if ( hHQ_core->Q_old_postdec ) + IF( hHQ_core->Q_old_postdec ) { Scale_sig( st_fx->delay_buf_out_fx, delay_comp, negate( hHQ_core->Q_old_postdec ) ); } diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 7eeafc617435811e6f60ab5b8600326ac0519536..bcaffed63667723d3705f759042728217c19719e 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -744,11 +744,14 @@ ivas_error ivas_core_dec_fx( move16(); } #ifdef FIX_778_STEREO_BRATE_SWITCHING - st->Q_syn = 0; - move16(); + if ( NE_16( st->core, st->last_core ) ) + { + st->Q_syn = 0; + move16(); + } #endif - st->prev_Q_syn = st->Q_syn; + st->prev_Q_syn = st->Q_syn; move16(); Scale_sig( st->hHQ_core->old_out_LB_fx, L_FRAME32k, sub( st->Q_syn, st->hHQ_core->Q_old_wtda_LB ) ); @@ -879,13 +882,6 @@ ivas_error ivas_core_dec_fx( Scale_sig32( output_32_fx[n], L_FRAME48k, sub( Q4, Q11 ) ); - IF( st->hHQ_core != NULL ) - { - Scale_sig( st->hHQ_core->old_out_fx, L_FRAME48k, negate( st->hHQ_core->Q_old_wtda ) ); - st->hHQ_core->Q_old_wtda = 0; - move16(); - } - /*size of synth is choosen as delay comp to start with*/ /*-------------------cldfb-start-------------------------*/ diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index c7d5b067d610ded96208f30483713e9488b2c2ba..b2fdf5add7429863531fb585d8137aaf192a88d7 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -587,17 +587,21 @@ ivas_error ivas_mct_dec_fx( ivas_mdct_core_reconstruct_fx( hCPE, x_fx, synth_fx, fUseTns[cpe_id], 1, q_output, e_sig ); - IF( getScaleFactor16( synth_fx[0], hCPE->hCoreCoder[0]->hTcxDec->L_frameTCX ) != 0 ) + Word16 hdrm, sh; + hdrm = getScaleFactor16( synth_fx[0], hCPE->hCoreCoder[0]->hTcxDec->L_frameTCX ); + IF( hdrm != 0 ) { - Scale_sig( synth_fx[0], hCPE->hCoreCoder[0]->hTcxDec->L_frameTCX, sub( e_sig[0], 15 ) ); - e_sig[0] = 15; + sh = s_min( sub( e_sig[0], 15 ), hdrm ); + Scale_sig( synth_fx[0], hCPE->hCoreCoder[0]->hTcxDec->L_frameTCX, sh ); + e_sig[0] = sub( e_sig[0], sh ); move16(); } - IF( getScaleFactor16( synth_fx[1], hCPE->hCoreCoder[1]->hTcxDec->L_frameTCX ) != 0 ) + IF( hdrm != 0 ) { - Scale_sig( synth_fx[1], hCPE->hCoreCoder[1]->hTcxDec->L_frameTCX, sub( e_sig[1], 15 ) ); - e_sig[1] = 15; + sh = s_min( sub( e_sig[1], 15 ), hdrm ); + Scale_sig( synth_fx[1], hCPE->hCoreCoder[1]->hTcxDec->L_frameTCX, sh ); + e_sig[1] = sub( e_sig[1], sh ); move16(); } diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c index 39ff9d1bd2b916ce7f8c23101e4b82518159977a..7a9785b6f172997a11cee6c58967771cebd2645a 100644 --- a/lib_dec/ivas_mdct_core_dec.c +++ b/lib_dec/ivas_mdct_core_dec.c @@ -2104,9 +2104,11 @@ void ivas_mdct_core_reconstruct_fx( decoder_tcx_post_ivas_fx( st, synth_fx, synthFB_fx, NULL, bfi, MCT_flag ); sf = getScaleFactor16( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ) ); - if ( LT_16( sf, 2 ) ) + IF( LT_16( sf, 2 ) ) { q_syn = sub( sf, 2 ); + st->Q_syn = q_syn; + move16(); } Scale_sig( st->hTcxDec->syn_Overl_TDACFB, L_FRAME_MAX / 2, sub( sub( -1, st->Q_syn ), q_win ) ); Scale_sig( st->hTcxDec->syn_Overl_TDAC, L_FRAME32k / 2, sub( sub( -1, st->Q_syn ), q_win ) ); @@ -2130,6 +2132,8 @@ void ivas_mdct_core_reconstruct_fx( Scale_sig( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ), negate( q_syn ) ); Scale_sig( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ), negate( q_syn ) ); q_syn = 0; + st->Q_syn = 0; + move16(); move16(); /* PLC: [TCX: TD PLC] */ IF( MCT_flag != 0 ) diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 415c6bbc9da6888c44ce046ce2dcac04b69efe08..70d24c2a21e0bb8eadd6b850be73780963e1b56d 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -2786,7 +2786,7 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric idx = s_min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 ); /* Apply target spectrum that emphasizes low frequencies when the sound is surround coherent */ - spectrumModVal = L_add( L_sub( ONE_IN_Q28, L_shl( surCoh_fx, 14 ) ), L_mult( surCoh_fx, surCohEne_fx[idx] ) ); // Q29 + spectrumModVal = L_add( L_sub( ONE_IN_Q29, L_shl( surCoh_fx, 14 ) ), L_mult( surCoh_fx, surCohEne_fx[idx] ) ); // Q29 diffEne_fx = Mpy_32_32( diffEne_fx, spectrumModVal ); // Q-2 q_diffEne = sub( q_diffEne, 2 ); /* Modify also the value for decorrelation reduction */ diff --git a/lib_rend/ivas_vbap.c b/lib_rend/ivas_vbap.c index ec9a7f45077dbad2a580bd711b29b38d9627efea..c68ba03fc4f9bb66968d673746a5f04a5cea159c 100644 --- a/lib_rend/ivas_vbap.c +++ b/lib_rend/ivas_vbap.c @@ -896,8 +896,8 @@ void vbap_determine_gains_fx( } panning_wrap_angles_fixed( L_shl( azi_deg, 22 ), L_shl( ele_deg, 22 ), &azi_temp_fx, &ele_temp_fx ); - azi_norm = L_shr( Mpy_32_16_1( azi_temp_fx, 91 ), 7 ); - ele_norm = L_shr( Mpy_32_16_1( ele_temp_fx, 91 ), 7 ); + azi_norm = L_shr( Mpy_32_32( azi_temp_fx, 5965232 ), 7 ); + ele_norm = L_shr( Mpy_32_32( ele_temp_fx, 5965232 ), 7 ); panning_unit_vec_fx[0] = mult( getCosWord16R2( (Word16) azi_norm ), getCosWord16R2( (Word16) ele_norm ) ); panning_unit_vec_fx[1] = mult( getSineWord16R2( (Word16) azi_norm ), getCosWord16R2( (Word16) ele_norm ) );