diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index ab7f7362b5c3e226cc15776af2c8b77de7922650..c6fb28ee63ea7da4f17a341a6faf34814e0c5c21 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -2525,6 +2525,13 @@ void SetCurrentPsychParams( TCX_CONFIG_HANDLE hTcxCfg ); +#ifdef NONBE_FIX_1329_OSBA_CRASH_128 +int16_t is_available_bits( + Encoder_State **sts, /* i/o: encoder state structure */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +); +#endif + void stereo_coder_tcx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT encoder structure */ Encoder_State **sts, /* i/o: encoder state structure */ diff --git a/lib_com/options.h b/lib_com/options.h index 80cd7a383bbd806dfa0f5fa82fac8262234d7590..e65359b711895c29872730db20b8dd5fc86c9f34 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -171,7 +171,7 @@ #define NONBE_1244_FIX_SWB_BWE_MEMORY /* VA: issue 1244: fix to SWB BWE memory in case of switching from FB coding - pending a review by Huawei */ #define NONBE_1122_KEEP_EVS_MODE_UNCHANGED /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR. */ - +#define NONBE_FIX_1329_OSBA_CRASH_128 /* Dlb: Fix for issue 1329, OSBA cras at 128 kbps*/ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_enc/ivas_mct_enc_mct.c b/lib_enc/ivas_mct_enc_mct.c index feefd008ee8ab81e33f796a53977bb59a1088797..c1478b2b092b09232cfbe6cfbd837df3633989eb 100644 --- a/lib_enc/ivas_mct_enc_mct.c +++ b/lib_enc/ivas_mct_enc_mct.c @@ -588,6 +588,18 @@ void apply_MCT_enc( if ( ( fabsf( max_corr ) > DEFAULT_CORR_THRES && !hMCT->hbr_mct ) || ( fabsf( max_corr ) > SPAR_CORR_THRES && hMCT->hbr_mct ) ) { +#ifdef NONBE_FIX_1329_OSBA_CRASH_128 + { + Encoder_State *p_st[2]; + p_st[0] = sts[ch1]; + p_st[1] = sts[ch2]; + if ( is_available_bits( p_st, 1 ) == 0 ) + { + break; + } + } +#endif + if ( !forceKeepTree ) { /*save channel pair*/ diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c index fa97984539101d7e80145469c21457c2f5532687..553f8e259e9d46686009eda2280d9aac35bf9de6 100755 --- a/lib_enc/ivas_stereo_mdct_stereo_enc.c +++ b/lib_enc/ivas_stereo_mdct_stereo_enc.c @@ -167,6 +167,46 @@ static void write_itd_data( } +#ifdef NONBE_FIX_1329_OSBA_CRASH_128 +int16_t is_available_bits( + Encoder_State **sts, /* i/o: encoder state structure */ + const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ +) +{ + int16_t nSubframes, bits_available; + nSubframes = ( sts[0]->core == TCX_20_CORE && sts[1]->core == TCX_20_CORE ) ? 1 : NB_DIV; + if ( !mct_on ) + { + return 1; + } + else + { + if ( +#ifdef DEBUG_FORCE_MDCT_STEREO_MODE + hStereoMdct->fDualMono || +#endif + ( sts[0]->hTcxEnc->transform_type[0] != sts[1]->hTcxEnc->transform_type[0] ) || ( sts[0]->hTcxEnc->transform_type[1] != sts[1]->hTcxEnc->transform_type[1] ) || ( sts[0]->last_core != sts[1]->last_core && ( sts[0]->last_core == ACELP_CORE || sts[1]->last_core == ACELP_CORE ) ) || sts[0]->last_core == ACELP_CORE || sts[1]->last_core == ACELP_CORE ) + { + return 1; + } + else + { + int16_t k; + for ( k = 0; k < nSubframes; k++ ) + { + bits_available = ( ( mct_on ? 2 * sts[0]->bits_frame_channel : sts[0]->bits_frame_nominal ) - sts[0]->side_bits_frame_channel - sts[1]->side_bits_frame_channel - ( nSubframes == 2 ? OFFSET_BITS_TCX10 : OFFSET_BITS_TCX20 ) ) / nSubframes; + /*check if this should be 0 or a higher value*/ + if ( bits_available <= 0 ) + { + return 0; + } + } + } + } + return 1; +} +#endif + /*-------------------------------------------------------------------* * stereo_coder_tcx() *