From 103a056f02493a4068da6cfb1bd1cda49f30af32 Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Fri, 26 May 2023 13:05:59 +0530 Subject: [PATCH 1/6] Fix for the issue# 501 --- lib_com/options.h | 2 ++ lib_dec/ivas_spar_decoder.c | 30 ++++++++++++++++++++++++++++++ lib_dec/ivas_spar_md_dec.c | 28 +++++++++++++++++++++++----- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 33b25d459c..c31f056010 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -206,6 +206,8 @@ #define FIX_468_16KHZ_PUPMIX /* Dlb: Fix issue 468 for Param Upmix at 16kHz sampling rate */ #define FIX_499_DFT_STEREO_PLC /* Eri: Fix for issue 499: Wrong past memory addressed for computing energy of DFT stereo residual ECU frame */ #define FIX_489_COV_SMOOTHING /* Dlb: Fix covariance smoothing for ParamUpmix */ +#define FIX_501_TABLE_IDX_INIT /* Dlb: Fix for the issue 501 */ + #define FIX_485_STATIC_BUFFERS /* FhG: move static buffers in DirAC parameter estimator to the DirAC struct */ #define FIX_I503_ASAN_ERROR_IND_LIST /* VA: fix issue #503: address sanitizer error with IND_LIST_DYN */ #define FIX_473_JITTER_NONDIEGETIC_PANNING /* FhG,Orange: add missing non-diegetic panning to JITTER */ diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 7609099b5f..b509203c2a 100755 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -736,7 +736,37 @@ static void ivas_spar_dec_MD( ivas_spar_md_dec_init( hSpar->hMdDec, hDecoderConfig, num_channels, sba_order ); } } +#ifdef FIX_501_TABLE_IDX_INIT + else if ( st_ivas->ini_frame == 0 ) + { + if ( st_ivas->sid_format == SID_SBA_2TC ) + { + table_idx = ivas_get_spar_table_idx( IVAS_48k, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + } + else + { + table_idx = ivas_get_spar_table_idx( IVAS_24k4, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + } + + hSpar->hMdDec->table_idx = table_idx; + if ( hSpar->hMdDec->spar_hoa_md_flag ) + { + hSpar->hMdDec->spar_md.num_bands = IVAS_MAX_NUM_BANDS; + } + else + { + hSpar->hMdDec->spar_md.num_bands = min( SPAR_DIRAC_SPLIT_START_BAND, IVAS_MAX_NUM_BANDS ); + } + + if ( hSpar->hMdDec->table_idx != table_idx ) + { + hSpar->hMdDec->table_idx = table_idx; + hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[table_idx].td_ducking; + ivas_spar_md_dec_init( hSpar->hMdDec, hDecoderConfig, num_channels, sba_order ); + } + } +#endif /*---------------------------------------------------------------------* * Decode MD *---------------------------------------------------------------------*/ diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index f9d34970c2..9a47a3562a 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -84,9 +84,11 @@ static ivas_error ivas_spar_set_dec_config( ivas_spar_md_dec_state_t *hMdDec, co static void ivas_parse_parameter_bitstream_dtx( ivas_spar_md_t *pSpar_md, Decoder_State *st, const int16_t bw, const int16_t num_bands, int16_t *num_dmx_per_band, int16_t *num_dec_per_band ); static ivas_error ivas_deindex_real_index( const int16_t *index, const int16_t q_levels, const float min_value, const float max_value, float *quant, const int16_t num_ch_dim2 ); - +#ifdef FIX_501_TABLE_IDX_INIT +static void ivas_spar_dec_parse_md_bs( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st, int16_t *nB, int16_t *bands_bw, int16_t *dtx_vad, const int32_t ivas_total_brate, const int16_t use_planar_coeff, const int16_t sba_inactive_mode, const int32_t last_active_brate ); +#else static void ivas_spar_dec_parse_md_bs( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st, int16_t *nB, int16_t *bands_bw, int16_t *dtx_vad, const int32_t ivas_total_brate, const int16_t use_planar_coeff, const int16_t sba_inactive_mode ); - +#endif /*------------------------------------------------------------------------- * ivas_spar_md_dec_matrix_open() @@ -672,7 +674,12 @@ void ivas_spar_md_dec_process( ivas_spar_dec_parse_md_bs( hMdDec, st0, &nB, &bw, &dtx_vad, st_ivas->hDecoderConfig->ivas_total_brate, - ivas_spar_br_table_consts[hMdDec->table_idx].usePlanarCoeff, st_ivas->hQMetaData->sba_inactive_mode ); + ivas_spar_br_table_consts[hMdDec->table_idx].usePlanarCoeff, st_ivas->hQMetaData->sba_inactive_mode +#ifdef FIX_501_TABLE_IDX_INIT + , + st_ivas->last_active_ivas_total_brate +#endif + ); #if 0 { @@ -1708,7 +1715,12 @@ static void ivas_spar_dec_parse_md_bs( int16_t *dtx_vad, const int32_t ivas_total_brate, const int16_t use_planar_coeff, - const int16_t sba_inactive_mode ) + const int16_t sba_inactive_mode +#ifdef FIX_501_TABLE_IDX_INIT + , + const int32_t last_active_brate +#endif +) { int16_t i, j, k, num_bands; int16_t ii, jj, ndec, ndm, b, idx; @@ -1812,7 +1824,13 @@ static void ivas_spar_dec_parse_md_bs( *nB = num_bands; *bands_bw = 1; - +#ifdef FIX_501_TABLE_IDX_INIT + if ( ( ivas_total_brate < IVAS_24k4 ) && ( last_active_brate < IVAS_24k4 ) ) + { + *bands_bw = 2; + *nB = num_bands / *bands_bw; + } +#endif return; } -- GitLab From c033e0d1ca713d1116ecd4eee4bd44d0ec3ce9ce Mon Sep 17 00:00:00 2001 From: Rivukanta Bhattacharya <100792@ittiam.com> Date: Mon, 29 May 2023 15:43:34 +0530 Subject: [PATCH 2/6] Review comment changes --- lib_dec/ivas_spar_decoder.c | 62 ++++++++++++++++++------------------- lib_dec/ivas_spar_md_dec.c | 37 ++++++++++++---------- 2 files changed, 52 insertions(+), 47 deletions(-) diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index b509203c2a..4956ef820b 100755 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -73,6 +73,9 @@ ivas_error ivas_spar_dec_open( int16_t i, j, b, active_w_mixing; int32_t output_Fs; int16_t num_decor_chs; +#ifdef FIX_501_TABLE_IDX_INIT + int16_t table_idx; +#endif error = IVAS_ERR_OK; sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); @@ -112,7 +115,34 @@ ivas_error ivas_spar_dec_open( return error; } hSpar->hMdDec->td_decorr_flag = 1; - hSpar->hMdDec->table_idx = -1; +#ifdef FIX_501_TABLE_IDX_INIT + + if ( st_ivas->ini_frame == 0 && st_ivas->hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) + { + if ( st_ivas->sid_format == SID_SBA_2TC ) + { + table_idx = ivas_get_spar_table_idx( IVAS_48k, sba_order_internal, SPAR_CONFIG_BW, NULL, NULL ); + } + else + { + table_idx = ivas_get_spar_table_idx( IVAS_24k4, sba_order_internal, SPAR_CONFIG_BW, NULL, NULL ); + } + + if ( hSpar->hMdDec->table_idx != table_idx ) + { + hSpar->hMdDec->table_idx = table_idx; + hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[hSpar->hMdDec->table_idx].td_ducking; + + ivas_spar_md_dec_init( hSpar->hMdDec, st_ivas->hDecoderConfig, num_channels_internal, sba_order_internal ); + } + } + else + { +#endif + hSpar->hMdDec->table_idx = -1; +#ifdef FIX_501_TABLE_IDX_INIT + } +#endif /* set FB config. */ active_w_mixing = -1; @@ -736,37 +766,7 @@ static void ivas_spar_dec_MD( ivas_spar_md_dec_init( hSpar->hMdDec, hDecoderConfig, num_channels, sba_order ); } } -#ifdef FIX_501_TABLE_IDX_INIT - else if ( st_ivas->ini_frame == 0 ) - { - if ( st_ivas->sid_format == SID_SBA_2TC ) - { - table_idx = ivas_get_spar_table_idx( IVAS_48k, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - } - else - { - table_idx = ivas_get_spar_table_idx( IVAS_24k4, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - } - - hSpar->hMdDec->table_idx = table_idx; - if ( hSpar->hMdDec->spar_hoa_md_flag ) - { - hSpar->hMdDec->spar_md.num_bands = IVAS_MAX_NUM_BANDS; - } - else - { - hSpar->hMdDec->spar_md.num_bands = min( SPAR_DIRAC_SPLIT_START_BAND, IVAS_MAX_NUM_BANDS ); - } - - if ( hSpar->hMdDec->table_idx != table_idx ) - { - hSpar->hMdDec->table_idx = table_idx; - hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[table_idx].td_ducking; - ivas_spar_md_dec_init( hSpar->hMdDec, hDecoderConfig, num_channels, sba_order ); - } - } -#endif /*---------------------------------------------------------------------* * Decode MD *---------------------------------------------------------------------*/ diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index 9a47a3562a..a10834ad81 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -1803,29 +1803,34 @@ 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 ); - for ( i = *nB - 1; i >= 0; i-- ) +#ifdef FIX_501_TABLE_IDX_INIT + if ( last_active_brate >= IVAS_24k4 ) { - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * i]; - - for ( b = *bands_bw - 1; b >= 0; b-- ) +#endif + for ( i = *nB - 1; i >= 0; i-- ) { - idx = i * *bands_bw + b; - for ( j = 0; j < FOA_CHANNELS - 1; j++ ) - { - hMdDec->spar_md.band_coeffs[idx].pred_re[j] = hMdDec->spar_md.band_coeffs[i].pred_re[j]; - } - for ( j = 0; j < ndec; j++ ) + ndec = hMdDec->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * i]; + + for ( b = *bands_bw - 1; b >= 0; b-- ) { - hMdDec->spar_md.band_coeffs[idx].P_re[j] = hMdDec->spar_md.band_coeffs[i].P_re[j]; + idx = i * *bands_bw + b; + for ( j = 0; j < FOA_CHANNELS - 1; j++ ) + { + hMdDec->spar_md.band_coeffs[idx].pred_re[j] = hMdDec->spar_md.band_coeffs[i].pred_re[j]; + } + for ( j = 0; j < ndec; j++ ) + { + hMdDec->spar_md.band_coeffs[idx].P_re[j] = hMdDec->spar_md.band_coeffs[i].P_re[j]; + } + hMdDec->valid_bands[idx] = 1; } - hMdDec->valid_bands[idx] = 1; } - } - *nB = num_bands; - *bands_bw = 1; + *nB = num_bands; + *bands_bw = 1; #ifdef FIX_501_TABLE_IDX_INIT - if ( ( ivas_total_brate < IVAS_24k4 ) && ( last_active_brate < IVAS_24k4 ) ) + } + else { *bands_bw = 2; *nB = num_bands / *bands_bw; -- GitLab From 66a31275972e25d659714d0a210e414bfeb13aee Mon Sep 17 00:00:00 2001 From: Rivukanta Bhattacharya <100792@ittiam.com> Date: Tue, 30 May 2023 18:26:26 +0530 Subject: [PATCH 3/6] Review comment changes - Part 2 --- lib_dec/ivas_spar_decoder.c | 31 ++++--------------------------- lib_dec/ivas_spar_md_dec.c | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 4956ef820b..8f781e4703 100755 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -73,9 +73,6 @@ ivas_error ivas_spar_dec_open( int16_t i, j, b, active_w_mixing; int32_t output_Fs; int16_t num_decor_chs; -#ifdef FIX_501_TABLE_IDX_INIT - int16_t table_idx; -#endif error = IVAS_ERR_OK; sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); @@ -116,32 +113,12 @@ ivas_error ivas_spar_dec_open( } hSpar->hMdDec->td_decorr_flag = 1; #ifdef FIX_501_TABLE_IDX_INIT - - if ( st_ivas->ini_frame == 0 && st_ivas->hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) - { - if ( st_ivas->sid_format == SID_SBA_2TC ) - { - table_idx = ivas_get_spar_table_idx( IVAS_48k, sba_order_internal, SPAR_CONFIG_BW, NULL, NULL ); - } - else - { - table_idx = ivas_get_spar_table_idx( IVAS_24k4, sba_order_internal, SPAR_CONFIG_BW, NULL, NULL ); - } - - if ( hSpar->hMdDec->table_idx != table_idx ) - { - hSpar->hMdDec->table_idx = table_idx; - hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[hSpar->hMdDec->table_idx].td_ducking; - - ivas_spar_md_dec_init( hSpar->hMdDec, st_ivas->hDecoderConfig, num_channels_internal, sba_order_internal ); - } - } - else + if ( st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 ) { -#endif - hSpar->hMdDec->table_idx = -1; -#ifdef FIX_501_TABLE_IDX_INIT + hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[hSpar->hMdDec->table_idx].td_ducking; } +#else + hSpar->hMdDec->table_idx = -1; #endif /* set FB config. */ diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index a10834ad81..62f419de67 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -292,11 +292,29 @@ ivas_error ivas_spar_md_dec_open( return error; } +#ifdef FIX_501_TABLE_IDX_INIT + if ( hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) + { + if ( sid_format == SID_SBA_2TC ) + { + hMdDec->table_idx = ivas_get_spar_table_idx( IVAS_48k, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + } + else + { + hMdDec->table_idx = ivas_get_spar_table_idx( IVAS_24k4, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + } + } + else + { + hMdDec->table_idx = ivas_get_spar_table_idx( hDecoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + } +#else hMdDec->table_idx = 0; /* just to initialize state variables*/ if ( ( hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) && ( sid_format == SID_SBA_2TC ) ) { hMdDec->table_idx = ivas_get_spar_table_idx( IVAS_48k, sba_order, SPAR_CONFIG_BW, NULL, NULL ); } +#endif if ( ( error = ivas_spar_md_dec_init( hMdDec, hDecoderConfig, num_channels, sba_order ) ) != IVAS_ERR_OK ) { return error; @@ -1836,6 +1854,7 @@ static void ivas_spar_dec_parse_md_bs( *nB = num_bands / *bands_bw; } #endif + return; } -- GitLab From 4368f53e6341c4cce29d5396db80df88af838cbc Mon Sep 17 00:00:00 2001 From: Rivukanta Bhattacharya <100792@ittiam.com> Date: Tue, 30 May 2023 18:55:15 +0530 Subject: [PATCH 4/6] Crash fix --- lib_dec/ivas_spar_decoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 72d208806d..1df642906c 100755 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -124,7 +124,7 @@ ivas_error ivas_spar_dec_open( } hSpar->hMdDec->td_decorr_flag = 1; #ifdef FIX_501_TABLE_IDX_INIT - if ( st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 ) + if ( hSpar->hTdDecorr && st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 ) { hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[hSpar->hMdDec->table_idx].td_ducking; } -- GitLab From 42d4e1d1e6bac59711370bdb9aa389fa4150cfdc Mon Sep 17 00:00:00 2001 From: rtyag Date: Thu, 1 Jun 2023 16:36:34 +1000 Subject: [PATCH 5/6] SPAR MD dec DTX fix for 16_4 and 13_2 kbps --- lib_dec/ivas_spar_md_dec.c | 58 ++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index 62f419de67..7d33073f11 100755 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -1749,6 +1749,9 @@ static void ivas_spar_dec_parse_md_bs( int16_t planarCP; float quant[IVAS_SPAR_MAX_C_COEFF]; int16_t do_repeat[IVAS_MAX_NUM_BANDS]; +#ifdef FIX_501_TABLE_IDX_INIT + int16_t bw_final, bw_fact; +#endif *dtx_vad = 1; *bands_bw = 1; @@ -1821,38 +1824,51 @@ 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 FIX_501_TABLE_IDX_INIT if ( last_active_brate >= IVAS_24k4 ) { + bw_final = 1; + } + else + { + bw_final = 2; + } + bw_fact = *bands_bw / bw_final; #endif - for ( i = *nB - 1; i >= 0; i-- ) + for ( i = *nB - 1; i >= 0; i-- ) + { +#ifdef FIX_501_TABLE_IDX_INIT + ndec = hMdDec->spar_md_cfg.num_decorr_per_band[bw_fact * i]; + + for ( b = bw_fact - 1; b >= 0; b-- ) { - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * i]; + idx = i * bw_fact + b; +#else + ndec = hMdDec->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * i]; - for ( b = *bands_bw - 1; b >= 0; b-- ) + for ( b = *bands_bw - 1; b >= 0; b-- ) + { + idx = i * *bands_bw + b; +#endif + for ( j = 0; j < FOA_CHANNELS - 1; j++ ) { - idx = i * *bands_bw + b; - for ( j = 0; j < FOA_CHANNELS - 1; j++ ) - { - hMdDec->spar_md.band_coeffs[idx].pred_re[j] = hMdDec->spar_md.band_coeffs[i].pred_re[j]; - } - for ( j = 0; j < ndec; j++ ) - { - hMdDec->spar_md.band_coeffs[idx].P_re[j] = hMdDec->spar_md.band_coeffs[i].P_re[j]; - } - hMdDec->valid_bands[idx] = 1; + hMdDec->spar_md.band_coeffs[idx].pred_re[j] = hMdDec->spar_md.band_coeffs[i].pred_re[j]; } + for ( j = 0; j < ndec; j++ ) + { + hMdDec->spar_md.band_coeffs[idx].P_re[j] = hMdDec->spar_md.band_coeffs[i].P_re[j]; + } + hMdDec->valid_bands[idx] = 1; } + } - *nB = num_bands; - *bands_bw = 1; #ifdef FIX_501_TABLE_IDX_INIT - } - else - { - *bands_bw = 2; - *nB = num_bands / *bands_bw; - } + *bands_bw = bw_final; + *nB = num_bands / bw_final; +#else + *nB = num_bands; + *bands_bw = 1; #endif return; -- GitLab From 6bef49c8b0084f81edac1fe6a9bc601f9e744023 Mon Sep 17 00:00:00 2001 From: rtyag Date: Fri, 2 Jun 2023 11:02:11 +1000 Subject: [PATCH 6/6] initializing correct ducking flag when first frame is SID --- lib_dec/ivas_spar_decoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 1df642906c..a897b6041c 100755 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -124,7 +124,7 @@ ivas_error ivas_spar_dec_open( } hSpar->hMdDec->td_decorr_flag = 1; #ifdef FIX_501_TABLE_IDX_INIT - if ( hSpar->hTdDecorr && st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 ) + if ( hSpar->hTdDecorr ) { hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[hSpar->hMdDec->table_idx].td_ducking; } -- GitLab