diff --git a/.gitignore b/.gitignore index 32b5db376ac09f7ec5e07924dbf0401d064b6cbd..163a7f82ec5de50ba7bebce4901e0b0232a6c5ad 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,78 @@ coan_out_* /scripts/mem_analysis_enc_STEREO_sw.csv /scripts/mem_analysis_enc_STEREO_16k4_DTX.csv *.pwv +/dcr_ism1 +/bwe_clicks_ism1 +/BWD_issue +/.ipynb_checkpoints +/scripts/.ipynb_checkpoints +/scripts/wmops_analysis +/scripts/wmops_analysis_new +/tcx_hq_problem_ism1 +/scripts/dly_error_profiles/dly_profile_19_.dat +/build.txt +/bit.64k +/bit.32k +/bit +/binaural_loudness.ipynb +/tmp.txt +/syn.wav +/syn.ref +/syn.64k.0.csv +/syn.64k +/syn.32k +/stvST32c_-stereo_32000_32.bit +/split_renderer_config_768_3dof_cldfbpc.txt +/split_out_sba_lcld_20ms_out.wav +/split_out_sba_lcld_20ms.pkt +/split_out_mc_lc3plus_20ms_out.wav +/split_out_mc_lc3plus_20ms.pkt +/run_ivas_codec.sh +/report.html +/report-junit.xm +/out.wav +/ltv48_1ISM.cut14.wav.0.csv +/ltv48_1ISM.cut14.pcm +/ltv48_1ISM.cut14.dec.pcm.0.csv +/ltv48_1ISM.cut14.64k.dec.pcm.0.csv +/ltv48_1ISM.cut14.64k.dec.pcm +/ltv48_1ISM.cut14.32k.dec.pcm +/IvasBuilder.txt +/ivas.192 +/ism_loudness_stv48_48kHz.md +/ism_loudness_stv48_32kHz.md +/ism_loudness_sel48_48kHz.md +/ism_loudness_old.xlsx +/ism_loudness_ltv48_ISM4.md +/ism_loudness_ltv48_ISM3.md +/ism_loudness_ltv48_ISM2.md +/ism_loudness_ltv48_ISM1.md +/ism_loudness_ltv48_48kHz.md +/ism_loudness.xlsx +/ism_loudness.py +/HOA2_to_BINAURAL_ROOM_REVERBNone_rend_config_combined_20msNone_0-1000_2-500_1-500.wav +/git_blame_string.sh +/get_license_table.py +/enc_out_mc.pkt +/enc_out.pkt +/cut_ism.py +/scripts/Vlad_mergeNewsletters.py +/scripts/Vlad_extract_max_num_ind.py +/scripts/tables_obj.txt +/scripts/tables_exe.txt +/scripts/requirements.txt +/scripts/parseNewsletterWmops.py +/scripts/output.xlsx +/scripts/functions_obj.txt +/scripts/functions_exe.txt +/scripts/dep_tree.txt +/scripts/cmplx_evs_in_ivas.xlsx +/scripts/bit +/scripts/binaural_loudness.ipynb +/scripts/config/Vlad_self_test_ltv.prm +/scripts/config/Vlad_self_test.prm +/scripts/config/Vlad_ci_linux_ltv.json +/scripts/config/Vlad_ci_linux.json +/cmake-build +/bit.fix +/syn diff --git a/CMakeLists.txt b/CMakeLists.txt index 17799f0db0009b84f104c03e67137b2afe27edb3..61cfcae7d683cf4fc6e236ce31a072af9872e3ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,14 +74,14 @@ if(UNIX) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") elseif("${CLANG}" MATCHES "3" OR "${CLANG}" MATCHES "usan") # NOTE: keep in sync with list in Makefile - set(USAN_CHECKS_ENABLE + set(USAN_CHECKS_LIST undefined # Default checks # Extra checks float-divide-by-zero implicit-conversion local-bounds ) - list(JOIN USAN_CHECKS_ENABLE "," USAN_CHECKS_ENABLE) + string(JOIN , USAN_CHECKS_ENABLE ${USAN_CHECKS_LIST}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${USAN_CHECKS_ENABLE} -fsanitize-recover=${USAN_CHECKS_ENABLE}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${USAN_CHECKS_ENABLE} -fsanitize-recover=${USAN_CHECKS_ENABLE}") diff --git a/lib_com/options.h b/lib_com/options.h index 6a7b5fc9810151e1f2b5063e221f0a5106b7e31c..ca645bf9e4db764ef28e7b78e4912f4e2099f894 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -173,6 +173,7 @@ #define NONBE_FIX_1070_USAN_SEGFAULT_MC_TO_BIN_BTSW_HEADROT /* fix 1070 USAN: nullptr-with-offset and Segfaults in 7_1_4 to BINAURAL and BINAURAL_ROOM_REVERB decoding with bitrate switching and head rotation*/ #define REVERT_ZERO_FLUSH_TRESH /* FhG: issue 1069: revert threshold value introduced with !1518 due to significant complexity increase*/ #define NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC /* FhG: fix out-of-bound errors when switching from SID frame to active frame*/ +#define NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING /* VA: issue 1110: fix encoder crash in the stereo DTX bitrate switching condition */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/acelp_core_dec.c b/lib_dec/acelp_core_dec.c index 02637caf2d526d70a380c3ce0e9b30b658d025c4..a1ea41894b870034c602dc14d8ecb738c6d6e0cf 100644 --- a/lib_dec/acelp_core_dec.c +++ b/lib_dec/acelp_core_dec.c @@ -231,7 +231,11 @@ ivas_error acelp_core_dec( st->hGSCDec->Last_frame_ener = (float) MAX_32; } +#ifdef NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING + if ( st->hFdCngDec != NULL && ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && ( st->last_core_brate == SID_2k40 || st->last_core_brate == FRAME_NO_DATA ) ) +#else if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && ( st->last_core_brate == SID_2k40 || st->last_core_brate == FRAME_NO_DATA ) ) +#endif { set_zero( st->hFdCngDec->hFdCngCom->olapBufferSynth2, FFTLEN ); set_zero( hStereoCng->olapBufferSynth22, FFTLEN ); diff --git a/lib_dec/ivas_stereo_cng_dec.c b/lib_dec/ivas_stereo_cng_dec.c index aad8bad5b326f1d58060a04d4b15d1242a96a1ef..0f0ff9d7aaa5efec93963bfa3e96c72064210fcb 100644 --- a/lib_dec/ivas_stereo_cng_dec.c +++ b/lib_dec/ivas_stereo_cng_dec.c @@ -923,6 +923,10 @@ void stereo_cna_update_params( } else { +#ifdef NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING + hFdCngDec->first_cna_noise_updated = 0; +#endif + return; } diff --git a/lib_dec/ivas_stereo_switching_dec.c b/lib_dec/ivas_stereo_switching_dec.c index 8bf4047f81d0cc051696d5118675dc3a6d94bcb4..644437828087be2e9f2d806a35188f93aea6a65a 100644 --- a/lib_dec/ivas_stereo_switching_dec.c +++ b/lib_dec/ivas_stereo_switching_dec.c @@ -1551,6 +1551,11 @@ void stereo_switching_dec( mvr2r( sts[0]->old_exc, sts[1]->old_exc, L_EXC_MEM_DEC ); mvr2r( sts[0]->lsf_old, sts[1]->lsf_old, M ); mvr2r( sts[0]->lsp_old, sts[1]->lsp_old, M ); + +#ifdef NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING + sts[1]->last_core_brate = sts[0]->last_core_brate; +#endif + if ( hCPE->element_mode == IVAS_CPE_MDCT ) { sts[1]->last_core = sts[0]->last_core; diff --git a/lib_dec/ivas_tcx_core_dec.c b/lib_dec/ivas_tcx_core_dec.c index 70e3706dc135c97f0dce6f5c614cb0ed991e27e1..2efb3ff1c46ede5d5faa561bd3fe0000d86e4c71 100644 --- a/lib_dec/ivas_tcx_core_dec.c +++ b/lib_dec/ivas_tcx_core_dec.c @@ -514,6 +514,18 @@ void stereo_tcx_core_dec( } } +#ifdef DEBUG_MODE_TCX + { + int16_t tmp[L_FRAME48k]; + + for ( i = 0; i < st->L_frame; i++ ) + { + tmp[i] = (int16_t) ( synth[i] + 0.5f ); + } + dbgwrite( tmp, sizeof( int16_t ), st->L_frame, 1, "./res/stereo_tcx_dec_synth.pcm" ); + } +#endif + /*--------------------------------------------------------------------------------* * Post-processing *--------------------------------------------------------------------------------*/ diff --git a/lib_enc/acelp_core_enc.c b/lib_enc/acelp_core_enc.c index 1a9c969b58789a1e2281d340b0d617cb068601f4..eca6e6d71c26a67eaca1f9c05c28d0fb8329e743 100644 --- a/lib_enc/acelp_core_enc.c +++ b/lib_enc/acelp_core_enc.c @@ -379,7 +379,11 @@ ivas_error acelp_core_enc( * After inactive period, use the most up-to-date ISPs *-----------------------------------------------------------------*/ +#ifdef NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING + if ( st->hDtxEnc != NULL && ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_2k40 ) ) +#else if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_2k40 ) +#endif { mvr2r( st->hDtxEnc->lspCNG, st->lsp_old, M ); lsp2lsf( st->hDtxEnc->lspCNG, st->lsf_old, M, int_fs ); diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index 60997fd27a9deb0ead61ee3dc3ba47ff3af238d5..55ceb014be7d32233057007aabb9cd9d42c250fa 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -802,6 +802,14 @@ void xtalk_classifier_td( minimum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_min ); maximum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_max ); +#ifdef DEBUG_MODE_TD + edge_type = 0; + edge_detect( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, -0.2f, 1.0f, &edge, &edge_type ); + edge_0_1 = lin_interp( 1 - edge, 1.0f, 1.0f, 0.6f, 0.0f, 1 ); + dbgwrite( &score, sizeof( float ), 1, 1, "res/score.x" ); + dbgwrite( &edge_0_1, sizeof( float ), 1, 1, "res/edge_0_1.x" ); +#endif + if ( ( ( scr_min < 0.0f && scr_max > 0.2f ) || ( scr_max - scr_min > 0.5f ) ) ) { /* test rising edge (use 0 as edge_type because of newer->older buffer samples ordering) */ @@ -823,6 +831,7 @@ void xtalk_classifier_td( edge_0_1 = 0.0f; } + /* weight raw score based on rising edge detector */ wedge = lin_interp( edge_0_1, 0.0f, 0.9f, 1.0f, 0.5f, 1 ); @@ -974,6 +983,13 @@ void xtalk_classifier_dft( minimum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_min ); maximum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_max ); +#ifdef DEBUG_MODE_TD + edge = redge_detect( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, -0.2f, 1.0f ); + edge_0_1 = lin_interp( 1 - edge, 1.0f, 1.0f, 0.83f, 0.0f, 1 ); + dbgwrite( &score, sizeof( float ), 1, 1, "res/score.x" ); + dbgwrite( &edge_0_1, sizeof( float ), 1, 1, "res/edge_0_1.x" ); +#endif + if ( scr_min < 0.2f && scr_max > 0.0f ) { edge = redge_detect( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, -0.2f, 1.0f ); @@ -984,6 +1000,7 @@ void xtalk_classifier_dft( edge_0_1 = 0.0f; } + /* weight raw score based on rising edge detector */ wedge = lin_interp( edge_0_1, 0.0f, 0.95f, 1.0f, 0.3f, 1 ); hStereoClassif->xtalk_wscore = wedge * hStereoClassif->xtalk_wscore + ( 1 - wedge ) * score; diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c index c15b7418f0a0e6a231098f38ba164ed3d3ee6afa..0c883721eb1d397ae3cd476e8f257eddabe8542f 100644 --- a/lib_enc/ivas_stereo_switching_enc.c +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -801,6 +801,10 @@ void stereo_switching_enc( mvr2r( sts[0]->lsf_old1, sts[1]->lsf_old1, M ); mvr2r( sts[0]->lsp_old1, sts[1]->lsp_old1, M ); +#ifdef NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING + sts[1]->last_core_brate = sts[0]->last_core_brate; +#endif + sts[1]->GSC_noisy_speech = 0; if ( hCPE->element_mode == IVAS_CPE_MDCT ) {