diff --git a/lib_com/options.h b/lib_com/options.h index e6c4e17a473039e1fdbd3726f9553d588343e2b7..6766aa136d1b3c0f2c94baa19d196c92f18087aa 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -156,8 +156,9 @@ #define FIX_293_EXT_RENDERER_CLI /* FhG: Fix bugs in external renderer CLI */ #define FIX_268 /* Issue 268: Add low cost dry-run of memory analysis */ #define LOW_RATE_TRANS_FIX /* Eri: Fix for critical item during transitions */ - #define FIX_197_CREND_INTERFACE +#define SET_TNS_FLAG_IN_EVERY_FRAME /* FhG: issue 288 - mismatch between encoder and decoder wrt TNS usage in unified stereo with frameloss */ + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif diff --git a/lib_dec/core_dec_init.c b/lib_dec/core_dec_init.c index ab3af1448219e518a2bc58c059b313908c61590e..ec673cd19c31c2921b689d3bd782a8e05efeca76 100644 --- a/lib_dec/core_dec_init.c +++ b/lib_dec/core_dec_init.c @@ -670,6 +670,13 @@ void open_decoder_LPD( st->last_tns_active = 0; st->second_last_tns_active = 0; st->second_last_core = -1; +#ifdef SET_TNS_FLAG_IN_EVERY_FRAME + /* TODO: also apply for MCT modes, once issue #24 is solved */ + if ( st->hTcxCfg != NULL && !MCT_flag && st->element_mode != EVS_MONO ) + { + st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( is_init ? total_brate : st->bits_frame_nominal * FRAMES_PER_SEC, st->igf, st->element_mode, st->mct_chan_mode ); + } +#endif if ( hTcxDec != NULL ) { hTcxDec->tcxltp_second_last_pitch = st->old_fpitch; diff --git a/lib_dec/ivas_tcx_core_dec.c b/lib_dec/ivas_tcx_core_dec.c index e8256aa6548858f1b4b1b579cae34a4f2e024967..2a6dcdf82e4cbc3a94dc69e15271aa47149f7c07 100644 --- a/lib_dec/ivas_tcx_core_dec.c +++ b/lib_dec/ivas_tcx_core_dec.c @@ -96,6 +96,13 @@ void stereo_tcx_init_dec( st->hTcxCfg->resq = getResq( st->bits_frame_nominal * FRAMES_PER_SEC ); hTcxDec->tcx_lpc_shaped_ari = getTcxLpcShapedAri( st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_flag, st->element_mode ); st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_flag, st->mct_chan_mode ); +#ifdef SET_TNS_FLAG_IN_EVERY_FRAME + /* TODO: also apply for MCT modes, once issue #24 is solved */ + if ( !MCT_flag && st->element_mode != EVS_MONO ) + { + st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( st->bits_frame_nominal * FRAMES_PER_SEC, st->igf, st->element_mode, st->mct_chan_mode ); + } +#endif if ( hTcxLtpDec != NULL ) { hTcxLtpDec->tcxltp = getTcxLtp( st->sr_core ); diff --git a/lib_enc/ivas_tcx_core_enc.c b/lib_enc/ivas_tcx_core_enc.c index ce48efdf7c53a03d4e8153882694e4567b46d1c1..cc05a70044b214ca4dcafa01cab92fd9102f9964 100644 --- a/lib_enc/ivas_tcx_core_enc.c +++ b/lib_enc/ivas_tcx_core_enc.c @@ -100,6 +100,12 @@ void stereo_tcx_init_enc( st->hTcxCfg->resq = getResq( st->bits_frame_nominal * FRAMES_PER_SEC ); st->hTcxEnc->tcx_lpc_shaped_ari = getTcxLpcShapedAri( st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_mode, st->element_mode ); st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_mode, st->mct_chan_mode ); +#ifdef SET_TNS_FLAG_IN_EVERY_FRAME + if ( st->element_mode != EVS_MONO ) + { + st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( st->bits_frame_nominal * FRAMES_PER_SEC, st->igf, st->element_mode, st->mct_chan_mode ); + } +#endif st->core_brate = st->total_brate; diff --git a/scripts/config/self_test_evs.prm b/scripts/config/self_test_evs.prm index a252dd4380817d57b5ebb5b4f9ac650721799cf0..6c4936a0d436b9b481d689e0e0e11cce8ea8d49b 100644 --- a/scripts/config/self_test_evs.prm +++ b/scripts/config/self_test_evs.prm @@ -41,7 +41,7 @@ ../IVAS_dec -fec 5 8 bit testv/stv8c_13k20_8-8_DTX20_FEC5.tst // Codec A at 32 kbps, 32kHz in, 8kHz out, random FEC at 6% -../IVAS_cod 32000 32 scripts/testv/stv32c.pcm bit +../IVAS_cod 32000 32 testv/stv32c.pcm bit ../IVAS_dec -fec testv/FEC_6pct2.bin 8 bit stv32c_32k_32-8_FEC6.tst