diff --git a/lib_com/options.h b/lib_com/options.h index 9eca13133d17fd46bc263a7453f7796b82d518ca..1bdad531d639fbc89d54db5ff3afb331b2816589 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -174,6 +174,7 @@ #define NONBE_FIX_751_MASA_TD_BITRATE_CHECK /* Nokia: issue 751: prevents secondary channel to take reserved bitrate if not DTX mode */ #define NONBE_FIX_736_FOA_BR_SWITCH /* FhG/Dlb : Issue 736: FOA bitrate switching decoding crashes in in ivas_spar_to_dirac */ #define NONBE_FIX_746_NONDIEGETIC_MD /* Eri: Issue 746: The non-diegetic panning flag affects the encoder bitstream even if extended metadata is not enabled. Crashes the decoder.*/ +#define NONBE_FIX_723_SBA_BR_SWITCH_MSAN /* Dlb: issue 723: Uninitialised value used after BR switching*/ #define NONBE_FIX_729_ASAN_2ISM_ACELP /* VA: issue 729: fix ASAN ACELP errors with 2 ISM coding using LTV */ #define NONBE_FIX_698_SBA_MSAN /* Dlb: issue 698: Uninitialized memory read in SBA init */ #define NONBE_FIX_694_OMASA_ACELP /* Nokia: Issue #694: OMASA crash in ACELP with extreme item */ @@ -182,8 +183,8 @@ #define NONBE_FIX_752_OSBA_MISCONFIG_MCT /* FhG: issue 752: misconfiguration of MCT causes crashes for coding with sampling rate under 48kHz at 256kbps*/ #define NONBE_FIX_780_ISM_STARTS_WITH_SID /* VA: issue 780: fix Crash in ISM decoding when bitstream starts with an SID and output_config is not EXT */ #define NONBE_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* FhG: fix for cng in ISM DTX on sudden silence periods - JBM addon (issue 552) */ -#define NONBE_FIX_738_SBA_BR_SW_ASAN /* FhG: issue 738: fixes bug when switching to an MCT bitrate and previous frame was ACELP */ -#define NONBE_CR_FIX_735_SBA_HP20_BRATE_SWITCHING /* VA: Issue 735: Resolve "HP20 filtering bug in SBA/OSBA bitrate switching" */ +#define NONBE_FIX_738_SBA_BR_SW_ASAN /* FhG: issue 738: fixes bug when switching to an MCT bitrate and previous frame was ACELP */ +#define NONBE_CR_FIX_735_SBA_HP20_BRATE_SWITCHING /* VA: Issue 735: Resolve "HP20 filtering bug in SBA/OSBA bitrate switching" */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index fd94409a0213db97bdf4358770faa720474b2080..f0a0c13266cf346eeb1227d768047d8f069a06fb 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -1092,6 +1092,9 @@ void ivas_dirac_dec_read_BS( hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0]; hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0]; +#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0]; +#endif } for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { @@ -1100,6 +1103,9 @@ void ivas_dirac_dec_read_BS( hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0]; hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0]; hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0]; +#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0]; +#endif } } @@ -1158,6 +1164,9 @@ void ivas_dirac_dec_read_BS( hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0]; hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0]; +#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0]; +#endif } for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { @@ -1166,6 +1175,9 @@ void ivas_dirac_dec_read_BS( hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0]; hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0]; hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0]; +#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0]; +#endif } } diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index fd7df428aeb9de26e17c26cffea54320e5a7e79e..9df593b1528bb435f79ddd05f89817589fc313e1 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -1520,7 +1520,9 @@ static void ivas_spar_dec_parse_md_bs( float quant[IVAS_SPAR_MAX_C_COEFF]; int16_t do_repeat[IVAS_MAX_NUM_BANDS]; int16_t bw_final, bw_fact; - +#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN + int32_t active_brate; +#endif *dtx_vad = 1; *bands_bw = 1; qsi = 0; @@ -1591,8 +1593,13 @@ static void ivas_spar_dec_parse_md_bs( } ivas_parse_parameter_bitstream_dtx( &hMdDec->spar_md, st0, *bands_bw, *nB, hMdDec->spar_md_cfg.num_dmx_chans_per_band, hMdDec->spar_md_cfg.num_decorr_per_band ); +#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN + active_brate = ( ivas_total_brate > IVAS_SID_5k2 ) ? ivas_total_brate : last_active_brate; + if ( active_brate >= IVAS_24k4 ) +#else if ( last_active_brate >= IVAS_24k4 ) +#endif { bw_final = 1; } @@ -1600,6 +1607,7 @@ static void ivas_spar_dec_parse_md_bs( { bw_final = 2; } + bw_fact = *bands_bw / bw_final; for ( i = *nB - 1; i >= 0; i-- )