From c4b6cdd1f2f0dfbc900eeddf75510479d95c822e Mon Sep 17 00:00:00 2001 From: rhb Date: Tue, 30 May 2023 16:37:14 +0200 Subject: [PATCH 1/3] amend FIX_483b to resolve another floating point exception --- lib_enc/ivas_stereo_mdct_stereo_enc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c index 138c9436d6..f8e2ca05ae 100755 --- a/lib_enc/ivas_stereo_mdct_stereo_enc.c +++ b/lib_enc/ivas_stereo_mdct_stereo_enc.c @@ -563,7 +563,12 @@ void ms_inv_mask_processing( { int16_t sfb; STEREO_MDCT_BAND_PARAMETERS *sfbConf; +#ifdef FIX_483b + int16_t nSubframes, L_subframeTCX; + nSubframes = (sts[0]->hTcxEnc->tcxMode == TCX_20) ? 1 : NB_DIV; + L_subframeTCX = sts[0]->hTcxEnc->L_frameTCX / nSubframes; +#endif sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; if ( sts[0]->last_core == ACELP_CORE ) @@ -588,6 +593,15 @@ void ms_inv_mask_processing( } } +#ifdef FIX_483b + /* set rest of inverse spectrum to zero */ + if ( L_subframeTCX > sfbConf->sfbOffset[maxSfb] ) + { + set_zero( &x_inv_0[sfbConf->sfbOffset[maxSfb]], L_subframeTCX - sfbConf->sfbOffset[maxSfb] ); + set_zero( &x_inv_1[sfbConf->sfbOffset[maxSfb]], L_subframeTCX - sfbConf->sfbOffset[maxSfb] ); + } +#endif + return; } -- GitLab From f6d3e3e644b9ed0fd1c88378e011aa34ce1a271a Mon Sep 17 00:00:00 2001 From: rhb Date: Tue, 30 May 2023 16:59:03 +0200 Subject: [PATCH 2/3] clang format --- lib_enc/ivas_stereo_mdct_stereo_enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 lib_enc/ivas_stereo_mdct_stereo_enc.c diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c old mode 100755 new mode 100644 index f8e2ca05ae..97c9ebe7ff --- a/lib_enc/ivas_stereo_mdct_stereo_enc.c +++ b/lib_enc/ivas_stereo_mdct_stereo_enc.c @@ -566,7 +566,7 @@ void ms_inv_mask_processing( #ifdef FIX_483b int16_t nSubframes, L_subframeTCX; - nSubframes = (sts[0]->hTcxEnc->tcxMode == TCX_20) ? 1 : NB_DIV; + nSubframes = ( sts[0]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; L_subframeTCX = sts[0]->hTcxEnc->L_frameTCX / nSubframes; #endif sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; -- GitLab From 2702bcb66cfa5bf9b55bba20086cef0e818e2317 Mon Sep 17 00:00:00 2001 From: rhb Date: Wed, 31 May 2023 13:42:58 +0200 Subject: [PATCH 3/3] fix more problems with calculations on uninitialized values --- lib_enc/ivas_mct_core_enc.c | 24 ++++++++++++++---------- lib_enc/ivas_mct_enc_mct.c | 3 +++ lib_enc/ivas_stereo_mdct_core_enc.c | 25 +++++++++++++++++++------ lib_enc/ivas_stereo_mdct_stereo_enc.c | 0 4 files changed, 36 insertions(+), 16 deletions(-) mode change 100644 => 100755 lib_enc/ivas_mct_enc_mct.c mode change 100644 => 100755 lib_enc/ivas_stereo_mdct_core_enc.c mode change 100644 => 100755 lib_enc/ivas_stereo_mdct_stereo_enc.c diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index 48a7abc42f..40153a3c69 100755 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -334,8 +334,7 @@ void ivas_mct_core_enc( for ( ch = 0; ch < nChannels; ch++ ) { - if ( - sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) { continue; } @@ -359,16 +358,21 @@ void ivas_mct_core_enc( } else { - /* power spectrum: MDCT^2 + MDST^2 */ - powerSpecMsInv[ch][n][0] = inv_spectrum[ch][n][0] * inv_spectrum[ch][n][0]; - - for ( i = 1; i < L_subframeTCX - 1; i++ ) +#ifdef FIX_483b + if ( hMCT->currBlockDataCnt > 0 ) +#endif { - mdst = ( inv_spectrum[ch][n][i + 1] - inv_spectrum[ch][n][i - 1] ); /* An MDST estimate */ - powerSpecMsInv[ch][n][i] = mdst * mdst + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; - } + /* power spectrum: MDCT^2 + MDST^2 */ + powerSpecMsInv[ch][n][0] = inv_spectrum[ch][n][0] * inv_spectrum[ch][n][0]; + + for ( i = 1; i < L_subframeTCX - 1; i++ ) + { + mdst = ( inv_spectrum[ch][n][i + 1] - inv_spectrum[ch][n][i - 1] ); /* An MDST estimate */ + powerSpecMsInv[ch][n][i] = mdst * mdst + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; + } - powerSpecMsInv[ch][n][L_subframeTCX - 1] = inv_spectrum[ch][n][L_subframeTCX - 1] * inv_spectrum[ch][n][L_subframeTCX - 1]; + powerSpecMsInv[ch][n][L_subframeTCX - 1] = inv_spectrum[ch][n][L_subframeTCX - 1] * inv_spectrum[ch][n][L_subframeTCX - 1]; + } /* power spectrum: MDCT^2 + MDST^2 */ powerSpec[ch][n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][0] * sts[ch]->hTcxEnc->spectrum[n][0]; diff --git a/lib_enc/ivas_mct_enc_mct.c b/lib_enc/ivas_mct_enc_mct.c old mode 100644 new mode 100755 index 228f48b305..50982e2e52 --- a/lib_enc/ivas_mct_enc_mct.c +++ b/lib_enc/ivas_mct_enc_mct.c @@ -700,6 +700,9 @@ void apply_MCT_enc( { v_multc( sts[ch]->hTcxEnc->spectrum[k], qratio, sts[ch]->hTcxEnc->spectrum[k], L_subframeTCX ); v_multc( mdst_spectrum[ch][k], qratio, mdst_spectrum[ch][k], L_subframeTCX ); +#ifdef FIX_483b + set_zero( inv_spectrum[ch][k], L_subframeTCX ); +#endif } hMCT->mc_global_ild[ch] = 0; } diff --git a/lib_enc/ivas_stereo_mdct_core_enc.c b/lib_enc/ivas_stereo_mdct_core_enc.c old mode 100644 new mode 100755 index 03fcad485a..c8e3dcfcd4 --- a/lib_enc/ivas_stereo_mdct_core_enc.c +++ b/lib_enc/ivas_stereo_mdct_core_enc.c @@ -223,6 +223,10 @@ void stereo_mdct_core_enc( inv_spectrum[ch][1] = quantized_spectrum[ch][1]; mdst_spectrum[ch][0] = mdst_spectrum_long[ch]; mdst_spectrum[ch][1] = mdst_spectrum_long[ch] + N_TCX10_MAX; +#ifdef FIX_483b + sts[ch]->hTcxEnc->tns_ms_flag[0] = 0; + sts[ch]->hTcxEnc->tns_ms_flag[1] = 0; +#endif } @@ -275,7 +279,11 @@ void stereo_mdct_core_enc( for ( n = 0; n < nSubframes; n++ ) { +#ifdef FIX_483b + if ( sts[ch]->hTcxEnc->tns_ms_flag[n] ) +#else if ( !sts[ch]->hTcxEnc->fUseTns[n] ) +#endif { /* power spectrum: MDCT^2 + MDST^2 */ for ( i = 0; i < L_subframeTCX; i++ ) @@ -286,14 +294,19 @@ void stereo_mdct_core_enc( } else { - /* power spectrum: MDCT^2 + MDST^2 */ - powerSpecMsInv[ch][n][0] = inv_spectrum[ch][n][0] * inv_spectrum[ch][n][0]; - for ( i = 1; i < L_subframeTCX - 1; i++ ) +#ifdef FIX_483b + if ( hStereoMdct->mdct_stereo_mode[n] != SMDCT_DUAL_MONO ) +#endif { - float mdst = ( inv_spectrum[ch][n][i + 1] - inv_spectrum[ch][n][i - 1] ); /* An MDST estimate */ - powerSpecMsInv[ch][n][i] = mdst * mdst + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; + /* power spectrum: MDCT^2 + MDST^2 */ + powerSpecMsInv[ch][n][0] = inv_spectrum[ch][n][0] * inv_spectrum[ch][n][0]; + for ( i = 1; i < L_subframeTCX - 1; i++ ) + { + float mdst = ( inv_spectrum[ch][n][i + 1] - inv_spectrum[ch][n][i - 1] ); /* An MDST estimate */ + powerSpecMsInv[ch][n][i] = mdst * mdst + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; + } + powerSpecMsInv[ch][n][L_subframeTCX - 1] = inv_spectrum[ch][n][L_subframeTCX - 1] * inv_spectrum[ch][n][L_subframeTCX - 1]; } - powerSpecMsInv[ch][n][L_subframeTCX - 1] = inv_spectrum[ch][n][L_subframeTCX - 1] * inv_spectrum[ch][n][L_subframeTCX - 1]; /* power spectrum: MDCT^2 + MDST^2 */ powerSpec[ch][n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][0] * sts[ch]->hTcxEnc->spectrum[n][0]; diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c old mode 100644 new mode 100755 -- GitLab