diff --git a/lib_com/ivas_ism_com.c b/lib_com/ivas_ism_com.c index b4a058f1f4311dfe0fc1dfd1d5a0ef9ec2554f30..b959e01c6f28b364ff3625a8de7ee0fff082f326 100644 --- a/lib_com/ivas_ism_com.c +++ b/lib_com/ivas_ism_com.c @@ -61,6 +61,10 @@ #define BETA_ISM_LOW_IMP 0.6f #define BETA_ISM_MEDIUM_IMP 0.8f +#ifdef FIX_562_ISM2_64KBPS +#define MAX_BRATE_TCX_32k 48000 +#endif + /*-------------------------------------------------------------------* * bitbudget_to_brate() @@ -346,6 +350,23 @@ ivas_error ivas_ism_config( bits_CoreCoder[ch] = tmp; } +#ifdef FIX_562_ISM2_64KBPS + /* limitaton to avoid too high bitrate in one active TCX channel */ + if ( element_brate[0] >= SCE_CORE_16k_LOW_LIMIT && element_brate[0] <= IVAS_32k ) + { + diff = 0; + limit_high = MAX_BRATE_TCX_32k / FRAMES_PER_SEC; + + for ( ch = 0; ch < n_ISms; ch++ ) + { + tmp = (int16_t) min( bits_CoreCoder[ch], limit_high ); + + diff += bits_CoreCoder[ch] - tmp; + bits_CoreCoder[ch] = tmp; + } + } +#endif + if ( diff > 0 ) { ch = 0; diff --git a/lib_com/options.h b/lib_com/options.h index 8a4dc67706ac1cc2d05a033db6463b7e226ed627..b1ac3e93fca62f6b0f431598f3b1fd45b9ef7d2e 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -167,6 +167,9 @@ #define FIX_564 /* Nokia: Issue 564: Fix gains in JBM path for SBA with parametric binaural renderer */ #define FIX_566_2DIR_MASA_384K /* Nokia: Issued 566: Bugfix in 384k MASA metadata encoding of second direction */ +#define FIX_562_ISM2_64KBPS /* VA: issue 562: fix ISM2 at 64kbps issue */ + + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index eb14177b0b81d8190fbd69e09d3e9019afb056d6..e6c9951b482b8cb789c5b5de18de74bb9f0f3211 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -542,7 +542,12 @@ ivas_error ivas_ism_metadata_dec( if ( ism_mode == ISM_MODE_DISC ) { #ifdef FIX_532_ISM_MD_INACTIVE +#ifdef FIX_562_ISM2_64KBPS + if ( ism_imp[ch] == ISM_NO_META && ( ( total_brate[ch] < ACELP_8k00 && element_brate[ch] < SCE_CORE_16k_LOW_LIMIT ) || + ( total_brate[ch] <= ACELP_16k_LOW_LIMIT && element_brate[ch] >= SCE_CORE_16k_LOW_LIMIT ) ) ) +#else if ( ism_imp[ch] == ISM_NO_META && total_brate[ch] < ACELP_8k00 ) +#endif #else if ( hIsmMeta[ch]->ism_metadata_flag == 0 && localVAD[ch] == 0 && ism_metadata_flag_global ) #endif diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c index 27a4a3b0cbd15091a4ec0640374f6cabe02af1d6..003676c56b715f530a0f1b77df59e33cf14e1cb0 100644 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -636,7 +636,12 @@ ivas_error ivas_ism_metadata_enc( if ( ism_mode == ISM_MODE_DISC ) { #ifdef FIX_532_ISM_MD_INACTIVE +#ifdef FIX_562_ISM2_64KBPS + if ( ism_imp[ch] == ISM_NO_META && ( ( total_brate[ch] < ACELP_8k00 && element_brate[ch] < SCE_CORE_16k_LOW_LIMIT ) || + ( total_brate[ch] <= ACELP_16k_LOW_LIMIT && element_brate[ch] >= SCE_CORE_16k_LOW_LIMIT ) ) ) +#else if ( ism_imp[ch] == ISM_NO_META && total_brate[ch] < ACELP_8k00 ) +#endif #else if ( hIsmMeta[ch]->ism_metadata_flag == 0 && vad_flag[ch] == 0 && ism_metadata_flag_global ) #endif