From 3b0318ec2f1a97478ef3d0aedefae5f20ac4f6cb Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Mon, 20 Mar 2023 20:34:46 +0530 Subject: [PATCH 01/26] Added functionality to populate the hMetaData_tmp buffer dynamically --- lib_com/options.h | 1 + lib_enc/ivas_spar_encoder.c | 1 - lib_enc/ivas_spar_md_enc.c | 60 +++++++++++++++++++++++++++++++++++-- lib_enc/ivas_stat_enc.h | 6 ++-- 4 files changed, 63 insertions(+), 5 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 940d3857fa..6fb4689323 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -170,6 +170,7 @@ #define FIX_350_MASA_DELAY_COMP /* Nokia: Issue 350: MASA audio/meta delay compensation */ #define FIX_372_LIB_REND_VALIDATE_IO /* FhG: Issue 372: IVAS_rend segfaults with unsupported I/O configs - add validation checks of I/O config */ +#define ARITH_HUFF_CODER_CHANGES /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index b156c524d2..bb91e0b5b9 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -236,7 +236,6 @@ ivas_error ivas_spar_enc_open( #ifdef SBA_BR_SWITCHING_CLEAN_UP } #endif - /*-----------------------------------------------------------------* * Final assignment *-----------------------------------------------------------------*/ diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index bcc6718e9a..6d5304031e 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -111,7 +111,11 @@ ivas_error ivas_spar_md_enc_open( ivas_spar_md_enc_state_t *hMdEnc; ivas_error error; int16_t num_channels, i, j; - +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t bits_per_PR, bits_per_C, bits_per_P = 0; + int16_t wc_coarse_strat = 0; + int16_t num_bands_arith_huff = ivas_get_num_bands_from_bw_idx( SPAR_CONFIG_BW ); +#endif error = IVAS_ERR_OK; if ( ( hMdEnc = (ivas_spar_md_enc_state_t *) malloc( sizeof( ivas_spar_md_enc_state_t ) ) ) == NULL ) @@ -206,6 +210,41 @@ ivas_error ivas_spar_md_enc_open( return error; } +#ifdef ARITH_HUFF_CODER_CHANGES + i = 0; + /*calculate the worst case strat vlaue*/ + while ( i <= IVAS_SPAR_BR_TABLE_LEN ) + { + if ( sba_order == SBA_FOA_ORDER && ivas_spar_br_table_consts[i].ivas_total_brate == hEncoderConfig->ivas_total_brate && hEncoderConfig->ivas_total_brate <= 192000 ) + { + bits_per_PR = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][0] ) + 1 ) * 3; + bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][1] ) + 1 ) * 2; + bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][2] ) + 1 ) * 1; + wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P; + wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * 50 ) + 550; + wc_coarse_strat = wc_coarse_strat / 50; + break; + } + else if ( sba_order == SBA_FOA_ORDER && ivas_spar_br_table_consts[i].ivas_total_brate == hEncoderConfig->ivas_total_brate && hEncoderConfig->ivas_total_brate > 192000 ) + { + bits_per_PR = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][0] ) + 1 ) * 3; + bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][1] ) + 1 ) * 2; + bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][2] ) + 1 ) * 1; + wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P; + wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * 50 ) + 550; + wc_coarse_strat = wc_coarse_strat / 50; + break; + } + else if ( sba_order == SBA_HOA2_ORDER || sba_order == SBA_HOA3_ORDER ) + { + wc_coarse_strat = MAX_BITS_METADATA; + break; + } + i++; + } + hMdEnc->wc_strat = wc_coarse_strat; + hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); +#endif *hMdEnc_in = hMdEnc; return error; @@ -287,7 +326,14 @@ void ivas_spar_md_enc_close( } free( hMdEnc->mixer_mat_local ); } - +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMdEnc->wc_coarse_strat_buff != NULL ) + { + free( hMdEnc->wc_coarse_strat_buff ); + hMdEnc->wc_coarse_strat_buff = NULL; + hMdEnc->wc_strat = 0; + } +#endif if ( hMdEnc != NULL ) { free( hMdEnc ); @@ -558,7 +604,9 @@ ivas_error ivas_spar_md_enc_process( int16_t code_strat; int16_t bit_pos_start, next_ind_start, last_ind_start; BSTR_ENC_DATA hMetaData_tmp; +#ifndef ARITH_HUFF_CODER_CHANGES Indice ind_list_tmp[MAX_BITS_METADATA]; // IVAS_fmToDo: size to be optimized +#endif float Wscale[IVAS_MAX_NUM_BANDS]; num_quant_strats = hMdEnc->spar_md_cfg.num_quant_strats; @@ -605,7 +653,11 @@ ivas_error ivas_spar_md_enc_process( num_quant_strats = 1; } +#ifdef ARITH_HUFF_CODER_CHANGES + hMetaData_tmp.ind_list = hMdEnc->wc_coarse_strat_buff; +#else hMetaData_tmp.ind_list = ind_list_tmp; +#endif /* Save state of metadata bitstream buffer */ bit_pos_start = hMetaData->nb_bits_tot; @@ -871,8 +923,12 @@ ivas_error ivas_spar_md_enc_process( strat = cs[i]; if ( strat != NO_STRAT ) { +#ifndef ARITH_HUFF_CODER_CHANGES reset_indices_enc( &hMetaData_tmp, MAX_BITS_METADATA ); +#else + reset_indices_enc( &hMetaData_tmp, hMdEnc->wc_strat ); +#endif ivas_write_spar_md_bitstream( hMdEnc, num_bands, bands_bw, &hMetaData_tmp, hEncoderConfig->ivas_total_brate, strat, qsi, planarCP ); if ( hMetaData->nb_bits_tot == bit_pos_start || hMetaData_tmp.nb_bits_tot < ( hMetaData->nb_bits_tot - bit_pos_start ) ) diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index e450990254..df8fd719e2 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -674,6 +674,10 @@ typedef struct ivas_spar_md_enc_state_t ivas_huff_coeffs_t huff_coeffs; int16_t table_idx; int16_t spar_hoa_md_flag; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t wc_strat; + Indice* wc_coarse_strat_buff; +#endif } ivas_spar_md_enc_state_t; /* PCA structure */ @@ -1041,8 +1045,6 @@ typedef struct encoder_config_structure int16_t Opt_AGC_ON; /* flag indicating AGC operation in SBA */ #endif #endif - - } ENCODER_CONFIG, *ENCODER_CONFIG_HANDLE; -- GitLab From d30cddda583ba0f11a45dffb25c9df7144f375fd Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 21 Mar 2023 13:21:21 +0530 Subject: [PATCH 02/26] addressed review comments --- lib_com/ivas_cnst.h | 4 +++ lib_enc/ivas_spar_md_enc.c | 51 ++++++++++++++++---------------------- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 04e11c4656..657a6521be 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1618,6 +1618,10 @@ typedef enum #define SPAR_DIRAC_DTX_BANDS ( SPAR_DTX_BANDS + DIRAC_DTX_BANDS ) #define CLDFB_PAR_WEIGHT_START_BAND 7 +#ifdef ARITH_HUFF_CODER_CHANGES +#define IVAS_SBA_SIGNALLING_OVERHEAD 550 +#endif + /*----------------------------------------------------------------------------------* * Limiter constants diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 6d5304031e..f426b24e6f 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -113,8 +113,10 @@ ivas_error ivas_spar_md_enc_open( int16_t num_channels, i, j; #ifdef ARITH_HUFF_CODER_CHANGES int16_t bits_per_PR, bits_per_C, bits_per_P = 0; - int16_t wc_coarse_strat = 0; - int16_t num_bands_arith_huff = ivas_get_num_bands_from_bw_idx( SPAR_CONFIG_BW ); + int32_t wc_coarse_strat = 0; + int16_t num_bands_arith_huff = IVAS_MAX_NUM_BANDS; + int16_t n_input, n_dmx, n_dec = 0; + int16_t table_idx, quant_start = 0; #endif error = IVAS_ERR_OK; @@ -211,37 +213,26 @@ ivas_error ivas_spar_md_enc_open( } #ifdef ARITH_HUFF_CODER_CHANGES - i = 0; /*calculate the worst case strat vlaue*/ - while ( i <= IVAS_SPAR_BR_TABLE_LEN ) + if ( hEncoderConfig->ivas_total_brate <= 192000 ) { - if ( sba_order == SBA_FOA_ORDER && ivas_spar_br_table_consts[i].ivas_total_brate == hEncoderConfig->ivas_total_brate && hEncoderConfig->ivas_total_brate <= 192000 ) - { - bits_per_PR = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][0] ) + 1 ) * 3; - bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][1] ) + 1 ) * 2; - bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][2] ) + 1 ) * 1; - wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P; - wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * 50 ) + 550; - wc_coarse_strat = wc_coarse_strat / 50; - break; - } - else if ( sba_order == SBA_FOA_ORDER && ivas_spar_br_table_consts[i].ivas_total_brate == hEncoderConfig->ivas_total_brate && hEncoderConfig->ivas_total_brate > 192000 ) - { - bits_per_PR = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][0] ) + 1 ) * 3; - bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][1] ) + 1 ) * 2; - bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][2] ) + 1 ) * 1; - wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P; - wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * 50 ) + 550; - wc_coarse_strat = wc_coarse_strat / 50; - break; - } - else if ( sba_order == SBA_HOA2_ORDER || sba_order == SBA_HOA3_ORDER ) - { - wc_coarse_strat = MAX_BITS_METADATA; - break; - } - i++; + quant_start = 2; + table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); } + else + { + quant_start = 0; + table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, hEncoderConfig->sba_order, SPAR_CONFIG_BW, NULL, NULL ); + } + n_input = ivas_sba_get_nchan_metadata( hEncoderConfig->sba_order ); + n_dmx = ivas_spar_br_table_consts[table_idx].nchan_transport; + n_dec = n_input - n_dmx; + bits_per_PR = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_start][0] ) + 1 ) * ( n_input - 1 ); + bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_start][1] ) + 1 ) * ( ( n_dmx - 1 ) * n_dec ); + bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_start][2] ) + 1 ) * n_dec; + wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P; + wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * FRAMES_PER_SECOND ) + IVAS_SBA_SIGNALLING_OVERHEAD; + wc_coarse_strat = wc_coarse_strat / FRAMES_PER_SECOND; hMdEnc->wc_strat = wc_coarse_strat; hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); #endif -- GitLab From b7e494c2dcb754c0e49d86552c7294d08e91b8c7 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 21 Mar 2023 18:47:04 +0530 Subject: [PATCH 03/26] Defined some macros --- lib_com/ivas_cnst.h | 3 +++ lib_enc/ivas_spar_md_enc.c | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 657a6521be..d3eec287e7 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1620,6 +1620,9 @@ typedef enum #ifdef ARITH_HUFF_CODER_CHANGES #define IVAS_SBA_SIGNALLING_OVERHEAD 550 +#define FRAMES_PER_SECOND_HUFF_ARITH 50 +#define QUANT_STRAT_0 0 +#define QUANT_STRAT_2 2 #endif diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index f426b24e6f..4648efb07e 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -216,12 +216,12 @@ ivas_error ivas_spar_md_enc_open( /*calculate the worst case strat vlaue*/ if ( hEncoderConfig->ivas_total_brate <= 192000 ) { - quant_start = 2; + quant_start = QUANT_STRAT_2; table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); } else { - quant_start = 0; + quant_start = QUANT_STRAT_0; table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, hEncoderConfig->sba_order, SPAR_CONFIG_BW, NULL, NULL ); } n_input = ivas_sba_get_nchan_metadata( hEncoderConfig->sba_order ); @@ -231,7 +231,7 @@ ivas_error ivas_spar_md_enc_open( bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_start][1] ) + 1 ) * ( ( n_dmx - 1 ) * n_dec ); bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_start][2] ) + 1 ) * n_dec; wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P; - wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * FRAMES_PER_SECOND ) + IVAS_SBA_SIGNALLING_OVERHEAD; + wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * FRAMES_PER_SECOND_HUFF_ARITH ) + IVAS_SBA_SIGNALLING_OVERHEAD; wc_coarse_strat = wc_coarse_strat / FRAMES_PER_SECOND; hMdEnc->wc_strat = wc_coarse_strat; hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); -- GitLab From 3e007194336f0abf49b094165f00d291cec56f2e Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Thu, 23 Mar 2023 16:10:20 +0530 Subject: [PATCH 04/26] addressed review comments --- lib_com/ivas_cnst.h | 5 +++-- lib_enc/ivas_spar_md_enc.c | 26 ++++++++++++++------------ lib_enc/ivas_stat_enc.h | 2 +- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index d3eec287e7..977e68cbe2 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -79,6 +79,9 @@ typedef enum #define IVAS_FORMAT_SIGNALING_NBITS 2 /* number of bits for signaling the IVAS format */ #define IVAS_FORMAT_SIGNALING_NBITS_SBA ( IVAS_FORMAT_SIGNALING_NBITS + 1 ) +#ifdef ARITH_HUFF_CODER_CHANGES +#define IVAS_SBA_SIGNALING_OVERHEAD 550 +#endif /*----------------------------------------------------------------------------------* @@ -1619,8 +1622,6 @@ typedef enum #define CLDFB_PAR_WEIGHT_START_BAND 7 #ifdef ARITH_HUFF_CODER_CHANGES -#define IVAS_SBA_SIGNALLING_OVERHEAD 550 -#define FRAMES_PER_SECOND_HUFF_ARITH 50 #define QUANT_STRAT_0 0 #define QUANT_STRAT_2 2 #endif diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 4648efb07e..53c0fa0559 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -112,11 +112,11 @@ ivas_error ivas_spar_md_enc_open( ivas_error error; int16_t num_channels, i, j; #ifdef ARITH_HUFF_CODER_CHANGES - int16_t bits_per_PR, bits_per_C, bits_per_P = 0; + int16_t bits_PR, bits_C, bits_P = 0; int32_t wc_coarse_strat = 0; int16_t num_bands_arith_huff = IVAS_MAX_NUM_BANDS; int16_t n_input, n_dmx, n_dec = 0; - int16_t table_idx, quant_start = 0; + int16_t table_idx, quant_strat = 0; #endif error = IVAS_ERR_OK; @@ -214,24 +214,26 @@ ivas_error ivas_spar_md_enc_open( #ifdef ARITH_HUFF_CODER_CHANGES /*calculate the worst case strat vlaue*/ - if ( hEncoderConfig->ivas_total_brate <= 192000 ) + table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + if ( ( ivas_spar_br_table_consts[table_idx].q_lvls[2][0] == 1 && + ivas_spar_br_table_consts[table_idx].q_lvls[2][1] == 1 && + ivas_spar_br_table_consts[table_idx].q_lvls[2][2] == 1 && + ivas_spar_br_table_consts[table_idx].q_lvls[2][3] == 1 ) ) { - quant_start = QUANT_STRAT_2; - table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + quant_strat = QUANT_STRAT_0; } else { - quant_start = QUANT_STRAT_0; - table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, hEncoderConfig->sba_order, SPAR_CONFIG_BW, NULL, NULL ); + quant_strat = QUANT_STRAT_2; } n_input = ivas_sba_get_nchan_metadata( hEncoderConfig->sba_order ); n_dmx = ivas_spar_br_table_consts[table_idx].nchan_transport; n_dec = n_input - n_dmx; - bits_per_PR = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_start][0] ) + 1 ) * ( n_input - 1 ); - bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_start][1] ) + 1 ) * ( ( n_dmx - 1 ) * n_dec ); - bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_start][2] ) + 1 ) * n_dec; - wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P; - wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * FRAMES_PER_SECOND_HUFF_ARITH ) + IVAS_SBA_SIGNALLING_OVERHEAD; + bits_PR = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][0] ) + 1 ) * ( n_input - 1 ); + bits_C = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][1] ) + 1 ) * ( ( n_dmx - 1 ) * n_dec ); + bits_P = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][2] ) + 1 ) * n_dec; + wc_coarse_strat = bits_PR + bits_C + bits_P; + wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * FRAMES_PER_SECOND ) + IVAS_SBA_SIGNALING_OVERHEAD; wc_coarse_strat = wc_coarse_strat / FRAMES_PER_SECOND; hMdEnc->wc_strat = wc_coarse_strat; hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index df8fd719e2..fe4d57ef60 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -676,7 +676,7 @@ typedef struct ivas_spar_md_enc_state_t int16_t spar_hoa_md_flag; #ifdef ARITH_HUFF_CODER_CHANGES int16_t wc_strat; - Indice* wc_coarse_strat_buff; + Indice *wc_coarse_strat_buff; #endif } ivas_spar_md_enc_state_t; -- GitLab From 3cdb7c4a121a3e8bba20d41525da6a4093730572 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Fri, 24 Mar 2023 15:49:29 +0530 Subject: [PATCH 05/26] modified macro defination --- lib_com/ivas_cnst.h | 5 ++++- lib_enc/ivas_spar_md_enc.c | 5 ++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 977e68cbe2..5c667c5d27 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -80,7 +80,7 @@ typedef enum #define IVAS_FORMAT_SIGNALING_NBITS 2 /* number of bits for signaling the IVAS format */ #define IVAS_FORMAT_SIGNALING_NBITS_SBA ( IVAS_FORMAT_SIGNALING_NBITS + 1 ) #ifdef ARITH_HUFF_CODER_CHANGES -#define IVAS_SBA_SIGNALING_OVERHEAD 550 +#define IVAS_SBA_SIGNALING_OVERHEAD IVAS_FORMAT_SIGNALING_NBITS_SBA + SBA_ORDER_BITS + SBA_PLANAR_BITS + AGC_HUFF_ARTH + SPAR_NUM_CODING_STRAT_BITS #endif @@ -968,6 +968,9 @@ typedef enum /* AGC constants */ #define AGC_BITS_PER_CH 3 #define AGC_EMAX 0 +#ifdef ARITH_HUFF_CODER_CHANGES +#define AGC_HUFF_ARTH 1 +#endif /* Common SPAR metadata constants */ #define IVAS_ACTIVEW_DM_F_SCALE 0.5f diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 53c0fa0559..ade5e9af3e 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -42,7 +42,6 @@ #include #include "wmc_auto.h" - /*------------------------------------------------------------------------------------------* * PreProcessor *------------------------------------------------------------------------------------------*/ @@ -233,8 +232,8 @@ ivas_error ivas_spar_md_enc_open( bits_C = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][1] ) + 1 ) * ( ( n_dmx - 1 ) * n_dec ); bits_P = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][2] ) + 1 ) * n_dec; wc_coarse_strat = bits_PR + bits_C + bits_P; - wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * FRAMES_PER_SECOND ) + IVAS_SBA_SIGNALING_OVERHEAD; - wc_coarse_strat = wc_coarse_strat / FRAMES_PER_SECOND; + wc_coarse_strat = ( ( wc_coarse_strat * num_bands_arith_huff ) + ( IVAS_SBA_SIGNALING_OVERHEAD + hMdEnc->spar_md_cfg.quant_strat_bits ) ) * FRAMES_PER_SEC; + wc_coarse_strat = wc_coarse_strat / FRAMES_PER_SEC; hMdEnc->wc_strat = wc_coarse_strat; hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); #endif -- GitLab From 0f3d7d7d4d54f82a8d20ad4c2c09c075cd1bba09 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Mon, 27 Mar 2023 11:45:45 +0530 Subject: [PATCH 06/26] addressed review comments --- lib_com/ivas_cnst.h | 4 ++-- lib_com/ivas_rom_com.c | 8 +++++++- lib_enc/ivas_spar_md_enc.c | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 5c667c5d27..afdf8a2675 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -80,7 +80,7 @@ typedef enum #define IVAS_FORMAT_SIGNALING_NBITS 2 /* number of bits for signaling the IVAS format */ #define IVAS_FORMAT_SIGNALING_NBITS_SBA ( IVAS_FORMAT_SIGNALING_NBITS + 1 ) #ifdef ARITH_HUFF_CODER_CHANGES -#define IVAS_SBA_SIGNALING_OVERHEAD IVAS_FORMAT_SIGNALING_NBITS_SBA + SBA_ORDER_BITS + SBA_PLANAR_BITS + AGC_HUFF_ARTH + SPAR_NUM_CODING_STRAT_BITS +#define IVAS_SBA_SIGNALING_OVERHEAD IVAS_FORMAT_SIGNALING_NBITS_SBA + SBA_ORDER_BITS + SBA_PLANAR_BITS + AGC_SIGNALLING_BITS + SPAR_NUM_CODING_STRAT_BITS #endif @@ -969,7 +969,7 @@ typedef enum #define AGC_BITS_PER_CH 3 #define AGC_EMAX 0 #ifdef ARITH_HUFF_CODER_CHANGES -#define AGC_HUFF_ARTH 1 +#define AGC_SIGNALLING_BITS 1 #endif /* Common SPAR metadata constants */ diff --git a/lib_com/ivas_rom_com.c b/lib_com/ivas_rom_com.c index f04538c479..9e87e84964 100644 --- a/lib_com/ivas_rom_com.c +++ b/lib_com/ivas_rom_com.c @@ -936,7 +936,13 @@ const ivas_spar_br_table_t ivas_spar_br_table_consts[IVAS_SPAR_BR_TABLE_LEN] = { { 31, 11, 11, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, { 256000, 0, SBA_HOA3_ORDER, FB, 24000, 4, WYXZ, 0, 0,{ { 76300, 73550, 112000 },{ 59350, 57200, 56000 },{ 42400, 40850, 48000 },{ 25450, 24500, 40000 } }, - { { 31, 11, 11, 1 },{ 1, 1, 1, 1 },{ 31, 1, 1, 1 } }, 1, 2, 0 }, + { { 31, 11, 11, 1 },{ 1, 1, 1, 1 }, +#ifdef ARITH_HUFF_CODER_CHANGES + { 1, 1, 1, 1 } +#else + { 31, 1, 1, 1 } +#endif + }, 1, 2, 0 }, { 384000, 0, SBA_FOA_ORDER, FB, 24000, 4, WYXZ, 0, 0,{ { 128000, 128000, 128000 },{ 100000, 100000, 128000 },{ 79850, 79850, 104000 },{ 66600, 66600, 104000 } }, // not yet optimized { { 31, 1, 1, 1 },{ 1, 1, 1, 1 },{ 1, 1, 1, 1 } }, 1, 2, 0 }, diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index ade5e9af3e..fcb8358dbe 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -225,7 +225,7 @@ ivas_error ivas_spar_md_enc_open( { quant_strat = QUANT_STRAT_2; } - n_input = ivas_sba_get_nchan_metadata( hEncoderConfig->sba_order ); + n_input = ivas_sba_get_nchan_metadata(sba_order); n_dmx = ivas_spar_br_table_consts[table_idx].nchan_transport; n_dec = n_input - n_dmx; bits_PR = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][0] ) + 1 ) * ( n_input - 1 ); -- GitLab From ca8911fe24f139512bad08021fbc463bd814949b Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 28 Mar 2023 18:02:42 +0530 Subject: [PATCH 07/26] modified the coders to stop writing to the bitstream before running out of space --- lib_com/ivas_prot.h | 6 +- lib_com/ivas_stat_com.h | 1 - lib_enc/ivas_entropy_coder.c | 62 +++++++++++++++--- lib_enc/ivas_spar_md_enc.c | 118 +++++++++++++++++++++++++++++++---- 4 files changed, 164 insertions(+), 23 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 6711b998c9..c1b5227886 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -4377,7 +4377,11 @@ int16_t ivas_get_bits_to_encode( void ivas_huffman_encode( ivas_huffman_cfg_t *huff_cfg, int16_t in, int16_t *hcode, int16_t *hlen ); void ivas_spar_huff_coeffs_com_init( ivas_huff_coeffs_t *pHuff_coeffs, ivas_spar_md_com_cfg *pSpar_cfg, const int16_t table_idx, const int16_t enc_dec ); void ivas_spar_arith_coeffs_com_init( ivas_arith_coeffs_t *pArith_coeffs, ivas_spar_md_com_cfg *pSpar_cfg, const int16_t table_idx, const int16_t enc_dec ); -void ivas_arith_encode_cmplx_cell_array(ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, const int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_old_re, ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, const int16_t any_diff); +void ivas_arith_encode_cmplx_cell_array(ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, const int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_old_re, ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, const int16_t any_diff +#ifdef ARITH_HUFF_CODER_CHANGES + , int32_t wc_strat_arith +#endif +); ivas_error ivas_huffman_decode( ivas_huffman_cfg_t *huff_cfg, Decoder_State *st0, int16_t *dec_out ); void ivas_arith_decode_cmplx_cell_array( ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, Decoder_State *st0, ivas_cell_dim_t *pCell_dims, int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_re_old ); diff --git a/lib_com/ivas_stat_com.h b/lib_com/ivas_stat_com.h index 8231588551..c1849e7d2c 100644 --- a/lib_com/ivas_stat_com.h +++ b/lib_com/ivas_stat_com.h @@ -290,7 +290,6 @@ typedef struct ivas_arith_t int16_t range; int16_t num_models; float saved_dist_arr[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; - } ivas_arith_t; typedef struct ivas_arith_coeffs_t diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index a8f5219f2a..2834817a6a 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -133,7 +133,12 @@ static void ivas_arith_encode_array( int16_t *pInput, ivas_arith_t *pArith, BSTR_ENC_HANDLE hMetaData, - const int16_t in_len ) + const int16_t in_len +#ifdef ARITH_HUFF_CODER_CHANGES + , + int32_t wc_strat_arith +#endif +) { int16_t model_index, i, ind; int16_t *pCum_freq = NULL; @@ -144,7 +149,18 @@ static void ivas_arith_encode_array( if ( pArith->dyn_model_bits > 0 ) { ivas_get_dyn_freq_model( pInput, in_len, &model_index, pArith, &pCum_freq ); - push_next_indice( hMetaData, model_index, pArith->dyn_model_bits ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot <= wc_strat_arith ) + { +#endif + push_next_indice( hMetaData, model_index, pArith->dyn_model_bits ); +#ifdef ARITH_HUFF_CODER_CHANGES + } + else + { + return; + } +#endif } else { @@ -191,7 +207,12 @@ static void ivas_arithCoder_encode_array_diff( ivas_wrap_arround( pIn_old_scratch, pArith_diff->vals[0], pArith_diff->vals[pArith_diff->range - 1], length ); - ivas_arith_encode_array( pIn_old_scratch, pArith_diff, hMetaData, length ); + ivas_arith_encode_array( pIn_old_scratch, pArith_diff, hMetaData, length +#ifdef ARITH_HUFF_CODER_CHANGES + , + MAX_NUM_INDICES +#endif + ); } return; @@ -234,7 +255,12 @@ static void arith_encode_cell_array( BSTR_ENC_HANDLE hMetaData, const int16_t nB, ivas_arith_t *pArith, - int16_t *pSymbol ) + int16_t *pSymbol +#ifdef ARITH_HUFF_CODER_CHANGES + , + int32_t wc_strat_arith +#endif +) { int16_t total_symbol_len = 0; int16_t i; @@ -250,7 +276,12 @@ static void arith_encode_cell_array( { if ( pArith->range > 1 ) { - ivas_arith_encode_array( pSymbol, pArith, hMetaData, total_symbol_len ); + ivas_arith_encode_array( pSymbol, pArith, hMetaData, total_symbol_len +#ifdef ARITH_HUFF_CODER_CHANGES + , + wc_strat_arith +#endif + ); } } @@ -309,7 +340,12 @@ void ivas_arith_encode_cmplx_cell_array( int16_t *pSymbol_old_re, ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, - const int16_t any_diff ) + const int16_t any_diff +#ifdef ARITH_HUFF_CODER_CHANGES + , + int32_t wc_strat_arith +#endif +) { int16_t input_old[IVAS_MAX_INPUT_LEN]; int16_t input_new[IVAS_MAX_INPUT_LEN]; @@ -382,13 +418,23 @@ void ivas_arith_encode_cmplx_cell_array( }*/ #endif - arith_encode_cell_array( cell_dim, hMetaData, nB, pArith_re, input ); + arith_encode_cell_array( cell_dim, hMetaData, nB, pArith_re, input +#ifdef ARITH_HUFF_CODER_CHANGES + , + wc_strat_arith +#endif + ); arith_encode_cell_array_diff( cell_dim_diff, hMetaData, nB, pArith_re_diff, input_old, input_new ); } else { - arith_encode_cell_array( pCell_dims, hMetaData, nB, pArith_re, pSymbol_re ); + arith_encode_cell_array( pCell_dims, hMetaData, nB, pArith_re, pSymbol_re +#ifdef ARITH_HUFF_CODER_CHANGES + , + wc_strat_arith +#endif + ); } return; diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index fcb8358dbe..f5403b717b 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -116,6 +116,7 @@ ivas_error ivas_spar_md_enc_open( int16_t num_bands_arith_huff = IVAS_MAX_NUM_BANDS; int16_t n_input, n_dmx, n_dec = 0; int16_t table_idx, quant_strat = 0; + int32_t table_cal_wc = 0; #endif error = IVAS_ERR_OK; @@ -225,7 +226,15 @@ ivas_error ivas_spar_md_enc_open( { quant_strat = QUANT_STRAT_2; } - n_input = ivas_sba_get_nchan_metadata(sba_order); + /*worst case table calculated value*/ + for ( i = 0; i < ivas_spar_br_table_consts[table_idx].nchan_transport; i++ ) + { + table_cal_wc += ivas_spar_br_table_consts[table_idx].core_brs[i][1]; + } + table_cal_wc = hEncoderConfig->ivas_total_brate - table_cal_wc; + table_cal_wc = table_cal_wc / FRAMES_PER_SEC; + + n_input = ivas_sba_get_nchan_metadata( sba_order ); n_dmx = ivas_spar_br_table_consts[table_idx].nchan_transport; n_dec = n_input - n_dmx; bits_PR = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][0] ) + 1 ) * ( n_input - 1 ); @@ -234,8 +243,12 @@ ivas_error ivas_spar_md_enc_open( wc_coarse_strat = bits_PR + bits_C + bits_P; wc_coarse_strat = ( ( wc_coarse_strat * num_bands_arith_huff ) + ( IVAS_SBA_SIGNALING_OVERHEAD + hMdEnc->spar_md_cfg.quant_strat_bits ) ) * FRAMES_PER_SEC; wc_coarse_strat = wc_coarse_strat / FRAMES_PER_SEC; + if ( wc_coarse_strat >= table_cal_wc ) + { + printf("wc_coarse_strat is greater than table_cal_wc!"); + } hMdEnc->wc_strat = wc_coarse_strat; - hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); + hMdEnc->wc_coarse_strat_buff = (Indice *)malloc(wc_coarse_strat * sizeof(Indice)); #endif *hMdEnc_in = hMdEnc; @@ -1325,7 +1338,18 @@ static void ivas_get_huffman_coded_bs( for ( j = pred_offset; j < pred_coeff_dim; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + { +#endif + push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + } + else + { + return; + } +#endif } for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) @@ -1333,7 +1357,18 @@ static void ivas_get_huffman_coded_bs( if ( keep_planar[(int16_t) floor( j / ( ndm - 1 ) )] ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + { +#endif + push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + } + else + { + return; + } +#endif } } @@ -1342,7 +1377,18 @@ static void ivas_get_huffman_coded_bs( if ( keep_planar[j] ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + { +#endif + push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + } + else + { + return; + } +#endif } } } @@ -1351,19 +1397,52 @@ static void ivas_get_huffman_coded_bs( for ( j = pred_offset; j < pred_coeff_dim; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + { +#endif + push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + } + else + { + return; + } +#endif } for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + { +#endif + push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + } + else + { + return; + } +#endif } for ( j = 0; j < ndec; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + { +#endif + push_next_indice( hMetaData, code, len ); +#ifdef ARITH_HUFF_CODER_CHANGES + } + else + { + return; + } +#endif } } } @@ -1394,7 +1473,6 @@ static void ivas_get_arith_coded_bs( ivas_cell_dim_t decx_cell_dims[IVAS_MAX_NUM_BANDS]; int16_t symbol_arr_re[IVAS_MAX_INPUT_LEN]; int16_t symbol_arr_old_re[IVAS_MAX_INPUT_LEN]; - for ( i = 0; i < nB; i++ ) { int16_t ndm, ndec; @@ -1454,8 +1532,12 @@ static void ivas_get_arith_coded_bs( } ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.pred_arith_re[qsi], &hMdEnc->arith_coeffs.pred_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, pred_cell_dims, hMetaData, any_diff ); - + symbol_arr_re, symbol_arr_old_re, pred_cell_dims, hMetaData, any_diff +#ifdef ARITH_HUFF_CODER_CHANGES + , + hMdEnc->wc_strat +#endif + ); if ( hMdEnc->spar_hoa_md_flag ) { for ( i = 0; i < nB; i++ ) @@ -1497,7 +1579,12 @@ static void ivas_get_arith_coded_bs( } ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.drct_arith_re[qsi], &hMdEnc->arith_coeffs.drct_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, drct_cell_dims, hMetaData, any_diff ); + symbol_arr_re, symbol_arr_old_re, drct_cell_dims, hMetaData, any_diff +#ifdef ARITH_HUFF_CODER_CHANGES + , + hMdEnc->wc_strat +#endif + ); ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, decd_cell_dims, DECD_COEFF, planarCP ); @@ -1515,7 +1602,12 @@ static void ivas_get_arith_coded_bs( } ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.decd_arith_re[qsi], &hMdEnc->arith_coeffs.decd_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, decd_cell_dims, hMetaData, any_diff ); + symbol_arr_re, symbol_arr_old_re, decd_cell_dims, hMetaData, any_diff +#ifdef ARITH_HUFF_CODER_CHANGES + , + hMdEnc->wc_strat +#endif + ); ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, decx_cell_dims, DECX_COEFF, planarCP ); -- GitLab From 49caf14da453748d2b43982f9e43c80eb7a7bced Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 28 Mar 2023 18:16:45 +0530 Subject: [PATCH 08/26] addressed review comments --- lib_enc/ivas_entropy_coder.c | 2 +- lib_enc/ivas_spar_md_enc.c | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index 2834817a6a..fbdd95a089 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -150,7 +150,7 @@ static void ivas_arith_encode_array( { ivas_get_dyn_freq_model( pInput, in_len, &model_index, pArith, &pCum_freq ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( hMetaData->nb_bits_tot <= wc_strat_arith ) + if ( ( hMetaData->nb_bits_tot + in_len ) <= wc_strat_arith ) { #endif push_next_indice( hMetaData, model_index, pArith->dyn_model_bits ); diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index f5403b717b..9b6b667ac7 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -245,10 +245,10 @@ ivas_error ivas_spar_md_enc_open( wc_coarse_strat = wc_coarse_strat / FRAMES_PER_SEC; if ( wc_coarse_strat >= table_cal_wc ) { - printf("wc_coarse_strat is greater than table_cal_wc!"); + printf( "wc_coarse_strat is greater than table_cal_wc!" ); } hMdEnc->wc_strat = wc_coarse_strat; - hMdEnc->wc_coarse_strat_buff = (Indice *)malloc(wc_coarse_strat * sizeof(Indice)); + hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); #endif *hMdEnc_in = hMdEnc; @@ -1339,7 +1339,7 @@ static void ivas_get_huffman_coded_bs( { ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) { #endif push_next_indice( hMetaData, code, len ); @@ -1358,7 +1358,7 @@ static void ivas_get_huffman_coded_bs( { ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) { #endif push_next_indice( hMetaData, code, len ); @@ -1378,7 +1378,7 @@ static void ivas_get_huffman_coded_bs( { ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) { #endif push_next_indice( hMetaData, code, len ); @@ -1398,7 +1398,7 @@ static void ivas_get_huffman_coded_bs( { ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) { #endif push_next_indice( hMetaData, code, len ); @@ -1415,7 +1415,7 @@ static void ivas_get_huffman_coded_bs( { ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) { #endif push_next_indice( hMetaData, code, len ); @@ -1432,7 +1432,7 @@ static void ivas_get_huffman_coded_bs( { ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( hMetaData->nb_bits_tot <= hMdEnc->wc_strat ) + if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) { #endif push_next_indice( hMetaData, code, len ); @@ -1858,7 +1858,7 @@ static void ivas_write_parameter_bitstream_dtx( pr -= idx; pr_pd_bits = ivas_get_bits_to_encode( pd_q_lvls * pr_q_lvls ); - value = (uint16_t) ( pr * pd_q_lvls + pd ); + value = ( uint16_t )( pr * pd_q_lvls + pd ); push_next_indice( hMetaData, value, pr_pd_bits ); } @@ -1882,7 +1882,7 @@ static void ivas_write_parameter_bitstream_dtx( pr_idx2 = pSpar_md->band_coeffs_idx[i].pred_index_re[pr_idx_2 - 1]; pr_idx2 -= idx; - value = (uint16_t) ( pr_idx2 * pr_q_lvls1 + pr_idx1 ); + value = ( uint16_t )( pr_idx2 * pr_q_lvls1 + pr_idx1 ); pr_pr_bits = ivas_get_bits_to_encode( pr_q_lvls1 * pr_q_lvls2 ); -- GitLab From 720d67a1a66887b96a4e5e43ede458534c40e265 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 28 Mar 2023 18:19:30 +0530 Subject: [PATCH 09/26] minor clean up --- lib_enc/ivas_spar_md_enc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 9b6b667ac7..6e2e35fdc3 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -1858,7 +1858,7 @@ static void ivas_write_parameter_bitstream_dtx( pr -= idx; pr_pd_bits = ivas_get_bits_to_encode( pd_q_lvls * pr_q_lvls ); - value = ( uint16_t )( pr * pd_q_lvls + pd ); + value = (uint16_t) ( pr * pd_q_lvls + pd ); push_next_indice( hMetaData, value, pr_pd_bits ); } @@ -1882,7 +1882,7 @@ static void ivas_write_parameter_bitstream_dtx( pr_idx2 = pSpar_md->band_coeffs_idx[i].pred_index_re[pr_idx_2 - 1]; pr_idx2 -= idx; - value = ( uint16_t )( pr_idx2 * pr_q_lvls1 + pr_idx1 ); + value = (uint16_t) ( pr_idx2 * pr_q_lvls1 + pr_idx1 ); pr_pr_bits = ivas_get_bits_to_encode( pr_q_lvls1 * pr_q_lvls2 ); -- GitLab From 698d49f5dd0c9804cf0abdfb330dc121cdcfc1cd Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 28 Mar 2023 18:35:36 +0530 Subject: [PATCH 10/26] clean up --- lib_com/ivas_stat_com.h | 1 + lib_enc/ivas_entropy_coder.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib_com/ivas_stat_com.h b/lib_com/ivas_stat_com.h index c1849e7d2c..8231588551 100644 --- a/lib_com/ivas_stat_com.h +++ b/lib_com/ivas_stat_com.h @@ -290,6 +290,7 @@ typedef struct ivas_arith_t int16_t range; int16_t num_models; float saved_dist_arr[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; + } ivas_arith_t; typedef struct ivas_arith_coeffs_t diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index fbdd95a089..69b665b391 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -150,7 +150,7 @@ static void ivas_arith_encode_array( { ivas_get_dyn_freq_model( pInput, in_len, &model_index, pArith, &pCum_freq ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot + in_len ) <= wc_strat_arith ) + if ( ( hMetaData->nb_bits_tot + pArith->dyn_model_bits) <= wc_strat_arith ) { #endif push_next_indice( hMetaData, model_index, pArith->dyn_model_bits ); -- GitLab From 31dc1fdbf912959a867d2da48ea28e37f2277b3e Mon Sep 17 00:00:00 2001 From: rtyag Date: Thu, 30 Mar 2023 15:43:43 +1100 Subject: [PATCH 11/26] rtyag review comments inline --- lib_com/ivas_spar_com.c | 50 +++++++++++++++++++++++++++++++++++++ lib_enc/ivas_spar_encoder.c | 9 +++++++ lib_enc/ivas_spar_md_enc.c | 7 ++++++ 3 files changed, 66 insertions(+) diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index cb6ff23fc0..b6c4fd769d 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -2145,6 +2145,56 @@ void ivas_spar_set_bitrate_config( pSpar_md_cfg->tgt_bits_per_blk += md_coding_bits_header; pSpar_md_cfg->max_bits_per_blk += md_coding_bits_header; + /*rtyag: IMO this is where we should have the check and compute worst case MD bits + +what we want to check is +if (pSpar_md_cfg->max_bits_per_blk - md_coding_bits_header >= base2(PR_bits_perband + P_bits_perband + C_bits_perband)*num_bands) +if above condition is not true then assert(0); +Here, we dont really need to account for AGC or PCA as we have been taking AGC and PCA bits from core coder always.  + +pSpar_md_cfg->max_bits_per_blk is what you should use to bail out of arith/huff coder during processing. + +  + +When it comes to reporting the max MD bits for bitstream indices allocation then that should be +what we write in hMetaData handle in worst case +i.e. pSpar_md_cfg->max_bits_per_blk  + AGC max bits + PCA max bits + DirAC max bits + +AGC bits can be computed as +if(hSpar->AGC_Enable) +{ +AGC_bits = (ndmx == 1)?AGC_BITS_PER_CH : AGC_SIGNALLING_BITS + AGC_BITS_PER_CH*ndmx +} +else +{ +AGC_bits = AGC_SIGNALLING_BITS +} + +PCA bits can be computed as + if (hEncoderConfig->Opt_PCA_ON ) + { + PCA_bits = 1 + IVAS_PCA_QBITS + IVAS_PCA_QBITS - 1; + } + else + { + if ( ivas_total_brate == PCA_BRATE && sba_order == SBA_FOA_ORDER ) + { + PCA_bits = 1; + } + else + { + PCA_bits = 0; + } + } + + + + for dirac_bits, try using + min(hQMetaData->metadata_max_bits+1, 500); (note: 500 is a temp value, actual value will come from FhG. + If you see self test failure with 500 then increase it in steps of 100 until you see BE results) + + */ + return; } diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index bb91e0b5b9..516c86d655 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -452,6 +452,15 @@ static ivas_error ivas_spar_enc_process( push_wmops( "ivas_spar_enc_process" ); + /* + rtyag : for debugging, + + store the start_nb_bits = hMetaData->nb_bits_tot here and then at the end of this function + compute total_md_bits = hMetaData->nb_bits_tot - start_nb_bits; + and the assert (total_md_bits <= hMdEnc->max_md_bits_sba), this should pass for all self tests + + */ + /*-----------------------------------------------------------------------------------------* * Initialization *-----------------------------------------------------------------------------------------*/ diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 6e2e35fdc3..2b4e9e12e8 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -213,6 +213,9 @@ ivas_error ivas_spar_md_enc_open( } #ifdef ARITH_HUFF_CODER_CHANGES + /*rtyag : this should be moved to ivas_spar_set_bitrate_config() after we calculate + pSpar_md_cfg->max_bits_per_blk, refer to my comment in ivas_spar_set_bitrate_config() + */ /*calculate the worst case strat vlaue*/ table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); if ( ( ivas_spar_br_table_consts[table_idx].q_lvls[2][0] == 1 && @@ -237,6 +240,7 @@ ivas_error ivas_spar_md_enc_open( n_input = ivas_sba_get_nchan_metadata( sba_order ); n_dmx = ivas_spar_br_table_consts[table_idx].nchan_transport; n_dec = n_input - n_dmx; + /*rtyag : please use (int16_t)ceilf(log2f(q_lvls[][])), no need to add +1*/ bits_PR = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][0] ) + 1 ) * ( n_input - 1 ); bits_C = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][1] ) + 1 ) * ( ( n_dmx - 1 ) * n_dec ); bits_P = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][2] ) + 1 ) * n_dec; @@ -247,7 +251,10 @@ ivas_error ivas_spar_md_enc_open( { printf( "wc_coarse_strat is greater than table_cal_wc!" ); } + /*rtyag : rename it to hMdEnc->max_md_bits_sba and refer to my comment in ivas_spar_set_bitrate_config() on how to compute it*/ hMdEnc->wc_strat = wc_coarse_strat; + /*rtyag : we dont need to malloc, we just need to report this hMdEnc->max_md_bits_sba value. + Please refer to my comment in ivas_spar_set_bitrate_config() function*/ hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); #endif *hMdEnc_in = hMdEnc; -- GitLab From a93884e3970e2fff192f8125c6ee9d3722e91621 Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 3 Apr 2023 13:21:20 +1000 Subject: [PATCH 12/26] changes w.r.t max bits by ittiam --- lib_com/ivas_cnst.h | 3 +- lib_com/ivas_prot.h | 10 ++- lib_com/ivas_spar_com.c | 115 ++++++++++++++---------- lib_com/ivas_stat_com.h | 10 +++ lib_com/options.h | 2 +- lib_dec/ivas_spar_md_dec.c | 7 +- lib_enc/ivas_entropy_coder.c | 11 +-- lib_enc/ivas_spar_encoder.c | 43 ++++++--- lib_enc/ivas_spar_md_enc.c | 163 ++++++++++++----------------------- lib_enc/ivas_stat_enc.h | 4 - 10 files changed, 188 insertions(+), 180 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index afdf8a2675..6a5e82f381 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -80,7 +80,8 @@ typedef enum #define IVAS_FORMAT_SIGNALING_NBITS 2 /* number of bits for signaling the IVAS format */ #define IVAS_FORMAT_SIGNALING_NBITS_SBA ( IVAS_FORMAT_SIGNALING_NBITS + 1 ) #ifdef ARITH_HUFF_CODER_CHANGES -#define IVAS_SBA_SIGNALING_OVERHEAD IVAS_FORMAT_SIGNALING_NBITS_SBA + SBA_ORDER_BITS + SBA_PLANAR_BITS + AGC_SIGNALLING_BITS + SPAR_NUM_CODING_STRAT_BITS +//#define IVAS_SBA_SIGNALING_OVERHEAD IVAS_FORMAT_SIGNALING_NBITS_SBA + SBA_ORDER_BITS + SBA_PLANAR_BITS + AGC_SIGNALLING_BITS + SPAR_NUM_CODING_STRAT_BITS +#define IVAS_SBA_SIGNALING_OVERHEAD 600 #endif diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index c1b5227886..c74de4b9ce 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -3924,7 +3924,12 @@ int16_t ivas_get_sba_num_TCs( void ivas_spar_set_bitrate_config( ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ const int16_t table_idx, /* i : config. table index */ - const int16_t num_bands /* i : number of bands */ + const int16_t num_bands /* i : number of bands */ +#ifdef ARITH_HUFF_CODER_CHANGES + , + const int16_t enc_flag + ,const int16_t Opt_PCA_ON +#endif ); void ivas_spar_bitrate_dist( @@ -4011,6 +4016,9 @@ ivas_error ivas_spar_md_enc_process( const int16_t dtx_vad, const int16_t nchan_inp, const int16_t sba_order /* i : Ambisonic (SBA) order */ +#ifdef ARITH_HUFF_CODER_CHANGES + , int16_t max_md_bit_dirac +#endif ); void ivas_compute_spar_params( diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index b6c4fd769d..8534414d41 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -2094,12 +2094,25 @@ void ivas_spar_set_bitrate_config( ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ const int16_t table_idx, /* i : config. table index */ const int16_t num_bands /* i : number of bands */ +#ifdef ARITH_HUFF_CODER_CHANGES + , + const int16_t enc_flag, + const int16_t Opt_PCA_ON +#endif ) { int32_t ivas_total_brate; int16_t i, total_bits, max_bits, code, length; int16_t sba_order; int16_t md_coding_bits_header; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t bits_PR, bits_C, bits_P = 0; + int16_t wc_coarse_strat = 0; + int16_t n_input, n_dmx, n_dec = 0; + int16_t table_idx_val, quant_strat = 0; + int16_t table_cal_wc = 0; + int16_t val = 0; +#endif pSpar_md_cfg->nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; for ( i = 0; i < pSpar_md_cfg->nchan_transport; i++ ) @@ -2145,56 +2158,64 @@ void ivas_spar_set_bitrate_config( pSpar_md_cfg->tgt_bits_per_blk += md_coding_bits_header; pSpar_md_cfg->max_bits_per_blk += md_coding_bits_header; - /*rtyag: IMO this is where we should have the check and compute worst case MD bits - -what we want to check is -if (pSpar_md_cfg->max_bits_per_blk - md_coding_bits_header >= base2(PR_bits_perband + P_bits_perband + C_bits_perband)*num_bands) -if above condition is not true then assert(0); -Here, we dont really need to account for AGC or PCA as we have been taking AGC and PCA bits from core coder always.  - -pSpar_md_cfg->max_bits_per_blk is what you should use to bail out of arith/huff coder during processing. - -  - -When it comes to reporting the max MD bits for bitstream indices allocation then that should be -what we write in hMetaData handle in worst case -i.e. pSpar_md_cfg->max_bits_per_blk  + AGC max bits + PCA max bits + DirAC max bits - -AGC bits can be computed as -if(hSpar->AGC_Enable) -{ -AGC_bits = (ndmx == 1)?AGC_BITS_PER_CH : AGC_SIGNALLING_BITS + AGC_BITS_PER_CH*ndmx -} -else -{ -AGC_bits = AGC_SIGNALLING_BITS -} - -PCA bits can be computed as - if (hEncoderConfig->Opt_PCA_ON ) - { - PCA_bits = 1 + IVAS_PCA_QBITS + IVAS_PCA_QBITS - 1; - } - else - { - if ( ivas_total_brate == PCA_BRATE && sba_order == SBA_FOA_ORDER ) - { - PCA_bits = 1; - } +#ifdef ARITH_HUFF_CODER_CHANGES + if ( enc_flag) + { + /*calculate the worst case strat vlaue*/ + table_idx_val = ivas_get_spar_table_idx( ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + if ( ( ivas_spar_br_table_consts[table_idx].q_lvls[2][0] == 1 && + ivas_spar_br_table_consts[table_idx].q_lvls[2][1] == 1 && + ivas_spar_br_table_consts[table_idx].q_lvls[2][2] == 1 && + ivas_spar_br_table_consts[table_idx].q_lvls[2][3] == 1 ) ) + { + quant_strat = QUANT_STRAT_0; + } else - { - PCA_bits = 0; - } - } - - - - for dirac_bits, try using - min(hQMetaData->metadata_max_bits+1, 500); (note: 500 is a temp value, actual value will come from FhG. - If you see self test failure with 500 then increase it in steps of 100 until you see BE results) + { + quant_strat = QUANT_STRAT_2; + } + /*worst case table calculated value*/ + for ( i = 0; i < ivas_spar_br_table_consts[table_idx_val].nchan_transport; i++ ) + { + table_cal_wc += ivas_spar_br_table_consts[table_idx_val].core_brs[i][1]; + } + table_cal_wc = ( ivas_total_brate - table_cal_wc ) / FRAMES_PER_SEC; - */ + n_input = ivas_sba_get_nchan_metadata( sba_order ); + n_dmx = ivas_spar_br_table_consts[table_idx_val].nchan_transport; + n_dec = n_input - n_dmx; + bits_PR = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx_val].q_lvls[quant_strat][0] ) ) * ( n_input - 1 ); + bits_C = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx_val].q_lvls[quant_strat][1] ) ) * ( ( n_dmx - 1 ) * n_dec ); + bits_P = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx_val].q_lvls[quant_strat][2] ) ) * ( n_dec ); + wc_coarse_strat = bits_PR + bits_C + bits_P; + wc_coarse_strat = ( ( wc_coarse_strat * IVAS_MAX_NUM_BANDS ) * FRAMES_PER_SEC + ( IVAS_SBA_SIGNALING_OVERHEAD ) ) / FRAMES_PER_SEC; + pSpar_md_cfg->max_md_bits_sba = wc_coarse_strat; + if ( Opt_PCA_ON ) + { + pSpar_md_cfg->PCA_val = 1 + IVAS_PCA_QBITS + IVAS_PCA_QBITS - 1; + } + else + { + if ( ivas_total_brate == PCA_BRATE && sba_order == SBA_FOA_ORDER ) + { + pSpar_md_cfg->PCA_val = 1; + } + else + { + pSpar_md_cfg->PCA_val = 0; + } + } + if ( wc_coarse_strat > table_cal_wc ) + { + assert( 0 ); + } + if ( pSpar_md_cfg->max_bits_per_blk - md_coding_bits_header < wc_coarse_strat ) + { + // assert( 0 ); + } + } +#endif return; } diff --git a/lib_com/ivas_stat_com.h b/lib_com/ivas_stat_com.h index 8231588551..1e5aa01ca6 100644 --- a/lib_com/ivas_stat_com.h +++ b/lib_com/ivas_stat_com.h @@ -38,6 +38,9 @@ #include "typedef.h" #include "cnst.h" #include "ivas_cnst.h" +#ifdef ARITH_HUFF_CODER_CHANGES +#include "stat_enc.h" +#endif /*----------------------------------------------------------------------------------* @@ -239,6 +242,13 @@ typedef struct ivas_spar_md_com_cfg int16_t agc_bits_ch_idx; int16_t planarCP; int16_t num_umx_chs; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t max_md_bits_sba; + int16_t WC_value; + Indice *wc_coarse_strat_buff; + int16_t AGC_status; + int16_t PCA_val; +#endif } ivas_spar_md_com_cfg; diff --git a/lib_com/options.h b/lib_com/options.h index 6fb4689323..a5acbbbe2f 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -170,7 +170,7 @@ #define FIX_350_MASA_DELAY_COMP /* Nokia: Issue 350: MASA audio/meta delay compensation */ #define FIX_372_LIB_REND_VALIDATE_IO /* FhG: Issue 372: IVAS_rend segfaults with unsupported I/O configs - add validation checks of I/O config */ -#define ARITH_HUFF_CODER_CHANGES +#define ARITH_HUFF_CODER_CHANGES /* DLB: Optimization of metadata memory for Huffman and arithmetic coders */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index ff6f858d31..ec85ac60f7 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -448,7 +448,12 @@ ivas_error ivas_spar_md_dec_init( hMdDec->spar_hoa_md_flag = ivas_sba_get_spar_hoa_md_flag( sba_order, hDecoderConfig->ivas_total_brate ); hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands ); + ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands +#ifdef ARITH_HUFF_CODER_CHANGES + ,0 + , 0 +#endif + ); nchan_transport = hMdDec->spar_md_cfg.nchan_transport; diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index 69b665b391..02ac26c2ab 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -149,16 +149,11 @@ static void ivas_arith_encode_array( if ( pArith->dyn_model_bits > 0 ) { ivas_get_dyn_freq_model( pInput, in_len, &model_index, pArith, &pCum_freq ); + push_next_indice(hMetaData, model_index, pArith->dyn_model_bits); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot + pArith->dyn_model_bits) <= wc_strat_arith ) + if ((hMetaData->nb_bits_tot) > wc_strat_arith) { -#endif - push_next_indice( hMetaData, model_index, pArith->dyn_model_bits ); -#ifdef ARITH_HUFF_CODER_CHANGES - } - else - { - return; + return; } #endif } diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 516c86d655..9a3b303dd0 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -153,6 +153,9 @@ ivas_error ivas_spar_enc_open( #endif hSpar->hAgcEnc = NULL; +#ifdef ARITH_HUFF_CODER_CHANGES + hSpar->hMdEnc->spar_md_cfg.AGC_status = hSpar->AGC_Enable; +#endif if ( hSpar->AGC_Enable ) { if ( ( error = ivas_spar_agc_enc_open( &hSpar->hAgcEnc, input_Fs, nchan_inp ) ) != IVAS_ERR_OK ) @@ -450,16 +453,16 @@ static ivas_error ivas_spar_enc_process( float dir[3], avg_dir[3]; float energySum, vecLen; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t start_nb_bits, total_md_bits; +#endif push_wmops( "ivas_spar_enc_process" ); - /* - rtyag : for debugging, - - store the start_nb_bits = hMetaData->nb_bits_tot here and then at the end of this function - compute total_md_bits = hMetaData->nb_bits_tot - start_nb_bits; - and the assert (total_md_bits <= hMdEnc->max_md_bits_sba), this should pass for all self tests - - */ +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t max_md_bit_dirac = 0; + max_md_bit_dirac = hQMetaData->metadata_max_bits; + start_nb_bits = hMetaData->nb_bits_tot; +#endif /*-----------------------------------------------------------------------------------------* * Initialization @@ -649,7 +652,12 @@ static ivas_error ivas_spar_enc_process( } else { - ivas_spar_set_bitrate_config( &hSpar->hMdEnc->spar_md_cfg, table_idx, ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND ); + ivas_spar_set_bitrate_config( &hSpar->hMdEnc->spar_md_cfg, table_idx, ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND +#ifdef ARITH_HUFF_CODER_CHANGES + ,1 + , hEncoderConfig->Opt_PCA_ON +#endif + ); } } /*-----------------------------------------------------------------------------------------* @@ -674,7 +682,11 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->spar_hoa_md_flag == 0 ) { - ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order ); + ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order +#ifdef ARITH_HUFF_CODER_CHANGES + , max_md_bit_dirac +#endif + ); } { @@ -721,7 +733,11 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->spar_hoa_md_flag ) { - ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order ); + ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order +#ifdef ARITH_HUFF_CODER_CHANGES + , max_md_bit_dirac +#endif + ); } /*-----------------------------------------------------------------------------------------* @@ -892,5 +908,10 @@ static ivas_error ivas_spar_enc_process( pop_wmops(); +#ifdef ARITH_HUFF_CODER_CHANGES + total_md_bits = hMetaData->nb_bits_tot - start_nb_bits; + //assert(total_md_bits <= hSpar->hMdEnc->spar_md_cfg.max_md_bits_sba); +#endif + return error; } diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 2b4e9e12e8..2708420f9e 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -110,14 +110,6 @@ ivas_error ivas_spar_md_enc_open( ivas_spar_md_enc_state_t *hMdEnc; ivas_error error; int16_t num_channels, i, j; -#ifdef ARITH_HUFF_CODER_CHANGES - int16_t bits_PR, bits_C, bits_P = 0; - int32_t wc_coarse_strat = 0; - int16_t num_bands_arith_huff = IVAS_MAX_NUM_BANDS; - int16_t n_input, n_dmx, n_dec = 0; - int16_t table_idx, quant_strat = 0; - int32_t table_cal_wc = 0; -#endif error = IVAS_ERR_OK; if ( ( hMdEnc = (ivas_spar_md_enc_state_t *) malloc( sizeof( ivas_spar_md_enc_state_t ) ) ) == NULL ) @@ -211,52 +203,10 @@ ivas_error ivas_spar_md_enc_open( { return error; } - #ifdef ARITH_HUFF_CODER_CHANGES - /*rtyag : this should be moved to ivas_spar_set_bitrate_config() after we calculate - pSpar_md_cfg->max_bits_per_blk, refer to my comment in ivas_spar_set_bitrate_config() - */ - /*calculate the worst case strat vlaue*/ - table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - if ( ( ivas_spar_br_table_consts[table_idx].q_lvls[2][0] == 1 && - ivas_spar_br_table_consts[table_idx].q_lvls[2][1] == 1 && - ivas_spar_br_table_consts[table_idx].q_lvls[2][2] == 1 && - ivas_spar_br_table_consts[table_idx].q_lvls[2][3] == 1 ) ) - { - quant_strat = QUANT_STRAT_0; - } - else - { - quant_strat = QUANT_STRAT_2; - } - /*worst case table calculated value*/ - for ( i = 0; i < ivas_spar_br_table_consts[table_idx].nchan_transport; i++ ) - { - table_cal_wc += ivas_spar_br_table_consts[table_idx].core_brs[i][1]; - } - table_cal_wc = hEncoderConfig->ivas_total_brate - table_cal_wc; - table_cal_wc = table_cal_wc / FRAMES_PER_SEC; - - n_input = ivas_sba_get_nchan_metadata( sba_order ); - n_dmx = ivas_spar_br_table_consts[table_idx].nchan_transport; - n_dec = n_input - n_dmx; - /*rtyag : please use (int16_t)ceilf(log2f(q_lvls[][])), no need to add +1*/ - bits_PR = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][0] ) + 1 ) * ( n_input - 1 ); - bits_C = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][1] ) + 1 ) * ( ( n_dmx - 1 ) * n_dec ); - bits_P = ( (int16_t) log2( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][2] ) + 1 ) * n_dec; - wc_coarse_strat = bits_PR + bits_C + bits_P; - wc_coarse_strat = ( ( wc_coarse_strat * num_bands_arith_huff ) + ( IVAS_SBA_SIGNALING_OVERHEAD + hMdEnc->spar_md_cfg.quant_strat_bits ) ) * FRAMES_PER_SEC; - wc_coarse_strat = wc_coarse_strat / FRAMES_PER_SEC; - if ( wc_coarse_strat >= table_cal_wc ) - { - printf( "wc_coarse_strat is greater than table_cal_wc!" ); - } - /*rtyag : rename it to hMdEnc->max_md_bits_sba and refer to my comment in ivas_spar_set_bitrate_config() on how to compute it*/ - hMdEnc->wc_strat = wc_coarse_strat; - /*rtyag : we dont need to malloc, we just need to report this hMdEnc->max_md_bits_sba value. - Please refer to my comment in ivas_spar_set_bitrate_config() function*/ - hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) ); + hMdEnc->spar_md_cfg.wc_coarse_strat_buff = (Indice *)malloc(hMdEnc->spar_md_cfg.max_md_bits_sba * sizeof(Indice)); #endif + *hMdEnc_in = hMdEnc; return error; @@ -339,11 +289,11 @@ void ivas_spar_md_enc_close( free( hMdEnc->mixer_mat_local ); } #ifdef ARITH_HUFF_CODER_CHANGES - if ( hMdEnc->wc_coarse_strat_buff != NULL ) + if ( hMdEnc->spar_md_cfg.wc_coarse_strat_buff != NULL ) { - free( hMdEnc->wc_coarse_strat_buff ); - hMdEnc->wc_coarse_strat_buff = NULL; - hMdEnc->wc_strat = 0; + free( hMdEnc->spar_md_cfg.wc_coarse_strat_buff ); + hMdEnc->spar_md_cfg.wc_coarse_strat_buff = NULL; + hMdEnc->spar_md_cfg.max_md_bits_sba = 0; } #endif if ( hMdEnc != NULL ) @@ -377,7 +327,12 @@ ivas_error ivas_spar_md_enc_init( table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND ); + ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND +#ifdef ARITH_HUFF_CODER_CHANGES + , 1 ,hEncoderConfig->ivas_total_brate + , hEncoderConfig->Opt_PCA_ON +#endif + ); /* get FB coefficients */ for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) @@ -602,6 +557,10 @@ ivas_error ivas_spar_md_enc_process( const int16_t dtx_vad, const int16_t nchan_inp, const int16_t sba_order /* i : Ambisonic (SBA) order */ +#ifdef ARITH_HUFF_CODER_CHANGES + , + int16_t max_md_bit_dirac +#endif ) { float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; @@ -618,6 +577,10 @@ ivas_error ivas_spar_md_enc_process( BSTR_ENC_DATA hMetaData_tmp; #ifndef ARITH_HUFF_CODER_CHANGES Indice ind_list_tmp[MAX_BITS_METADATA]; // IVAS_fmToDo: size to be optimized +#endif +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t dirac_bits, AGC_bits; + int16_t table_idx_val, ndmx; #endif float Wscale[IVAS_MAX_NUM_BANDS]; @@ -666,7 +629,7 @@ ivas_error ivas_spar_md_enc_process( } #ifdef ARITH_HUFF_CODER_CHANGES - hMetaData_tmp.ind_list = hMdEnc->wc_coarse_strat_buff; + hMetaData_tmp.ind_list = hMdEnc->spar_md_cfg.wc_coarse_strat_buff; #else hMetaData_tmp.ind_list = ind_list_tmp; #endif @@ -929,7 +892,20 @@ ivas_error ivas_spar_md_enc_process( } ivas_select_next_strat( hMdEnc->spar_md_cfg.prior_strat, cs, dmx_switch, dtx_vad ); - +#ifdef ARITH_HUFF_CODER_CHANGES + table_idx_val = ivas_get_spar_table_idx(hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL); + ndmx = ivas_spar_br_table_consts[table_idx_val].nchan_transport; + if (hMdEnc->spar_md_cfg.AGC_status) + { + AGC_bits = (ndmx == 1) ? AGC_BITS_PER_CH : AGC_SIGNALLING_BITS + AGC_BITS_PER_CH * ndmx; + } + else + { + AGC_bits = AGC_SIGNALLING_BITS; + } + dirac_bits = min(max_md_bit_dirac + 1, 500); + hMdEnc->spar_md_cfg.WC_value = hMdEnc->spar_md_cfg.max_bits_per_blk + AGC_bits + hMdEnc->spar_md_cfg.PCA_val + dirac_bits; +#endif for ( i = 0; i < MAX_CODING_STRATS; i++ ) { strat = cs[i]; @@ -939,11 +915,16 @@ ivas_error ivas_spar_md_enc_process( reset_indices_enc( &hMetaData_tmp, MAX_BITS_METADATA ); #else - reset_indices_enc( &hMetaData_tmp, hMdEnc->wc_strat ); + reset_indices_enc( &hMetaData_tmp, hMdEnc->spar_md_cfg.max_md_bits_sba ); + #endif ivas_write_spar_md_bitstream( hMdEnc, num_bands, bands_bw, &hMetaData_tmp, hEncoderConfig->ivas_total_brate, strat, qsi, planarCP ); - if ( hMetaData->nb_bits_tot == bit_pos_start || hMetaData_tmp.nb_bits_tot < ( hMetaData->nb_bits_tot - bit_pos_start ) ) +#ifdef ARITH_HUFF_CODER_CHANGES + if ( (hMetaData_tmp.nb_bits_tot <= hMdEnc->spar_md_cfg.WC_value) && ( hMetaData->nb_bits_tot == bit_pos_start || ( hMetaData_tmp.nb_bits_tot < ( hMetaData->nb_bits_tot - bit_pos_start ) ) ) ) +#else + if ( hMetaData->nb_bits_tot == bit_pos_start || (hMetaData_tmp.nb_bits_tot < (hMetaData->nb_bits_tot - bit_pos_start))) +#endif { write_metadata_buffer( &hMetaData_tmp, hMetaData, bit_pos_start, next_ind_start, last_ind_start ); code_strat = strat; @@ -1345,14 +1326,9 @@ static void ivas_get_huffman_coded_bs( for ( j = pred_offset; j < pred_coeff_dim; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) - { -#endif - push_next_indice( hMetaData, code, len ); -#ifdef ARITH_HUFF_CODER_CHANGES - } - else + if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { return; } @@ -1364,14 +1340,9 @@ static void ivas_get_huffman_coded_bs( if ( keep_planar[(int16_t) floor( j / ( ndm - 1 ) )] ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) - { -#endif - push_next_indice( hMetaData, code, len ); -#ifdef ARITH_HUFF_CODER_CHANGES - } - else + if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { return; } @@ -1384,14 +1355,9 @@ static void ivas_get_huffman_coded_bs( if ( keep_planar[j] ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) - { -#endif - push_next_indice( hMetaData, code, len ); -#ifdef ARITH_HUFF_CODER_CHANGES - } - else + if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { return; } @@ -1404,14 +1370,9 @@ static void ivas_get_huffman_coded_bs( for ( j = pred_offset; j < pred_coeff_dim; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) - { -#endif - push_next_indice( hMetaData, code, len ); -#ifdef ARITH_HUFF_CODER_CHANGES - } - else + if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { return; } @@ -1421,14 +1382,9 @@ static void ivas_get_huffman_coded_bs( for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) - { -#endif - push_next_indice( hMetaData, code, len ); -#ifdef ARITH_HUFF_CODER_CHANGES - } - else + if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { return; } @@ -1438,14 +1394,9 @@ static void ivas_get_huffman_coded_bs( for ( j = 0; j < ndec; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); + push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot + len ) <= hMdEnc->wc_strat ) - { -#endif - push_next_indice( hMetaData, code, len ); -#ifdef ARITH_HUFF_CODER_CHANGES - } - else + if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { return; } @@ -1542,7 +1493,7 @@ static void ivas_get_arith_coded_bs( symbol_arr_re, symbol_arr_old_re, pred_cell_dims, hMetaData, any_diff #ifdef ARITH_HUFF_CODER_CHANGES , - hMdEnc->wc_strat + hMdEnc->spar_md_cfg.max_bits_per_blk #endif ); if ( hMdEnc->spar_hoa_md_flag ) @@ -1589,7 +1540,7 @@ static void ivas_get_arith_coded_bs( symbol_arr_re, symbol_arr_old_re, drct_cell_dims, hMetaData, any_diff #ifdef ARITH_HUFF_CODER_CHANGES , - hMdEnc->wc_strat + hMdEnc->spar_md_cfg.max_bits_per_blk #endif ); @@ -1612,7 +1563,7 @@ static void ivas_get_arith_coded_bs( symbol_arr_re, symbol_arr_old_re, decd_cell_dims, hMetaData, any_diff #ifdef ARITH_HUFF_CODER_CHANGES , - hMdEnc->wc_strat + hMdEnc->spar_md_cfg.max_bits_per_blk #endif ); diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index fe4d57ef60..af1566b2ab 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -674,10 +674,6 @@ typedef struct ivas_spar_md_enc_state_t ivas_huff_coeffs_t huff_coeffs; int16_t table_idx; int16_t spar_hoa_md_flag; -#ifdef ARITH_HUFF_CODER_CHANGES - int16_t wc_strat; - Indice *wc_coarse_strat_buff; -#endif } ivas_spar_md_enc_state_t; /* PCA structure */ -- GitLab From 2905c1f3147659caa3584bb67599abf4f83c4db2 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 4 Apr 2023 11:42:52 +0530 Subject: [PATCH 13/26] resolved build warnings --- lib_com/ivas_spar_com.c | 3 +-- lib_enc/ivas_spar_md_enc.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index 8534414d41..5bb349b52c 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -2110,8 +2110,7 @@ void ivas_spar_set_bitrate_config( int16_t wc_coarse_strat = 0; int16_t n_input, n_dmx, n_dec = 0; int16_t table_idx_val, quant_strat = 0; - int16_t table_cal_wc = 0; - int16_t val = 0; + int32_t table_cal_wc = 0; #endif pSpar_md_cfg->nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 2da4a205f5..ceb8247110 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -330,7 +330,7 @@ ivas_error ivas_spar_md_enc_init( ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND #ifdef ARITH_HUFF_CODER_CHANGES - , 1 ,hEncoderConfig->ivas_total_brate + , 1 , hEncoderConfig->Opt_PCA_ON #endif ); -- GitLab From 5b53afc91ceba2d5ef83323645536e0fb1c94f39 Mon Sep 17 00:00:00 2001 From: rtyag Date: Tue, 4 Apr 2023 19:27:52 +1000 Subject: [PATCH 14/26] entropy coder changes, clean up, fixes --- lib_com/ivas_cnst.h | 6 +- lib_com/ivas_dirac_com.c | 74 +++++++++- lib_com/ivas_prot.h | 28 +++- lib_com/ivas_rom_com.h | 1 - lib_com/ivas_spar_com.c | 79 ++++++----- lib_com/ivas_stat_com.h | 9 +- lib_com/options.h | 1 + lib_dec/ivas_spar_md_dec.c | 14 +- lib_enc/ivas_entropy_coder.c | 158 +++++++++++++++++---- lib_enc/ivas_sba_enc.c | 15 ++ lib_enc/ivas_spar_encoder.c | 28 ++-- lib_enc/ivas_spar_md_enc.c | 258 +++++++++++++++++++++-------------- 12 files changed, 458 insertions(+), 213 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 23080f7b46..a7c3ba5536 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -79,10 +79,6 @@ typedef enum #define IVAS_FORMAT_SIGNALING_NBITS 2 /* number of bits for signaling the IVAS format */ #define IVAS_FORMAT_SIGNALING_NBITS_SBA ( IVAS_FORMAT_SIGNALING_NBITS + 1 ) -#ifdef ARITH_HUFF_CODER_CHANGES -//#define IVAS_SBA_SIGNALING_OVERHEAD IVAS_FORMAT_SIGNALING_NBITS_SBA + SBA_ORDER_BITS + SBA_PLANAR_BITS + AGC_SIGNALLING_BITS + SPAR_NUM_CODING_STRAT_BITS -#define IVAS_SBA_SIGNALING_OVERHEAD 600 -#endif /*----------------------------------------------------------------------------------* @@ -995,6 +991,7 @@ typedef enum #define AGC_EMAX 0 #ifdef ARITH_HUFF_CODER_CHANGES #define AGC_SIGNALLING_BITS 1 +#define IVAS_SPAR_ARITH_OVERSHOOT_BITS (16) #endif /* Common SPAR metadata constants */ @@ -1656,6 +1653,7 @@ typedef enum #define IVAS_16K_12BANDS_ACTIVE_BANDS 10 #define SPAR_DIRAC_SPLIT_START_BAND 8 +#define DIRAC_TO_SPAR_HBR_PRED_CHS (FOA_CHANNELS - 1) #define SPAR_DTX_BANDS 2 #define DIRAC_DTX_BANDS 2 #define SPAR_DIRAC_DTX_BANDS ( SPAR_DTX_BANDS + DIRAC_DTX_BANDS ) diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c index 01f133a3b7..5f1bc5c19b 100644 --- a/lib_com/ivas_dirac_com.c +++ b/lib_com/ivas_dirac_com.c @@ -289,6 +289,70 @@ void ivas_dirac_config_bands( return; } +#ifdef ARITH_HUFF_CODER_CHANGES +void ivas_get_dirac_sba_max_md_bits( + const int32_t sba_total_brate, + int16_t *bits_frame_nominal, + int16_t *metadata_max_bits, + int16_t *qmetadata_max_bit_req, + int16_t nbands ) +{ + if ( sba_total_brate <= IVAS_13k2 ) + { + *bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; + *metadata_max_bits = 70; + } + else if ( sba_total_brate <= IVAS_16k4 ) + { + *bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; + *metadata_max_bits = 80; + } + else if ( sba_total_brate <= IVAS_24k4 ) + { + *bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; + *metadata_max_bits = 103; + } + else if ( sba_total_brate <= IVAS_32k ) + { + *bits_frame_nominal = ACELP_32k / FRAMES_PER_SEC; + *metadata_max_bits = 214; + } + else if ( sba_total_brate <= IVAS_48k ) + { + *bits_frame_nominal = IVAS_48k / FRAMES_PER_SEC; + *metadata_max_bits = 240; + } + else if ( sba_total_brate <= IVAS_64k ) + { + *bits_frame_nominal = IVAS_64k / FRAMES_PER_SEC; + *metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_80k ) + { + *bits_frame_nominal = IVAS_80k / FRAMES_PER_SEC; + *metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_96k ) + { + *bits_frame_nominal = IVAS_96k / FRAMES_PER_SEC; + *metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_128k ) + { + *bits_frame_nominal = IVAS_128k / FRAMES_PER_SEC; + *metadata_max_bits = 250; + } + else + { + *bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); + *metadata_max_bits = MAX16B; /* no limit */ + } + *metadata_max_bits = (int16_t) ceilf( (float) *metadata_max_bits * nbands / 5 ); + *qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA >> 1; + + return; +} +#endif /*------------------------------------------------------------------------- * ivas_dirac_sba_config() @@ -358,7 +422,14 @@ ivas_error ivas_dirac_sba_config( { return error; } - +#ifdef ARITH_HUFF_CODER_CHANGES + ivas_get_dirac_sba_max_md_bits( + sba_total_brate, + &hQMetaData->bits_frame_nominal, + &hQMetaData->metadata_max_bits, + &hQMetaData->qmetadata_max_bit_req, + hQMetaData->q_direction[0].cfg.nbands ); +#else if ( sba_total_brate <= IVAS_13k2 ) { hQMetaData->bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; @@ -412,6 +483,7 @@ ivas_error ivas_dirac_sba_config( hQMetaData->metadata_max_bits = (int16_t) ceilf( (float) hQMetaData->metadata_max_bits * hQMetaData->q_direction[0].cfg.nbands / 5 ); hQMetaData->qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA >> 1; +#endif return error; } diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 32f14b28b2..729693ef92 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -114,6 +114,10 @@ ivas_error ivas_spar_md_enc_init ivas_error ivas_sba_enc_reconfigure( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ); +#ifdef ARITH_HUFF_CODER_CHANGES +int16_t ivas_sba_get_max_md_bits( + Encoder_Struct *st_ivas ); +#endif void destroy_sce_enc( SCE_ENC_HANDLE hSCE /* i/o: SCE encoder structure */ @@ -3361,6 +3365,15 @@ void ivas_dirac_config_bands( IVAS_FB_MIXER_HANDLE hFbMdft ); +#ifdef ARITH_HUFF_CODER_CHANGES +void ivas_get_dirac_sba_max_md_bits( + const int32_t sba_total_brate, + int16_t *bits_frame_nominal, + int16_t *metadata_max_bits, + int16_t *qmetadata_max_bit_req, + int16_t nbands ); +#endif + ivas_error ivas_dirac_sba_config( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ int16_t *nchan_transport, /* o : number of transport channel needed for MASA format */ @@ -4007,8 +4020,9 @@ void ivas_spar_set_bitrate_config( const int16_t num_bands /* i : number of bands */ #ifdef ARITH_HUFF_CODER_CHANGES , - const int16_t enc_flag - ,const int16_t Opt_PCA_ON + const int16_t enc_flag, + const int16_t pca_flag, + const int16_t agc_flag #endif ); @@ -4096,9 +4110,6 @@ ivas_error ivas_spar_md_enc_process( const int16_t dtx_vad, const int16_t nchan_inp, const int16_t sba_order /* i : Ambisonic (SBA) order */ -#ifdef ARITH_HUFF_CODER_CHANGES - , int16_t max_md_bit_dirac -#endif ); void ivas_compute_spar_params( @@ -4449,7 +4460,12 @@ int16_t ivas_get_bits_to_encode( void ivas_huffman_encode( ivas_huffman_cfg_t *huff_cfg, int16_t in, int16_t *hcode, int16_t *hlen ); void ivas_spar_huff_coeffs_com_init( ivas_huff_coeffs_t *pHuff_coeffs, ivas_spar_md_com_cfg *pSpar_cfg, const int16_t table_idx, const int16_t enc_dec ); void ivas_spar_arith_coeffs_com_init( ivas_arith_coeffs_t *pArith_coeffs, ivas_spar_md_com_cfg *pSpar_cfg, const int16_t table_idx, const int16_t enc_dec ); -void ivas_arith_encode_cmplx_cell_array(ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, const int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_old_re, ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, const int16_t any_diff +#ifdef ARITH_HUFF_CODER_CHANGES +int16_t ivas_arith_encode_cmplx_cell_array( +#else +void ivas_arith_encode_cmplx_cell_array( +#endif +ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, const int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_old_re, ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, const int16_t any_diff #ifdef ARITH_HUFF_CODER_CHANGES , int32_t wc_strat_arith #endif diff --git a/lib_com/ivas_rom_com.h b/lib_com/ivas_rom_com.h index a095c9e4b4..0fea291b30 100644 --- a/lib_com/ivas_rom_com.h +++ b/lib_com/ivas_rom_com.h @@ -318,7 +318,6 @@ extern const float McMASA_LFEGain_vectors[64]; extern const float ism_azimuth_borders[4]; extern const float ism_elevation_borders[4]; - /*----------------------------------------------------------------------------------* * Param ISM ROM tables *----------------------------------------------------------------------------------*/ diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index 5bb349b52c..0ca8d01785 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -2097,7 +2097,8 @@ void ivas_spar_set_bitrate_config( #ifdef ARITH_HUFF_CODER_CHANGES , const int16_t enc_flag, - const int16_t Opt_PCA_ON + const int16_t pca_flag, + const int16_t agc_flag #endif ) { @@ -2106,11 +2107,11 @@ void ivas_spar_set_bitrate_config( int16_t sba_order; int16_t md_coding_bits_header; #ifdef ARITH_HUFF_CODER_CHANGES - int16_t bits_PR, bits_C, bits_P = 0; - int16_t wc_coarse_strat = 0; - int16_t n_input, n_dmx, n_dec = 0; - int16_t table_idx_val, quant_strat = 0; - int32_t table_cal_wc = 0; + int16_t agc_bits, pca_bits, num_PR_bits_dirac_bands; + int16_t bits_PR, bits_C, bits_P; + int16_t wc_coarse_strat; + int16_t n_input, n_dmx, n_dec; + int16_t quant_strat; #endif pSpar_md_cfg->nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; @@ -2158,14 +2159,10 @@ void ivas_spar_set_bitrate_config( pSpar_md_cfg->max_bits_per_blk += md_coding_bits_header; #ifdef ARITH_HUFF_CODER_CHANGES - if ( enc_flag) + if ( enc_flag ) { - /*calculate the worst case strat vlaue*/ - table_idx_val = ivas_get_spar_table_idx( ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - if ( ( ivas_spar_br_table_consts[table_idx].q_lvls[2][0] == 1 && - ivas_spar_br_table_consts[table_idx].q_lvls[2][1] == 1 && - ivas_spar_br_table_consts[table_idx].q_lvls[2][2] == 1 && - ivas_spar_br_table_consts[table_idx].q_lvls[2][3] == 1 ) ) + /*calculate the actual worst case bits*/ + if ( ivas_total_brate >= BRATE_SPAR_Q_STRAT ) { quant_strat = QUANT_STRAT_0; } @@ -2173,46 +2170,58 @@ void ivas_spar_set_bitrate_config( { quant_strat = QUANT_STRAT_2; } - /*worst case table calculated value*/ - for ( i = 0; i < ivas_spar_br_table_consts[table_idx_val].nchan_transport; i++ ) - { - table_cal_wc += ivas_spar_br_table_consts[table_idx_val].core_brs[i][1]; - } - table_cal_wc = ( ivas_total_brate - table_cal_wc ) / FRAMES_PER_SEC; + + num_PR_bits_dirac_bands = num_bands - SPAR_DIRAC_SPLIT_START_BAND; + num_PR_bits_dirac_bands = max( 0, num_PR_bits_dirac_bands ); + num_PR_bits_dirac_bands *= DIRAC_TO_SPAR_HBR_PRED_CHS; n_input = ivas_sba_get_nchan_metadata( sba_order ); - n_dmx = ivas_spar_br_table_consts[table_idx_val].nchan_transport; + n_dmx = ivas_spar_br_table_consts[table_idx].nchan_transport; n_dec = n_input - n_dmx; - bits_PR = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx_val].q_lvls[quant_strat][0] ) ) * ( n_input - 1 ); - bits_C = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx_val].q_lvls[quant_strat][1] ) ) * ( ( n_dmx - 1 ) * n_dec ); - bits_P = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx_val].q_lvls[quant_strat][2] ) ) * ( n_dec ); + bits_PR = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][0] ) ); + num_PR_bits_dirac_bands *= bits_PR; + bits_PR = bits_PR * ( n_input - 1 ); + bits_C = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][1] ) ) * ( ( n_dmx - 1 ) * n_dec ); + bits_P = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][2] ) ) * ( n_dec ); wc_coarse_strat = bits_PR + bits_C + bits_P; - wc_coarse_strat = ( ( wc_coarse_strat * IVAS_MAX_NUM_BANDS ) * FRAMES_PER_SEC + ( IVAS_SBA_SIGNALING_OVERHEAD ) ) / FRAMES_PER_SEC; - pSpar_md_cfg->max_md_bits_sba = wc_coarse_strat; + wc_coarse_strat *= num_bands; + wc_coarse_strat -= num_PR_bits_dirac_bands; + wc_coarse_strat += md_coding_bits_header; - if ( Opt_PCA_ON ) + if ( pSpar_md_cfg->max_bits_per_blk < wc_coarse_strat ) { - pSpar_md_cfg->PCA_val = 1 + IVAS_PCA_QBITS + IVAS_PCA_QBITS - 1; + assert( 0 ); } - else + + if ( agc_flag ) { - if ( ivas_total_brate == PCA_BRATE && sba_order == SBA_FOA_ORDER ) + if ( pSpar_md_cfg->nchan_transport == 1 ) { - pSpar_md_cfg->PCA_val = 1; + agc_bits = AGC_BITS_PER_CH; } else { - pSpar_md_cfg->PCA_val = 0; + agc_bits = AGC_BITS_PER_CH * pSpar_md_cfg->nchan_transport + AGC_SIGNALLING_BITS; } } - if ( wc_coarse_strat > table_cal_wc ) + else + { + agc_bits = AGC_SIGNALLING_BITS; + } + + if ( ivas_total_brate == PCA_BRATE && sba_order == SBA_FOA_ORDER ) { - assert( 0 ); + pca_bits = 1; + if ( pca_flag ) + { + pca_bits += IVAS_PCA_QBITS + IVAS_PCA_QBITS - 1; + } } - if ( pSpar_md_cfg->max_bits_per_blk - md_coding_bits_header < wc_coarse_strat ) + else { - // assert( 0 ); + pca_bits = 0; } + pSpar_md_cfg->max_md_bits_spar = pSpar_md_cfg->max_bits_per_blk + agc_bits + pca_bits; } #endif return; diff --git a/lib_com/ivas_stat_com.h b/lib_com/ivas_stat_com.h index e5dd7296d1..5bfa73f873 100644 --- a/lib_com/ivas_stat_com.h +++ b/lib_com/ivas_stat_com.h @@ -38,9 +38,6 @@ #include "typedef.h" #include "cnst.h" #include "ivas_cnst.h" -#ifdef ARITH_HUFF_CODER_CHANGES -#include "stat_enc.h" -#endif /*----------------------------------------------------------------------------------* @@ -262,11 +259,7 @@ typedef struct ivas_spar_md_com_cfg int16_t planarCP; int16_t num_umx_chs; #ifdef ARITH_HUFF_CODER_CHANGES - int16_t max_md_bits_sba; - int16_t WC_value; - Indice *wc_coarse_strat_buff; - int16_t AGC_status; - int16_t PCA_val; + int16_t max_md_bits_spar; #endif } ivas_spar_md_com_cfg; diff --git a/lib_com/options.h b/lib_com/options.h index 62254935dd..0108375321 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -151,6 +151,7 @@ #define FIX_382_MASA_META_FRAMING_ASYNC /* Nokia: Issue 382: detect potential MASA metadata framing offset */ + #define ARITH_HUFF_CODER_CHANGES /* DLB: Optimization of metadata memory for Huffman and arithmetic coders */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index 8af2a7c278..0f63c6be1e 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -448,8 +448,8 @@ ivas_error ivas_spar_md_dec_init( ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands #ifdef ARITH_HUFF_CODER_CHANGES - ,0 - , 0 + , + 0, 0, 0 #endif ); @@ -1762,7 +1762,7 @@ static void ivas_decode_arith_bs( { if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) { - pred_cell_dims[i].dim1 -= ( FOA_CHANNELS - 1 ); + pred_cell_dims[i].dim1 -= DIRAC_TO_SPAR_HBR_PRED_CHS; } } pred_cell_dims[i].dim2 = 1; @@ -1795,7 +1795,7 @@ static void ivas_decode_arith_bs( for ( j = 0; j < pred_cell_dims[i].dim1; j++ ) { hMdDec->spar_md_prev.band_coeffs_idx_mapped[i].pred_index_re[j] = - hMdDec->spar_md_prev.band_coeffs_idx_mapped[i].pred_index_re[j + ( FOA_CHANNELS - 1 )]; + hMdDec->spar_md_prev.band_coeffs_idx_mapped[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS]; } } } @@ -1816,10 +1816,10 @@ static void ivas_decode_arith_bs( { for ( j = pred_cell_dims[i].dim1 - 1; j >= 0; j-- ) { - hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j + ( FOA_CHANNELS - 1 )] = + hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS] = hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j]; } - for ( j = 0; j < FOA_CHANNELS - 1; j++ ) + for ( j = 0; j < DIRAC_TO_SPAR_HBR_PRED_CHS; j++ ) { hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j] = 0; } @@ -2078,7 +2078,7 @@ static void ivas_decode_huffman_bs( { if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) { - pred_offset = FOA_CHANNELS - 1; + pred_offset = DIRAC_TO_SPAR_HBR_PRED_CHS; } } diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index 02ac26c2ab..830a05e41a 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -128,8 +128,11 @@ static ivas_error ivas_get_dyn_freq_model( * * Arith encoding of an array of symbols *-----------------------------------------------------------------------------------------*/ - +#ifdef ARITH_HUFF_CODER_CHANGES +static int16_t ivas_arith_encode_array( +#else static void ivas_arith_encode_array( +#endif int16_t *pInput, ivas_arith_t *pArith, BSTR_ENC_HANDLE hMetaData, @@ -149,13 +152,13 @@ static void ivas_arith_encode_array( if ( pArith->dyn_model_bits > 0 ) { ivas_get_dyn_freq_model( pInput, in_len, &model_index, pArith, &pCum_freq ); - push_next_indice(hMetaData, model_index, pArith->dyn_model_bits); #ifdef ARITH_HUFF_CODER_CHANGES - if ((hMetaData->nb_bits_tot) > wc_strat_arith) + if ( ( hMetaData->nb_bits_tot + pArith->dyn_model_bits ) > wc_strat_arith ) { - return; + return -1; } #endif + push_next_indice( hMetaData, model_index, pArith->dyn_model_bits ); } else { @@ -169,12 +172,27 @@ static void ivas_arith_encode_array( ind = pInput[i] - pArith->vals[0]; ivas_ari_encode_14bits_ext( hMetaData, &as, ind, (const uint16_t *) pCum_freq ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot > wc_strat_arith ) + { + return -1; + } +#endif } ivas_ari_done_encoding_14bits( hMetaData, &as ); +#ifdef ARITH_HUFF_CODER_CHANGES + if ( hMetaData->nb_bits_tot > wc_strat_arith ) + { + return -1; + } +#endif } - +#ifdef ARITH_HUFF_CODER_CHANGES + return 0; +#else return; +#endif } @@ -183,15 +201,26 @@ static void ivas_arith_encode_array( * * Differential arith encoding *-----------------------------------------------------------------------------------------*/ - +#ifdef ARITH_HUFF_CODER_CHANGES +static int16_t ivas_arithCoder_encode_array_diff( +#else static void ivas_arithCoder_encode_array_diff( +#endif ivas_arith_t *pArith_diff, int16_t *pIn_new, int16_t *pIn_old_scratch, const int16_t length, - BSTR_ENC_HANDLE hMetaData ) + BSTR_ENC_HANDLE hMetaData +#ifdef ARITH_HUFF_CODER_CHANGES + , + int32_t wc_strat_arith +#endif +) { int16_t n; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t arith_result; +#endif if ( length > 0 ) { @@ -202,15 +231,22 @@ static void ivas_arithCoder_encode_array_diff( ivas_wrap_arround( pIn_old_scratch, pArith_diff->vals[0], pArith_diff->vals[pArith_diff->range - 1], length ); - ivas_arith_encode_array( pIn_old_scratch, pArith_diff, hMetaData, length #ifdef ARITH_HUFF_CODER_CHANGES - , - MAX_NUM_INDICES + arith_result = ivas_arith_encode_array( pIn_old_scratch, pArith_diff, hMetaData, length, + wc_strat_arith ); + if ( arith_result < 0 ) + { + return -1; + } +#else + ivas_arith_encode_array( pIn_old_scratch, pArith_diff, hMetaData, length ); #endif - ); } - +#ifdef ARITH_HUFF_CODER_CHANGES + return 0; +#else return; +#endif } @@ -244,8 +280,11 @@ void ivas_huffman_encode( * * Arithmetic encode a cell array *-----------------------------------------------------------------------------------------*/ - +#ifdef ARITH_HUFF_CODER_CHANGES +static int16_t arith_encode_cell_array( +#else static void arith_encode_cell_array( +#endif ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, const int16_t nB, @@ -259,6 +298,9 @@ static void arith_encode_cell_array( { int16_t total_symbol_len = 0; int16_t i; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t arith_result; +#endif for ( i = 0; i < nB; i++ ) { @@ -271,16 +313,24 @@ static void arith_encode_cell_array( { if ( pArith->range > 1 ) { - ivas_arith_encode_array( pSymbol, pArith, hMetaData, total_symbol_len #ifdef ARITH_HUFF_CODER_CHANGES - , - wc_strat_arith + arith_result = ivas_arith_encode_array( pSymbol, pArith, hMetaData, total_symbol_len, + wc_strat_arith ); + if ( arith_result < 0 ) + { + return -1; + } +#else + ivas_arith_encode_array( pSymbol, pArith, hMetaData, total_symbol_len ); #endif - ); } } +#ifdef ARITH_HUFF_CODER_CHANGES + return 0; +#else return; +#endif } @@ -289,16 +339,27 @@ static void arith_encode_cell_array( * * Arithmetic encode a cell array - differential *-----------------------------------------------------------------------------------------*/ - +#ifdef ARITH_HUFF_CODER_CHANGES +static int16_t arith_encode_cell_array_diff( +#else static void arith_encode_cell_array_diff( +#endif const ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, int16_t nB, ivas_arith_t *pArith_diff, int16_t *pSymbol_old, - int16_t *pSymbol ) + int16_t *pSymbol +#ifdef ARITH_HUFF_CODER_CHANGES + , + int32_t wc_strat_arith +#endif +) { int16_t i, total_symbol_len; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t arith_result; +#endif total_symbol_len = 0; for ( i = 0; i < nB; i++ ) @@ -312,11 +373,24 @@ static void arith_encode_cell_array_diff( { if ( pArith_diff->range > 1 ) { +#ifdef ARITH_HUFF_CODER_CHANGES + arith_result = ivas_arithCoder_encode_array_diff( pArith_diff, pSymbol, pSymbol_old, total_symbol_len, hMetaData, + wc_strat_arith ); + if ( arith_result < 0 ) + { + return -1; + } +#else ivas_arithCoder_encode_array_diff( pArith_diff, pSymbol, pSymbol_old, total_symbol_len, hMetaData ); +#endif } } +#ifdef ARITH_HUFF_CODER_CHANGES + return 0; +#else return; +#endif } @@ -325,8 +399,11 @@ static void arith_encode_cell_array_diff( * * Arithmetic encode a cell array *-----------------------------------------------------------------------------------------*/ - +#ifdef ARITH_HUFF_CODER_CHANGES +int16_t ivas_arith_encode_cmplx_cell_array( +#else void ivas_arith_encode_cmplx_cell_array( +#endif ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, const int16_t *pDo_diff, @@ -348,6 +425,9 @@ void ivas_arith_encode_cmplx_cell_array( ivas_cell_dim_t cell_dim[IVAS_MAX_NUM_BANDS], cell_dim_diff[IVAS_MAX_NUM_BANDS]; int16_t len, idx, i, j, idx1; int16_t total_len; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t arith_result; +#endif idx1 = 0; if ( any_diff == 1 ) @@ -413,24 +493,44 @@ void ivas_arith_encode_cmplx_cell_array( }*/ #endif - arith_encode_cell_array( cell_dim, hMetaData, nB, pArith_re, input #ifdef ARITH_HUFF_CODER_CHANGES - , - wc_strat_arith -#endif - ); + arith_result = arith_encode_cell_array( cell_dim, hMetaData, nB, pArith_re, input, + wc_strat_arith ); + if ( arith_result < 0 ) + { + return -1; + } + + arith_result = arith_encode_cell_array_diff( cell_dim_diff, hMetaData, nB, pArith_re_diff, input_old, input_new, + wc_strat_arith ); + if ( arith_result < 0 ) + { + return -1; + } +#else + arith_encode_cell_array( cell_dim, hMetaData, nB, pArith_re, input ); arith_encode_cell_array_diff( cell_dim_diff, hMetaData, nB, pArith_re_diff, input_old, input_new ); +#endif } else { - arith_encode_cell_array( pCell_dims, hMetaData, nB, pArith_re, pSymbol_re #ifdef ARITH_HUFF_CODER_CHANGES - , - wc_strat_arith + arith_result = arith_encode_cell_array( pCell_dims, hMetaData, nB, pArith_re, pSymbol_re, + wc_strat_arith ); + if ( arith_result < 0 ) + { + return -1; + } +#else + arith_encode_cell_array( pCell_dims, hMetaData, nB, pArith_re, pSymbol_re ); #endif - ); } + +#ifdef ARITH_HUFF_CODER_CHANGES + return 0; +#else return; +#endif } diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index d3aab0a6e8..2a1d192378 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -322,3 +322,18 @@ ivas_error ivas_sba_enc_reconfigure( return error; } + +#ifdef ARITH_HUFF_CODER_CHANGES +int16_t ivas_sba_get_max_md_bits( + Encoder_Struct *st_ivas ) +{ + int16_t max_md_bits; + + max_md_bits = min( st_ivas->hQMetaData->metadata_max_bits + 1, 500 ); // TODO: remove 500 once max MD bits has been defined at all bitrates in DirAC + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) + { + max_md_bits += st_ivas->hSpar->hMdEnc->spar_md_cfg.max_md_bits_spar; + } + return max_md_bits; +} +#endif \ No newline at end of file diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 6fd44be4a5..c41554055e 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -138,9 +138,6 @@ ivas_error ivas_spar_enc_open( #endif hSpar->hAgcEnc = NULL; -#ifdef ARITH_HUFF_CODER_CHANGES - hSpar->hMdEnc->spar_md_cfg.AGC_status = hSpar->AGC_Enable; -#endif if ( hSpar->AGC_Enable ) { if ( ( error = ivas_spar_agc_enc_open( &hSpar->hAgcEnc, input_Fs, nchan_inp ) ) != IVAS_ERR_OK ) @@ -216,6 +213,7 @@ ivas_error ivas_spar_enc_open( hSpar->hFrontVad = NULL; } } + /*-----------------------------------------------------------------* * Final assignment *-----------------------------------------------------------------*/ @@ -412,13 +410,11 @@ static ivas_error ivas_spar_enc_process( float energySum, vecLen; #ifdef ARITH_HUFF_CODER_CHANGES - int16_t start_nb_bits, total_md_bits; + int16_t start_nb_bits, total_md_bits, total_sba_bits; #endif push_wmops( "ivas_spar_enc_process" ); #ifdef ARITH_HUFF_CODER_CHANGES - int16_t max_md_bit_dirac = 0; - max_md_bit_dirac = hQMetaData->metadata_max_bits; start_nb_bits = hMetaData->nb_bits_tot; #endif @@ -608,8 +604,9 @@ static ivas_error ivas_spar_enc_process( { ivas_spar_set_bitrate_config( &hSpar->hMdEnc->spar_md_cfg, table_idx, ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND #ifdef ARITH_HUFF_CODER_CHANGES - ,1 - , hEncoderConfig->Opt_PCA_ON + , + 1, hEncoderConfig->Opt_PCA_ON, + hSpar->AGC_Enable #endif ); } @@ -636,11 +633,7 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->spar_hoa_md_flag == 0 ) { - ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order -#ifdef ARITH_HUFF_CODER_CHANGES - , max_md_bit_dirac -#endif - ); + ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order ); } { @@ -687,11 +680,7 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->spar_hoa_md_flag ) { - ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order -#ifdef ARITH_HUFF_CODER_CHANGES - , max_md_bit_dirac -#endif - ); + ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order ); } /*-----------------------------------------------------------------------------------------* @@ -864,7 +853,8 @@ static ivas_error ivas_spar_enc_process( #ifdef ARITH_HUFF_CODER_CHANGES total_md_bits = hMetaData->nb_bits_tot - start_nb_bits; - //assert(total_md_bits <= hSpar->hMdEnc->spar_md_cfg.max_md_bits_sba); + total_sba_bits = ivas_sba_get_max_md_bits( st_ivas ); + assert( total_md_bits <= total_sba_bits ); #endif return error; diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index ceb8247110..9d4993a493 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -71,9 +71,16 @@ static void ivas_band_mixer( float *cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], static void ivas_get_band_differential_index( ivas_band_coeffs_ind_t *pBand_idx, const int16_t q_levels[2], const int16_t one_sided, const int16_t nB, const int16_t complex_cov, const int16_t dim, const ivas_coeffs_type_t coeff_type ); +#ifdef ARITH_HUFF_CODER_CHANGES +static int16_t ivas_get_huffman_coded_bs( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const int16_t nB, const int16_t qsi, const int16_t planarCP ); +#else static void ivas_get_huffman_coded_bs( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const int16_t nB, const int16_t qsi, const int16_t planarCP ); - +#endif +#ifdef ARITH_HUFF_CODER_CHANGES +static int16_t ivas_get_arith_coded_bs( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const int16_t *pDo_diff, const int16_t bands_bw, const int16_t nB, const int16_t qsi, const int16_t planarCP ); +#else static void ivas_get_arith_coded_bs( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const int16_t *pDo_diff, const int16_t bands_bw, const int16_t nB, const int16_t qsi, const int16_t planarCP ); +#endif static ivas_error ivas_spar_set_enc_config( ivas_spar_md_enc_state_t *hMdEnc, int16_t *max_freq_per_chan, const int16_t nchan_transport, float *pFC, const int16_t nchan_inp ); @@ -203,9 +210,6 @@ ivas_error ivas_spar_md_enc_open( { return error; } -#ifdef ARITH_HUFF_CODER_CHANGES - hMdEnc->spar_md_cfg.wc_coarse_strat_buff = (Indice *)malloc(hMdEnc->spar_md_cfg.max_md_bits_sba * sizeof(Indice)); -#endif *hMdEnc_in = hMdEnc; @@ -291,14 +295,6 @@ void ivas_spar_md_enc_close( } free( hMdEnc->mixer_mat_local ); } -#ifdef ARITH_HUFF_CODER_CHANGES - if ( hMdEnc->spar_md_cfg.wc_coarse_strat_buff != NULL ) - { - free( hMdEnc->spar_md_cfg.wc_coarse_strat_buff ); - hMdEnc->spar_md_cfg.wc_coarse_strat_buff = NULL; - hMdEnc->spar_md_cfg.max_md_bits_sba = 0; - } -#endif free( *hMdEnc_in ); *hMdEnc_in = NULL; @@ -330,8 +326,9 @@ ivas_error ivas_spar_md_enc_init( ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND #ifdef ARITH_HUFF_CODER_CHANGES - , 1 - , hEncoderConfig->Opt_PCA_ON + , + 1, hEncoderConfig->Opt_PCA_ON, ivas_agc_enc_get_flag( hEncoderConfig->Opt_AGC_ON, ivas_spar_br_table_consts[table_idx].nchan_transport ) + #endif ); @@ -558,10 +555,6 @@ ivas_error ivas_spar_md_enc_process( const int16_t dtx_vad, const int16_t nchan_inp, const int16_t sba_order /* i : Ambisonic (SBA) order */ -#ifdef ARITH_HUFF_CODER_CHANGES - , - int16_t max_md_bit_dirac -#endif ) { float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; @@ -576,14 +569,19 @@ ivas_error ivas_spar_md_enc_process( int16_t code_strat; int16_t bit_pos_start, next_ind_start, last_ind_start; BSTR_ENC_DATA hMetaData_tmp; -#ifndef ARITH_HUFF_CODER_CHANGES +#ifdef ARITH_HUFF_CODER_CHANGES + Indice *ind_list_tmp; + int16_t md_indices_allocated; +#else Indice ind_list_tmp[MAX_BITS_METADATA]; // IVAS_fmToDo: size to be optimized #endif + float Wscale[IVAS_MAX_NUM_BANDS]; + #ifdef ARITH_HUFF_CODER_CHANGES - int16_t dirac_bits, AGC_bits; - int16_t table_idx_val, ndmx; + /*extra 16 bits for arithmetic coder as overshoot check is after a symbol is written*/ + md_indices_allocated = hMdEnc->spar_md_cfg.max_bits_per_blk + IVAS_SPAR_ARITH_OVERSHOOT_BITS; + ind_list_tmp = (Indice *) malloc( sizeof( Indice ) * md_indices_allocated ); #endif - float Wscale[IVAS_MAX_NUM_BANDS]; num_quant_strats = hMdEnc->spar_md_cfg.num_quant_strats; num_ch = ivas_sba_get_nchan_metadata( sba_order ); @@ -629,11 +627,8 @@ ivas_error ivas_spar_md_enc_process( num_quant_strats = 1; } -#ifdef ARITH_HUFF_CODER_CHANGES - hMetaData_tmp.ind_list = hMdEnc->spar_md_cfg.wc_coarse_strat_buff; -#else hMetaData_tmp.ind_list = ind_list_tmp; -#endif + hMetaData_tmp.nb_bits_tot = 0; /* Save state of metadata bitstream buffer */ bit_pos_start = hMetaData->nb_bits_tot; @@ -659,7 +654,7 @@ ivas_error ivas_spar_md_enc_process( { for ( b = SPAR_DIRAC_SPLIT_START_BAND; b < num_bands; b++ ) { - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) + for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ ) { pred_coeffs_re_local[i][b] = hMdEnc->spar_md.band_coeffs[b].pred_re[i]; } @@ -798,7 +793,7 @@ ivas_error ivas_spar_md_enc_process( { for ( b = SPAR_DIRAC_SPLIT_START_BAND; b < num_bands; b++ ) { - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) + for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ ) { /* Use the prediction coeffs computed based on DirAC MD to generate mixer matrix */ pred_coeffs_re[i][b] = pred_coeffs_re_local[i][b]; @@ -893,47 +888,34 @@ ivas_error ivas_spar_md_enc_process( } ivas_select_next_strat( hMdEnc->spar_md_cfg.prior_strat, cs, dmx_switch, dtx_vad ); -#ifdef ARITH_HUFF_CODER_CHANGES - table_idx_val = ivas_get_spar_table_idx(hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL); - ndmx = ivas_spar_br_table_consts[table_idx_val].nchan_transport; - if (hMdEnc->spar_md_cfg.AGC_status) - { - AGC_bits = (ndmx == 1) ? AGC_BITS_PER_CH : AGC_SIGNALLING_BITS + AGC_BITS_PER_CH * ndmx; - } - else - { - AGC_bits = AGC_SIGNALLING_BITS; - } - dirac_bits = min(max_md_bit_dirac + 1, 500); - hMdEnc->spar_md_cfg.WC_value = hMdEnc->spar_md_cfg.max_bits_per_blk + AGC_bits + hMdEnc->spar_md_cfg.PCA_val + dirac_bits; -#endif + for ( i = 0; i < MAX_CODING_STRATS; i++ ) { strat = cs[i]; if ( strat != NO_STRAT ) { -#ifndef ARITH_HUFF_CODER_CHANGES - reset_indices_enc( &hMetaData_tmp, MAX_BITS_METADATA ); - +#ifdef ARITH_HUFF_CODER_CHANGES + reset_indices_enc( &hMetaData_tmp, md_indices_allocated ); #else - reset_indices_enc( &hMetaData_tmp, hMdEnc->spar_md_cfg.max_md_bits_sba ); - + reset_indices_enc( &hMetaData_tmp, MAX_BITS_METADATA ); #endif ivas_write_spar_md_bitstream( hMdEnc, num_bands, bands_bw, &hMetaData_tmp, hEncoderConfig->ivas_total_brate, strat, qsi, planarCP ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( (hMetaData_tmp.nb_bits_tot <= hMdEnc->spar_md_cfg.WC_value) && ( hMetaData->nb_bits_tot == bit_pos_start || ( hMetaData_tmp.nb_bits_tot < ( hMetaData->nb_bits_tot - bit_pos_start ) ) ) ) -#else - if ( hMetaData->nb_bits_tot == bit_pos_start || (hMetaData_tmp.nb_bits_tot < (hMetaData->nb_bits_tot - bit_pos_start))) + /*write to main buffer if its a valid bitstream*/ + if ( hMetaData_tmp.nb_bits_tot > 0 ) #endif { - write_metadata_buffer( &hMetaData_tmp, hMetaData, bit_pos_start, next_ind_start, last_ind_start ); - code_strat = strat; - } - if ( hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == SBA_FOA_ORDER ) ) ? 1 : 0 ) <= hMdEnc->spar_md_cfg.tgt_bits_per_blk ) - { - packed_ok = 1; - break; + if ( hMetaData->nb_bits_tot == bit_pos_start || ( hMetaData_tmp.nb_bits_tot < ( hMetaData->nb_bits_tot - bit_pos_start ) ) ) + { + write_metadata_buffer( &hMetaData_tmp, hMetaData, bit_pos_start, next_ind_start, last_ind_start ); + code_strat = strat; + } + if ( hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == SBA_FOA_ORDER ) ) ? 1 : 0 ) <= hMdEnc->spar_md_cfg.tgt_bits_per_blk ) + { + packed_ok = 1; + break; + } } } } @@ -943,12 +925,27 @@ ivas_error ivas_spar_md_enc_process( break; } - if ( hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == SBA_FOA_ORDER ) ) ? 1 : 0 ) <= hMdEnc->spar_md_cfg.max_bits_per_blk ) +#ifdef ARITH_HUFF_CODER_CHANGES + /*only if valid bitstream was written to main buffer*/ + if ( hMetaData->nb_bits_tot > bit_pos_start ) +#endif { - break; + if ( hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == SBA_FOA_ORDER ) ) ? 1 : 0 ) <= hMdEnc->spar_md_cfg.max_bits_per_blk ) + { +#ifdef ARITH_HUFF_CODER_CHANGES + packed_ok = 1; +#endif + break; + } } } +#ifdef ARITH_HUFF_CODER_CHANGES + if ( dtx_vad == 1 ) + { + assert( packed_ok == 1 ); + } +#endif if ( hEncoderConfig->ivas_total_brate >= IVAS_256k ) { assert( qsi == 0 ); @@ -1133,6 +1130,10 @@ ivas_error ivas_spar_md_enc_process( hMdEnc->spar_md.dtx_vad = dtx_vad; hMdEnc->spar_md.num_bands = num_bands; +#ifdef ARITH_HUFF_CODER_CHANGES + free( ind_list_tmp ); +#endif + return IVAS_ERR_OK; } @@ -1202,6 +1203,9 @@ static void ivas_write_spar_md_bitstream( { int16_t no_ec, i; int16_t do_diff[IVAS_MAX_NUM_BANDS]; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t entropy_coding_result; +#endif if ( strat == NO_STRAT ) { @@ -1279,13 +1283,26 @@ static void ivas_write_spar_md_bitstream( #endif if ( no_ec == 1 ) { - ivas_get_huffman_coded_bs( hMdEnc, hMetaData, nB, qsi, planarCP ); +#ifdef ARITH_HUFF_CODER_CHANGES + entropy_coding_result = +#endif + ivas_get_huffman_coded_bs( hMdEnc, hMetaData, nB, qsi, planarCP ); } else { - ivas_get_arith_coded_bs( hMdEnc, hMetaData, do_diff, bands_bw, nB, qsi, planarCP ); +#ifdef ARITH_HUFF_CODER_CHANGES + entropy_coding_result = +#endif + ivas_get_arith_coded_bs( hMdEnc, hMetaData, do_diff, bands_bw, nB, qsi, planarCP ); } +#ifdef ARITH_HUFF_CODER_CHANGES + if ( entropy_coding_result < 0 ) + { + hMetaData->nb_bits_tot = 0; + } +#endif + return; } @@ -1295,8 +1312,11 @@ static void ivas_write_spar_md_bitstream( * * Generate huffman coded bitstream *-----------------------------------------------------------------------------------------*/ - +#ifdef ARITH_HUFF_CODER_CHANGES +static int16_t ivas_get_huffman_coded_bs( +#else static void ivas_get_huffman_coded_bs( +#endif ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const int16_t nB, @@ -1318,7 +1338,7 @@ static void ivas_get_huffman_coded_bs( { if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) { - pred_offset = FOA_CHANNELS - 1; + pred_offset = DIRAC_TO_SPAR_HBR_PRED_CHS; } } @@ -1327,13 +1347,13 @@ static void ivas_get_huffman_coded_bs( for ( j = pred_offset; j < pred_coeff_dim; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) + if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { - return; + return -1; } #endif + push_next_indice( hMetaData, code, len ); } for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) @@ -1341,13 +1361,13 @@ static void ivas_get_huffman_coded_bs( if ( keep_planar[(int16_t) floor( j / ( ndm - 1 ) )] ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) + if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { - return; + return -1; } #endif + push_next_indice( hMetaData, code, len ); } } @@ -1356,13 +1376,13 @@ static void ivas_get_huffman_coded_bs( if ( keep_planar[j] ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) + if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { - return; + return -1; } #endif + push_next_indice( hMetaData, code, len ); } } } @@ -1371,42 +1391,46 @@ static void ivas_get_huffman_coded_bs( for ( j = pred_offset; j < pred_coeff_dim; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) + if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { - return; + return -1; } #endif + push_next_indice( hMetaData, code, len ); } for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) + if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { - return; + return -1; } #endif + push_next_indice( hMetaData, code, len ); } for ( j = 0; j < ndec; j++ ) { ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); - push_next_indice( hMetaData, code, len ); #ifdef ARITH_HUFF_CODER_CHANGES - if ( ( hMetaData->nb_bits_tot ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) + if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) { - return; + return -1; } #endif + push_next_indice( hMetaData, code, len ); } } } +#ifdef ARITH_HUFF_CODER_CHANGES + return 0; +#else return; +#endif } @@ -1415,8 +1439,11 @@ static void ivas_get_huffman_coded_bs( * * Generate arithmetic coded bitstream *-----------------------------------------------------------------------------------------*/ - +#ifdef ARITH_HUFF_CODER_CHANGES +static int16_t ivas_get_arith_coded_bs( +#else static void ivas_get_arith_coded_bs( +#endif ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const int16_t *pDo_diff, @@ -1432,6 +1459,10 @@ static void ivas_get_arith_coded_bs( ivas_cell_dim_t decx_cell_dims[IVAS_MAX_NUM_BANDS]; int16_t symbol_arr_re[IVAS_MAX_INPUT_LEN]; int16_t symbol_arr_old_re[IVAS_MAX_INPUT_LEN]; +#ifdef ARITH_HUFF_CODER_CHANGES + int16_t arith_result; +#endif + for ( i = 0; i < nB; i++ ) { int16_t ndm, ndec; @@ -1442,7 +1473,7 @@ static void ivas_get_arith_coded_bs( { if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) { - pred_cell_dims[i].dim1 -= ( FOA_CHANNELS - 1 ); + pred_cell_dims[i].dim1 -= DIRAC_TO_SPAR_HBR_PRED_CHS; } } pred_cell_dims[i].dim2 = 1; @@ -1472,12 +1503,12 @@ static void ivas_get_arith_coded_bs( for ( j = 0; j < pred_cell_dims[i].dim1; j++ ) { hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j] = - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + ( FOA_CHANNELS - 1 )]; + hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS]; if ( any_diff == 1 ) { hMdEnc->spar_md_prior.band_coeffs_idx_mapped[i].pred_index_re[j] = - hMdEnc->spar_md_prior.band_coeffs_idx_mapped[i].pred_index_re[j + ( FOA_CHANNELS - 1 )]; + hMdEnc->spar_md_prior.band_coeffs_idx_mapped[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS]; } } } @@ -1490,13 +1521,19 @@ static void ivas_get_arith_coded_bs( ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, symbol_arr_old_re, pred_cell_dims, PRED_COEFF, planarCP ); } - ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.pred_arith_re[qsi], &hMdEnc->arith_coeffs.pred_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, pred_cell_dims, hMetaData, any_diff #ifdef ARITH_HUFF_CODER_CHANGES - , - hMdEnc->spar_md_cfg.max_bits_per_blk + arith_result = ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.pred_arith_re[qsi], &hMdEnc->arith_coeffs.pred_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, pred_cell_dims, hMetaData, any_diff, + hMdEnc->spar_md_cfg.max_bits_per_blk ); + if ( arith_result < 0 ) + { + return -1; + } +#else + ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.pred_arith_re[qsi], &hMdEnc->arith_coeffs.pred_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, pred_cell_dims, hMetaData, any_diff ); #endif - ); + if ( hMdEnc->spar_hoa_md_flag ) { for ( i = 0; i < nB; i++ ) @@ -1505,10 +1542,10 @@ static void ivas_get_arith_coded_bs( { for ( j = pred_cell_dims[i].dim1 - 1; j >= 0; j-- ) { - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + ( FOA_CHANNELS - 1 )] = + hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS] = hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j]; } - for ( j = 0; j < FOA_CHANNELS - 1; j++ ) + for ( j = 0; j < DIRAC_TO_SPAR_HBR_PRED_CHS; j++ ) { hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j] = 0; } @@ -1537,13 +1574,19 @@ static void ivas_get_arith_coded_bs( } } - ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.drct_arith_re[qsi], &hMdEnc->arith_coeffs.drct_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, drct_cell_dims, hMetaData, any_diff #ifdef ARITH_HUFF_CODER_CHANGES - , - hMdEnc->spar_md_cfg.max_bits_per_blk + arith_result = ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.drct_arith_re[qsi], &hMdEnc->arith_coeffs.drct_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, drct_cell_dims, hMetaData, any_diff, + hMdEnc->spar_md_cfg.max_bits_per_blk ); + if ( arith_result < 0 ) + { + return -1; + } +#else + ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.drct_arith_re[qsi], &hMdEnc->arith_coeffs.drct_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, drct_cell_dims, hMetaData, any_diff ); #endif - ); + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, decd_cell_dims, DECD_COEFF, planarCP ); @@ -1559,14 +1602,19 @@ static void ivas_get_arith_coded_bs( decd_cell_dims[i].dim1 = decd_cell_dims[i].dim1 - IVAS_SPAR_HOA3_NP_CHS; } } - - ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.decd_arith_re[qsi], &hMdEnc->arith_coeffs.decd_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, decd_cell_dims, hMetaData, any_diff #ifdef ARITH_HUFF_CODER_CHANGES - , - hMdEnc->spar_md_cfg.max_bits_per_blk + arith_result = ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.decd_arith_re[qsi], &hMdEnc->arith_coeffs.decd_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, decd_cell_dims, hMetaData, any_diff, + hMdEnc->spar_md_cfg.max_bits_per_blk ); + if ( arith_result < 0 ) + { + return -1; + } +#else + ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.decd_arith_re[qsi], &hMdEnc->arith_coeffs.decd_arith_re_diff[qsi], pDo_diff, nB, + symbol_arr_re, symbol_arr_old_re, decd_cell_dims, hMetaData, any_diff ); #endif - ); + ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, decx_cell_dims, DECX_COEFF, planarCP ); @@ -1575,7 +1623,11 @@ static void ivas_get_arith_coded_bs( ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, symbol_arr_old_re, decx_cell_dims, DECX_COEFF, planarCP ); } +#ifdef ARITH_HUFF_CODER_CHANGES + return 0; +#else return; +#endif } -- GitLab From 5f626b9c79ae9a91afe4eb361842212375c888dc Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 4 Apr 2023 18:45:39 +0530 Subject: [PATCH 15/26] resolved instrumentation build errors --- lib_dec/ivas_ism_dec.c | 19 ++++++++++++++++++- lib_enc/ivas_spar_md_enc.c | 4 ++-- lib_enc/ivas_stat_enc.h | 3 ++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index e6571e83d9..c9ec616573 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -377,9 +377,25 @@ ivas_error ivas_ism_dec_config( #ifdef NCHAN_ISM_PARAMETER switch ( st_ivas->nchan_ism ) + { + case 1: + st_ivas->transport_config = AUDIO_CONFIG_ISM1; + break; + case 2: + st_ivas->transport_config = AUDIO_CONFIG_ISM2; + break; + case 3: + st_ivas->transport_config = AUDIO_CONFIG_ISM3; + break; + case 4: + st_ivas->transport_config = AUDIO_CONFIG_ISM4; + break; + default: + st_ivas->transport_config = AUDIO_CONFIG_INVALID; + break; + } #else switch ( num_obj ) -#endif { case 1: st_ivas->transport_config = AUDIO_CONFIG_ISM1; @@ -397,6 +413,7 @@ ivas_error ivas_ism_dec_config( st_ivas->transport_config = AUDIO_CONFIG_INVALID; break; } +#endif return error; } diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 9d4993a493..45028a9575 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -1869,7 +1869,7 @@ static void ivas_write_parameter_bitstream_dtx( pr -= idx; pr_pd_bits = ivas_get_bits_to_encode( pd_q_lvls * pr_q_lvls ); - value = (uint16_t) ( pr * pd_q_lvls + pd ); + value = ( uint16_t )( pr * pd_q_lvls + pd ); push_next_indice( hMetaData, value, pr_pd_bits ); } @@ -1893,7 +1893,7 @@ static void ivas_write_parameter_bitstream_dtx( pr_idx2 = pSpar_md->band_coeffs_idx[i].pred_index_re[pr_idx_2 - 1]; pr_idx2 -= idx; - value = (uint16_t) ( pr_idx2 * pr_q_lvls1 + pr_idx1 ); + value = ( uint16_t )( pr_idx2 * pr_q_lvls1 + pr_idx1 ); pr_pr_bits = ivas_get_bits_to_encode( pr_q_lvls1 * pr_q_lvls2 ); diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index 34fc5116d2..d1279e5540 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -1058,9 +1058,10 @@ typedef struct encoder_config_structure int16_t force; /* parameter to force specific "core" of the Core-Coder*/ int16_t mdct_stereo_mode_cmdl; /* mdct stereo mode forced from command-line, employed only when DEBUG_FORCE_MDCT_STEREO_MODE is activated */ #ifdef DEBUG_AGC_ENCODER_CMD_OPTION - int16_t Opt_AGC_ON; /* flag indicating AGC operation in SBA */ + //int16_t Opt_AGC_ON; /* flag indicating AGC operation in SBA */ #endif #endif + int16_t Opt_AGC_ON; /* flag indicating AGC operation in SBA */ } ENCODER_CONFIG, *ENCODER_CONFIG_HANDLE; -- GitLab From ab543b83178e8e93766379ebe0e2e2adf694fcc3 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 4 Apr 2023 19:10:36 +0530 Subject: [PATCH 16/26] pipeline error fix - set1 --- lib_enc/ivas_sba_enc.c | 1 + lib_enc/ivas_spar_md_enc.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 2a1d192378..26b243a423 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -336,4 +336,5 @@ int16_t ivas_sba_get_max_md_bits( } return max_md_bits; } + #endif \ No newline at end of file diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 45028a9575..da83e9cb65 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -327,7 +327,12 @@ ivas_error ivas_spar_md_enc_init( ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND #ifdef ARITH_HUFF_CODER_CHANGES , - 1, hEncoderConfig->Opt_PCA_ON, ivas_agc_enc_get_flag( hEncoderConfig->Opt_AGC_ON, ivas_spar_br_table_consts[table_idx].nchan_transport ) + 1, hEncoderConfig->Opt_PCA_ON, +#ifndef DEBUG_AGC_ENCODER_CMD_OPTION + ivas_agc_enc_get_flag( ivas_spar_br_table_consts[table_idx].nchan_transport ) +#else + ivas_agc_enc_get_flag( hEncoderConfig->Opt_AGC_ON, ivas_spar_br_table_consts[table_idx].nchan_transport ) +#endif #endif ); @@ -1869,7 +1874,7 @@ static void ivas_write_parameter_bitstream_dtx( pr -= idx; pr_pd_bits = ivas_get_bits_to_encode( pd_q_lvls * pr_q_lvls ); - value = ( uint16_t )( pr * pd_q_lvls + pd ); + value = (uint16_t) ( pr * pd_q_lvls + pd ); push_next_indice( hMetaData, value, pr_pd_bits ); } @@ -1893,7 +1898,7 @@ static void ivas_write_parameter_bitstream_dtx( pr_idx2 = pSpar_md->band_coeffs_idx[i].pred_index_re[pr_idx_2 - 1]; pr_idx2 -= idx; - value = ( uint16_t )( pr_idx2 * pr_q_lvls1 + pr_idx1 ); + value = (uint16_t) ( pr_idx2 * pr_q_lvls1 + pr_idx1 ); pr_pr_bits = ivas_get_bits_to_encode( pr_q_lvls1 * pr_q_lvls2 ); -- GitLab From f9d1944b6ffafbe7971a1c611646dcdbbd5462cd Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 4 Apr 2023 20:27:12 +0530 Subject: [PATCH 17/26] pipeline error fix - set 2 --- lib_enc/ivas_sba_enc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 26b243a423..7b9bffe878 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -336,5 +336,4 @@ int16_t ivas_sba_get_max_md_bits( } return max_md_bits; } - -#endif \ No newline at end of file +#endif -- GitLab From c7985e799c8ce814d6ef256a9191f26351c7d1a9 Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Thu, 11 May 2023 13:47:40 +0530 Subject: [PATCH 18/26] Added changes missed while merging to the main --- lib_enc/ivas_spar_md_enc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index fcf3d71787..d746b5444d 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -657,6 +657,7 @@ ivas_error ivas_spar_md_enc_process( } hMetaData_tmp.ind_list = ind_list_tmp; + hMetaData_tmp.nb_bits_tot = 0; /* Save state of metadata bitstream buffer */ bit_pos_start = hMetaData->nb_bits_tot; @@ -692,7 +693,7 @@ ivas_error ivas_spar_md_enc_process( { for ( b = SPAR_DIRAC_SPLIT_START_BAND; b < num_bands; b++ ) { - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) + for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ ) { pred_coeffs_re_local[i][b] = hMdEnc->spar_md.band_coeffs[b].pred_re[i]; } @@ -873,7 +874,7 @@ ivas_error ivas_spar_md_enc_process( { for ( b = SPAR_DIRAC_SPLIT_START_BAND; b < num_bands; b++ ) { - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) + for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ ) { /* Use the prediction coeffs computed based on DirAC MD to generate mixer matrix */ pred_coeffs_re[i][b] = pred_coeffs_re_local[i][b]; @@ -1704,12 +1705,12 @@ static void ivas_get_arith_coded_bs( for ( j = 0; j < pred_cell_dims[i].dim1; j++ ) { hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j] = - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + ( FOA_CHANNELS - 1 )]; + hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS]; if ( any_diff == 1 ) { hMdEnc->spar_md_prior.band_coeffs_idx_mapped[i].pred_index_re[j] = - hMdEnc->spar_md_prior.band_coeffs_idx_mapped[i].pred_index_re[j + ( FOA_CHANNELS - 1 )]; + hMdEnc->spar_md_prior.band_coeffs_idx_mapped[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS]; } } } @@ -1747,10 +1748,10 @@ static void ivas_get_arith_coded_bs( { for ( j = pred_cell_dims[i].dim1 - 1; j >= 0; j-- ) { - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + ( FOA_CHANNELS - 1 )] = + hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS] = hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j]; } - for ( j = 0; j < FOA_CHANNELS - 1; j++ ) + for ( j = 0; j < DIRAC_TO_SPAR_HBR_PRED_CHS; j++ ) { hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j] = 0; } -- GitLab From d5fa1115f2ef8158a48350e30ae9ea6fca4312cd Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Thu, 11 May 2023 14:00:04 +0530 Subject: [PATCH 19/26] Merge branch 'main' into arithmetic_huffman_coder_changes --- lib_com/ivas_cov_smooth.c | 17 +++++++++++++++-- lib_com/options.h | 8 ++++++-- lib_enc/ext_sig_ana.c | 9 +++++++++ lib_enc/ivas_spar_encoder.c | 2 ++ lib_rend/ivas_dirac_dec_binaural_functions.c | 11 +++++------ 5 files changed, 37 insertions(+), 10 deletions(-) mode change 100644 => 100755 lib_com/options.h mode change 100644 => 100755 lib_enc/ext_sig_ana.c diff --git a/lib_com/ivas_cov_smooth.c b/lib_com/ivas_cov_smooth.c index b5bd6369c5..7a24396606 100644 --- a/lib_com/ivas_cov_smooth.c +++ b/lib_com/ivas_cov_smooth.c @@ -50,8 +50,11 @@ static void ivas_set_up_cov_smoothing( ivas_cov_smooth_state_t *hCovState, ivas_filterbank_t *pFb, const float max_update_rate, - const int16_t min_pool_size, + const int16_t min_pool_size +#ifndef FIX_331_ALL_BRS + , const int16_t nchan_inp /* i : number of input channels */ +#endif , const int32_t ivas_total_brate ) { @@ -90,7 +93,9 @@ static void ivas_set_up_cov_smoothing( } } } - else if ( nchan_inp <= FOA_CHANNELS ) + else +#ifndef FIX_331_ALL_BRS + if ( nchan_inp <= FOA_CHANNELS ) { for ( j = 0; j < pFb->filterbank_num_bands; j++ ) { @@ -112,6 +117,7 @@ static void ivas_set_up_cov_smoothing( } else { +#endif for ( j = 0; j < pFb->filterbank_num_bands; j++ ) { float update_factor; @@ -131,7 +137,9 @@ static void ivas_set_up_cov_smoothing( hCovState->pSmoothing_factor[j] = max_update_rate; } } +#ifndef FIX_331_ALL_BRS } +#endif hCovState->prior_bank_idx = -1; return; @@ -178,7 +186,12 @@ ivas_error ivas_spar_covar_smooth_enc_open( } } + +#ifndef FIX_331_ALL_BRS ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, nchan_inp, ivas_total_brate ); +#else + ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, ivas_total_brate ); +#endif *hCovState_out = hCovState; diff --git a/lib_com/options.h b/lib_com/options.h old mode 100644 new mode 100755 index ae406a0552..ab66559806 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -137,6 +137,10 @@ #define DISABLE_ADAP_RES_COD_TMP /* temporary fix for IVAS-403, disables adaptive residual coding */ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ +#define FIX_103_RA_PARAMS_PARAM_BIN_REND /* Issue 103: Digest room acoustics parameters for Parametric Binaural Renderer*/ +/*#define SBA_HPF_TUNING_DEC*/ +#define SMOOTH_WITH_TRANS_DET +#define FIX_331_ALL_BRS /*Enable the fix_331 across all the bitrates and sba modes*/ #define FIX_ISM_DTX_CNG_BWIDTH_ALT /* VA: issue 396 - alternative fix for bw changes on CNG frames in ISM DTX for objects that use the decoder-side noise estimation */ #define FIX_398_MASA_DIRECTION_ALIGNMENT /* Nokia: Issue 398: in 2dir MASA, dynamically adjust directions to be consistent */ @@ -181,6 +185,7 @@ #define FIX_355_REFACTOR_PARAMBIN_TO_5MS /* Nokia: Fixes issue 355 by refactoring parametric binauralizer code to 5 ms mode */ #define FIX_411_EVS_BE_TESTS_ON_WINDOWS_FAILING /* Eri: Fix incorrect use of stack variable used for channel aware config file */ #define COMBINED_FORMAT_SIGNALING /* VA: Introduce a signaling bit for combined format coding */ +#define FIX_446_STEREO_DMX_CRASH /* FhG: fix discrepancy with EVS code that could cause crashes in rare cases */ #define FIX_386_CORECODER_RECONFIG_2 /* VA: Issue 386: Resolve remaining ToDo comments in CoreCoder reconfig. */ #define FIX_440_PARAM_ISM_DIR_NOISE /* FhG: Issue 440: Fix directional background noise becoming diffuse in ParamISM */ @@ -191,11 +196,10 @@ #define FIX_447_PARAMBIN_MASA_REGU_FAC /* Nokia: Issue 447: Fix issue by adjusting regularization factor minimum value. */ #define FIX_441_SBA_PARAMBIN_GAINS /* Nokia: Fix issue 441 by changing gains in SBA path of parametric binauralizer */ - #define HODIRAC /* FhG: Sector-based HO-DirAC method for SBA at high bitrates */ #ifdef HODIRAC -#define SPAR_TUNING /* Dlb: tune SPAR for better quality */ +#define SPAR_TUNING /* Dlb: tune SPAR for better quality */ #define HODIRAC_FIX_BR_SWITCHING_DTX #endif diff --git a/lib_enc/ext_sig_ana.c b/lib_enc/ext_sig_ana.c old mode 100644 new mode 100755 index 80e652cf07..f79fbb5f95 --- a/lib_enc/ext_sig_ana.c +++ b/lib_enc/ext_sig_ana.c @@ -444,10 +444,19 @@ void core_signal_analysis_high_bitrate( ProcessIGF( st, hTcxEnc->spectrum[frameno], hTcxEnc->spectrum[frameno], powerSpec, transform_type[frameno] == TCX_20, frameno, 0, vad_hover_flag ); } +#ifndef FIX_446_STEREO_DMX_CRASH /* Copy memory */ mvr2r( lsp_new, st->lspold_enc, M ); +#endif } } +#ifdef FIX_446_STEREO_DMX_CRASH + if ( st->element_mode != IVAS_CPE_MDCT ) + { + /* Copy memory */ + mvr2r( lsp_new, st->lspold_enc, M ); + } +#endif return; } diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index abb3e6899d..183614d039 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -508,10 +508,12 @@ static ivas_error ivas_spar_enc_process( *-----------------------------------------------------------------------------------------*/ ivas_transient_det_process( hSpar->hTranDet, data_f[0], input_frame, transient_det ); +#ifndef FIX_331_ALL_BRS if ( sba_order == 1 ) { transient_det[1] = transient_det[0]; } +#endif if ( ivas_total_brate < IVAS_24k4 ) { transient_det[1] = 0; diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 0af9e47868..d212517d08 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -2356,25 +2356,24 @@ static void adaptTransportSignalsHeadtracked( } #endif -#ifdef FIX_355_REFACTOR_PARAMBIN_TO_5MS static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( HEAD_TRACK_DATA_HANDLE hHeadTrackData, +#ifdef FIX_355_REFACTOR_PARAMBIN_TO_5MS float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], const int16_t nBins, - float Rmat[3][3] ) -{ - int16_t slot, bin, ch; #else -static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( - HEAD_TRACK_DATA_HANDLE hHeadTrackData, float inIm[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float inRe[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const uint8_t firstSlot, const uint8_t slotEnd, const uint8_t nBins, +#endif float Rmat[3][3] ) { +#ifdef FIX_355_REFACTOR_PARAMBIN_TO_5MS + int16_t slot, bin, ch; +#else uint8_t slot, bin, ch; #endif float tmpVal; -- GitLab From de16a98ed9e913d1dbd3b6ce03e02af34d1cdca3 Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Fri, 12 May 2023 16:13:55 +0530 Subject: [PATCH 20/26] Made changes for Max MD bits calculation --- lib_com/ivas_cnst.h | 3 +++ lib_com/ivas_spar_com.c | 15 +++++++++++++-- lib_com/options.h | 1 + lib_dec/ivas_spar_md_dec.c | 6 ++++-- lib_enc/ivas_sba_enc.c | 14 +++++++++++++- lib_enc/ivas_spar_encoder.c | 7 ++++++- lib_enc/ivas_spar_md_enc.c | 7 ++++++- 7 files changed, 46 insertions(+), 7 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 228419b25d..edcfa1b230 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1690,6 +1690,9 @@ typedef enum #define IVAS_FB_BANDS_12 12 #define IVAS_FB_BANDS_20 20 #define IVAS_MAX_NUM_BANDS IVAS_FB_BANDS_12 +#ifdef ARITH_HUFF_CODER_CHANGES_1 +#define IVAS_MAX_NUM_BANDS_VLBR 6 +#endif #define IVAS_MAX_NUM_FB_BANDS IVAS_FB_BANDS_20 #define IVAS_FB_12_1MS_LEN ( IVAS_FB_12_1MS_48K_END_BINS_BAND_0 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_0 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_1 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_1 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_2 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_2 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_3 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_3 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_4 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_4 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_5 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_5 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_6 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_6 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_7 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_7 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_8 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_8 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_9 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_9 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_10 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_10 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_11 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_11 ) #define IVAS_16K_12BANDS_ACTIVE_BANDS 10 diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index 966f6c35d0..b7e82e7fd3 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -2198,10 +2198,21 @@ void ivas_spar_set_bitrate_config( pSpar_md_cfg->tgt_bits_per_blk -= md_coding_bits_header; pSpar_md_cfg->max_bits_per_blk -= md_coding_bits_header; - +#ifdef ARITH_HUFF_CODER_CHANGES_1 + if ( ivas_total_brate < IVAS_24k4 ) + { + pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS_VLBR ); + pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS_VLBR ); + } + else + { + pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); + pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); + } +#else pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); - +#endif pSpar_md_cfg->tgt_bits_per_blk += md_coding_bits_header; pSpar_md_cfg->max_bits_per_blk += md_coding_bits_header; diff --git a/lib_com/options.h b/lib_com/options.h index ab66559806..5112c4967e 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -193,6 +193,7 @@ #define FIX_445_SNS_BUGFIXES /* FhG: bug fix for spectral tilt in SNS computation + necessary update of codebooks and converison to fixedpoint-compatible tables */ #define ARITH_HUFF_CODER_CHANGES /* DLB: Optimization of metadata memory for Huffman and arithmetic coders */ +#define ARITH_HUFF_CODER_CHANGES_1 /* DLB: additional changes for Huffman and arithmetic coders*/ #define FIX_447_PARAMBIN_MASA_REGU_FAC /* Nokia: Issue 447: Fix issue by adjusting regularization factor minimum value. */ #define FIX_441_SBA_PARAMBIN_GAINS /* Nokia: Fix issue 441 by changing gains in SBA path of parametric binauralizer */ diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index e9810cc17b..897f13e353 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -525,9 +525,11 @@ ivas_error ivas_spar_md_dec_init( #ifdef SPAR_TUNING ivas_sba_get_spar_hoa_ch_ind( num_channels, hDecoderConfig->ivas_total_brate, hMdDec->HOA_md_ind ); #endif - +#ifdef ARITH_HUFF_CODER_CHANGES_1 + hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : ( ( hDecoderConfig->ivas_total_brate < IVAS_24k4 ) ? IVAS_MAX_NUM_BANDS_VLBR : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ) ); +#else hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - +#endif ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands #ifdef ARITH_HUFF_CODER_CHANGES , diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 4e0984b2da..adac8f8f46 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -266,8 +266,20 @@ int16_t ivas_sba_get_max_md_bits( Encoder_Struct *st_ivas ) { int16_t max_md_bits; - +#ifndef ARITH_HUFF_CODER_CHANGES max_md_bits = min( st_ivas->hQMetaData->metadata_max_bits + 1, 500 ); // TODO: remove 500 once max MD bits has been defined at all bitrates in DirAC +#else + int16_t max_bits; + if ( ( st_ivas->sba_analysis_order > 1 ) && ( st_ivas->hEncoderConfig->ivas_total_brate > IVAS_256k ) ) + { + max_bits = 2000; + } + else + { + max_bits = 500; + } + max_md_bits = min( st_ivas->hQMetaData->metadata_max_bits + 1, max_bits ); // TODO: remove 500 once max MD bits has been defined at all bitrates in DirAC +#endif if ( st_ivas->sba_mode == SBA_MODE_SPAR ) { max_md_bits += st_ivas->hSpar->hMdEnc->spar_md_cfg.max_md_bits_spar; diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 183614d039..8f8bb73601 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -733,7 +733,12 @@ static ivas_error ivas_spar_enc_process( } else { - ivas_spar_set_bitrate_config( &hSpar->hMdEnc->spar_md_cfg, table_idx, ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND + ivas_spar_set_bitrate_config( &hSpar->hMdEnc->spar_md_cfg, table_idx, +#ifndef ARITH_HUFF_CODER_CHANGES_1 + ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND +#else + ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : ( ivas_total_brate < IVAS_24k4 ? IVAS_MAX_NUM_BANDS_VLBR : SPAR_DIRAC_SPLIT_START_BAND ) +#endif #ifdef ARITH_HUFF_CODER_CHANGES , 1, hEncoderConfig->Opt_PCA_ON, diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index d746b5444d..c4bfb3b7d2 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -340,7 +340,12 @@ ivas_error ivas_spar_md_enc_init( #endif table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND + ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, +#ifndef ARITH_HUFF_CODER_CHANGES_1 + ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND +#else + ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : ( hEncoderConfig->ivas_total_brate < IVAS_24k4 ? IVAS_MAX_NUM_BANDS_VLBR : SPAR_DIRAC_SPLIT_START_BAND ) +#endif #ifdef ARITH_HUFF_CODER_CHANGES , 1, hEncoderConfig->Opt_PCA_ON, -- GitLab From 7a2a54c2286f8d6d077b39de5d9b1af34cfe5fbf Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Tue, 16 May 2023 12:58:17 +0530 Subject: [PATCH 21/26] Resolving merge conflicts --- lib_rend/ivas_dirac_dec_binaural_functions.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 182f15668f..06fd160bb2 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -3579,12 +3579,9 @@ static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( const uint8_t slotEnd, const uint8_t nBins, #endif -<<<<<<< HEAD -======= #ifdef JBM_TSM_ON_TCS const int16_t nSlots, #endif ->>>>>>> main float Rmat[3][3] ) { #ifdef FIX_355_REFACTOR_PARAMBIN_TO_5MS -- GitLab From 65c1d78b6749408f85dd5aa0734b82016bf8f031 Mon Sep 17 00:00:00 2001 From: rtyag Date: Thu, 18 May 2023 15:45:14 +1000 Subject: [PATCH 22/26] VLBR fixes and HO DIRAC fixes --- lib_com/ivas_cnst.h | 3 --- lib_com/ivas_prot.h | 4 ++++ lib_com/ivas_rom_com.c | 8 ++++++++ lib_com/ivas_spar_com.c | 26 ++++++++++++++++++++------ lib_com/options.h | 2 ++ lib_dec/ivas_spar_md_dec.c | 9 +++++---- lib_enc/ivas_sba_enc.c | 2 +- lib_enc/ivas_spar_encoder.c | 7 +++---- lib_enc/ivas_spar_md_enc.c | 6 +++--- 9 files changed, 46 insertions(+), 21 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index dacb3e555b..97080fb29e 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1791,9 +1791,6 @@ typedef enum #define IVAS_FB_BANDS_12 12 #define IVAS_FB_BANDS_20 20 #define IVAS_MAX_NUM_BANDS IVAS_FB_BANDS_12 -#ifdef ARITH_HUFF_CODER_CHANGES_1 -#define IVAS_MAX_NUM_BANDS_VLBR 6 -#endif #define IVAS_MAX_NUM_FB_BANDS IVAS_FB_BANDS_20 #define IVAS_FB_12_1MS_LEN ( IVAS_FB_12_1MS_48K_END_BINS_BAND_0 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_0 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_1 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_1 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_2 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_2 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_3 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_3 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_4 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_4 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_5 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_5 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_6 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_6 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_7 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_7 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_8 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_8 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_9 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_9 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_10 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_10 ) + ( IVAS_FB_12_1MS_48K_END_BINS_BAND_11 - IVAS_FB_12_1MS_48K_START_OFFSET_BAND_11 ) #define IVAS_16K_12BANDS_ACTIVE_BANDS 10 diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 9bdc94ea01..43a9db87b0 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -4476,6 +4476,10 @@ void ivas_spar_set_bitrate_config( ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ const int16_t table_idx, /* i : config. table index */ const int16_t num_bands /* i : number of bands */ +#ifdef ARITH_HUFF_CODER_CHANGES_1 + , + const int16_t dirac2spar_md_flag +#endif #ifdef ARITH_HUFF_CODER_CHANGES , const int16_t enc_flag, diff --git a/lib_com/ivas_rom_com.c b/lib_com/ivas_rom_com.c index a4c8283712..385ab52dc9 100644 --- a/lib_com/ivas_rom_com.c +++ b/lib_com/ivas_rom_com.c @@ -891,11 +891,19 @@ const ivas_spar_br_table_t ivas_spar_br_table_consts[IVAS_SPAR_BR_TABLE_LEN] = so minimum core-coder bitrate per channel can be min core-coder bitrates as per the table - AGC_BITS_PER_CH */ /* preferred tuning (3.2/4.9kbps) with/out TDD */ { 13200, 0, SBA_FOA_ORDER, FB, 24000, 1, WYXZ, 1, 0, +#ifdef FIX_487_LOWRATE_SBA_TUNING_FIX + { { 10000, 8150, 13150 } }, +#else { { 10000, 8300, 13150 } }, +#endif { { 15, 1, 5, 1 },{ 15, 1, 3, 1 },{ 7, 1, 3, 1 } }, 0, 0, 0 }, { 16400, 0, SBA_FOA_ORDER, FB, 24000, 1, WYXZ, 1, 0, +#ifdef FIX_487_LOWRATE_SBA_TUNING_FIX + { { 13200, 11350, 16350 } }, +#else { { 13200, 11500, 16350 } }, +#endif { { 15, 1, 5, 1 },{ 15, 1, 3, 1 },{ 7, 1, 3, 1 } }, 0, 0, 0 }, { 24400, 0, SBA_FOA_ORDER, FB, 24000, 1, WYXZ, 1, 0,{ { 16400, 14850, 24350 } }, { { 15, 1, 5, 1 },{ 15, 1, 3, 1 },{ 7, 1, 3, 1 } }, 0, 0, 0 }, diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index b7e82e7fd3..4cda031d61 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -2136,6 +2136,10 @@ void ivas_spar_set_bitrate_config( ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ const int16_t table_idx, /* i : config. table index */ const int16_t num_bands /* i : number of bands */ +#ifdef ARITH_HUFF_CODER_CHANGES_1 + , + const int16_t dirac2spar_md_flag +#endif #ifdef ARITH_HUFF_CODER_CHANGES , const int16_t enc_flag, @@ -2154,6 +2158,9 @@ void ivas_spar_set_bitrate_config( int16_t wc_coarse_strat; int16_t n_input, n_dmx, n_dec; int16_t quant_strat; +#endif +#ifdef ARITH_HUFF_CODER_CHANGES_1 + int16_t bands_bw; #endif pSpar_md_cfg->nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; @@ -2201,18 +2208,17 @@ void ivas_spar_set_bitrate_config( #ifdef ARITH_HUFF_CODER_CHANGES_1 if ( ivas_total_brate < IVAS_24k4 ) { - pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS_VLBR ); - pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS_VLBR ); + bands_bw = 2; } else { - pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); - pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); + bands_bw = 1; } -#else +#endif + pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); -#endif + pSpar_md_cfg->tgt_bits_per_blk += md_coding_bits_header; pSpar_md_cfg->max_bits_per_blk += md_coding_bits_header; @@ -2229,7 +2235,12 @@ void ivas_spar_set_bitrate_config( quant_strat = QUANT_STRAT_2; } +#ifdef ARITH_HUFF_CODER_CHANGES_1 + num_PR_bits_dirac_bands = ( dirac2spar_md_flag == 1 ) ? num_bands - SPAR_DIRAC_SPLIT_START_BAND : 0; + num_PR_bits_dirac_bands /= bands_bw; +#else num_PR_bits_dirac_bands = num_bands - SPAR_DIRAC_SPLIT_START_BAND; +#endif num_PR_bits_dirac_bands = max( 0, num_PR_bits_dirac_bands ); num_PR_bits_dirac_bands *= DIRAC_TO_SPAR_HBR_PRED_CHS; @@ -2243,6 +2254,9 @@ void ivas_spar_set_bitrate_config( bits_P = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][2] ) ) * ( n_dec ); wc_coarse_strat = bits_PR + bits_C + bits_P; wc_coarse_strat *= num_bands; +#ifdef ARITH_HUFF_CODER_CHANGES_1 + wc_coarse_strat /= bands_bw; +#endif wc_coarse_strat -= num_PR_bits_dirac_bands; wc_coarse_strat += md_coding_bits_header; diff --git a/lib_com/options.h b/lib_com/options.h index f3a390981d..7c0368540a 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -229,6 +229,8 @@ #define FIX_DTX_428 /* FhG: fix for issue 428, crash with DTX and bitrate switching */ +#define FIX_487_LOWRATE_SBA_TUNING_FIX + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index c7f370820a..e548e49f04 100755 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -525,12 +525,13 @@ ivas_error ivas_spar_md_dec_init( #ifdef SPAR_TUNING ivas_sba_get_spar_hoa_ch_ind( num_channels, hDecoderConfig->ivas_total_brate, hMdDec->HOA_md_ind ); #endif -#ifdef ARITH_HUFF_CODER_CHANGES_1 - hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : ( ( hDecoderConfig->ivas_total_brate < IVAS_24k4 ) ? IVAS_MAX_NUM_BANDS_VLBR : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ) ); -#else + hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); -#endif ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands +#ifdef ARITH_HUFF_CODER_CHANGES_1 + , + hMdDec->spar_hoa_dirac2spar_md_flag +#endif #ifdef ARITH_HUFF_CODER_CHANGES , 0, 0, 0 diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index fb11600f48..8659e7c3e5 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -292,7 +292,7 @@ int16_t ivas_sba_get_max_md_bits( Encoder_Struct *st_ivas ) { int16_t max_md_bits; -#ifndef ARITH_HUFF_CODER_CHANGES +#ifndef ARITH_HUFF_CODER_CHANGES_1 max_md_bits = min( st_ivas->hQMetaData->metadata_max_bits + 1, 500 ); // TODO: remove 500 once max MD bits has been defined at all bitrates in DirAC #else int16_t max_bits; diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 8f8bb73601..b910d6fd9f 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -613,7 +613,6 @@ static ivas_error ivas_spar_enc_process( /*-----------------------------------------------------------------------------------------* * DirAC encoding *-----------------------------------------------------------------------------------------*/ - /*tyagiri: TODO: HODIRAC should be disabled for 256 kbps and outputs should be BE w.r.t baseline*/ ivas_dirac_param_est_enc( st_ivas->hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, st_ivas->sba_mode #ifdef HODIRAC , @@ -734,10 +733,10 @@ static ivas_error ivas_spar_enc_process( else { ivas_spar_set_bitrate_config( &hSpar->hMdEnc->spar_md_cfg, table_idx, -#ifndef ARITH_HUFF_CODER_CHANGES_1 ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND -#else - ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : ( ivas_total_brate < IVAS_24k4 ? IVAS_MAX_NUM_BANDS_VLBR : SPAR_DIRAC_SPLIT_START_BAND ) +#ifdef ARITH_HUFF_CODER_CHANGES_1 + , + hSpar->hMdEnc->spar_hoa_dirac2spar_md_flag #endif #ifdef ARITH_HUFF_CODER_CHANGES , diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index c4bfb3b7d2..35bfca23fb 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -341,10 +341,10 @@ ivas_error ivas_spar_md_enc_init( table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, -#ifndef ARITH_HUFF_CODER_CHANGES_1 ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND -#else - ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : ( hEncoderConfig->ivas_total_brate < IVAS_24k4 ? IVAS_MAX_NUM_BANDS_VLBR : SPAR_DIRAC_SPLIT_START_BAND ) +#ifdef ARITH_HUFF_CODER_CHANGES_1 + , + hMdEnc->spar_hoa_dirac2spar_md_flag #endif #ifdef ARITH_HUFF_CODER_CHANGES , -- GitLab From 5ee9f16dcce5b0fc5502d71850a8efcaa698e05f Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Fri, 19 May 2023 12:59:12 +0530 Subject: [PATCH 23/26] Minor change --- lib_enc/ivas_sba_enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 8659e7c3e5..36c3ceaa1a 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -296,7 +296,7 @@ int16_t ivas_sba_get_max_md_bits( max_md_bits = min( st_ivas->hQMetaData->metadata_max_bits + 1, 500 ); // TODO: remove 500 once max MD bits has been defined at all bitrates in DirAC #else int16_t max_bits; - if ( ( st_ivas->sba_analysis_order > 1 ) && ( st_ivas->hEncoderConfig->ivas_total_brate > IVAS_256k ) ) + if ( ivas_get_hodirac_flag( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ) ) { max_bits = 2000; } -- GitLab From 97d501e0ea6dfff39819dae13298c68c02e1475d Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 22 May 2023 13:37:15 +1000 Subject: [PATCH 24/26] comment the assert until we have final number for dirac MD limit --- lib_enc/ivas_spar_encoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index a8132b2a4b..439c8ba1ba 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -1119,7 +1119,7 @@ static ivas_error ivas_spar_enc_process( #ifdef ARITH_HUFF_CODER_CHANGES total_md_bits = hMetaData->nb_bits_tot - start_nb_bits; total_sba_bits = ivas_sba_get_max_md_bits( st_ivas ); - assert( total_md_bits <= total_sba_bits ); + // assert( total_md_bits <= total_sba_bits ); #endif return error; -- GitLab From be6b875f843eb56e39e2f57e3b3b8489939e70b4 Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Mon, 22 May 2023 10:32:03 +0530 Subject: [PATCH 25/26] Removed the switch ARITH_HUFF_CODER_CHANGES_1 [x] Merged it with the switch ARITH_HUFF_CODER_CHANGES --- lib_com/ivas_prot.h | 5 +---- lib_com/ivas_spar_com.c | 15 ++------------- lib_com/options.h | 1 - lib_dec/ivas_spar_md_dec.c | 5 +---- lib_enc/ivas_sba_enc.c | 4 ---- lib_enc/ivas_spar_encoder.c | 5 +---- lib_enc/ivas_spar_md_enc.c | 5 +---- 7 files changed, 6 insertions(+), 34 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 68e8bbc350..ea9d86e25b 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -4521,12 +4521,9 @@ void ivas_spar_set_bitrate_config( ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ const int16_t table_idx, /* i : config. table index */ const int16_t num_bands /* i : number of bands */ -#ifdef ARITH_HUFF_CODER_CHANGES_1 - , - const int16_t dirac2spar_md_flag -#endif #ifdef ARITH_HUFF_CODER_CHANGES , + const int16_t dirac2spar_md_flag, const int16_t enc_flag, const int16_t pca_flag, const int16_t agc_flag diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index d87588046f..ec262608a5 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -2136,12 +2136,9 @@ void ivas_spar_set_bitrate_config( ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ const int16_t table_idx, /* i : config. table index */ const int16_t num_bands /* i : number of bands */ -#ifdef ARITH_HUFF_CODER_CHANGES_1 - , - const int16_t dirac2spar_md_flag -#endif #ifdef ARITH_HUFF_CODER_CHANGES , + const int16_t dirac2spar_md_flag, const int16_t enc_flag, const int16_t pca_flag, const int16_t agc_flag @@ -2158,8 +2155,6 @@ void ivas_spar_set_bitrate_config( int16_t wc_coarse_strat; int16_t n_input, n_dmx, n_dec; int16_t quant_strat; -#endif -#ifdef ARITH_HUFF_CODER_CHANGES_1 int16_t bands_bw; #endif pSpar_md_cfg->nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; @@ -2205,7 +2200,7 @@ void ivas_spar_set_bitrate_config( pSpar_md_cfg->tgt_bits_per_blk -= md_coding_bits_header; pSpar_md_cfg->max_bits_per_blk -= md_coding_bits_header; -#ifdef ARITH_HUFF_CODER_CHANGES_1 +#ifdef ARITH_HUFF_CODER_CHANGES if ( ivas_total_brate < IVAS_24k4 ) { bands_bw = 2; @@ -2235,12 +2230,8 @@ void ivas_spar_set_bitrate_config( quant_strat = QUANT_STRAT_2; } -#ifdef ARITH_HUFF_CODER_CHANGES_1 num_PR_bits_dirac_bands = ( dirac2spar_md_flag == 1 ) ? num_bands - SPAR_DIRAC_SPLIT_START_BAND : 0; num_PR_bits_dirac_bands /= bands_bw; -#else - num_PR_bits_dirac_bands = num_bands - SPAR_DIRAC_SPLIT_START_BAND; -#endif num_PR_bits_dirac_bands = max( 0, num_PR_bits_dirac_bands ); num_PR_bits_dirac_bands *= DIRAC_TO_SPAR_HBR_PRED_CHS; @@ -2254,9 +2245,7 @@ void ivas_spar_set_bitrate_config( bits_P = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][2] ) ) * ( n_dec ); wc_coarse_strat = bits_PR + bits_C + bits_P; wc_coarse_strat *= num_bands; -#ifdef ARITH_HUFF_CODER_CHANGES_1 wc_coarse_strat /= bands_bw; -#endif wc_coarse_strat -= num_PR_bits_dirac_bands; wc_coarse_strat += md_coding_bits_header; diff --git a/lib_com/options.h b/lib_com/options.h index eec4463125..61029e80eb 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -193,7 +193,6 @@ #define LBR_SBA_DIRAC_FIX /* DLB: Bug fix for DirAC at low bitrates */ #define ARITH_HUFF_CODER_CHANGES /* DLB: Optimization of metadata memory for Huffman and arithmetic coders */ -#define ARITH_HUFF_CODER_CHANGES_1 /* DLB: additional changes for Huffman and arithmetic coders*/ #define FIX_445_SNS_BUGFIXES /* FhG: bug fix for spectral tilt in SNS computation + necessary update of codebooks and converison to fixedpoint-compatible tables */ #define FIX_447_PARAMBIN_MASA_REGU_FAC /* Nokia: Issue 447: Fix issue by adjusting regularization factor minimum value. */ #define FIX_441_SBA_PARAMBIN_GAINS /* Nokia: Fix issue 441 by changing gains in SBA path of parametric binauralizer */ diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index 3545a10f19..b1948b6400 100755 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -528,12 +528,9 @@ ivas_error ivas_spar_md_dec_init( hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands -#ifdef ARITH_HUFF_CODER_CHANGES_1 - , - hMdDec->spar_hoa_dirac2spar_md_flag -#endif #ifdef ARITH_HUFF_CODER_CHANGES , + hMdDec->spar_hoa_dirac2spar_md_flag, 0, 0, 0 #endif ); diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 36c3ceaa1a..f66b8c3d09 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -292,9 +292,6 @@ int16_t ivas_sba_get_max_md_bits( Encoder_Struct *st_ivas ) { int16_t max_md_bits; -#ifndef ARITH_HUFF_CODER_CHANGES_1 - max_md_bits = min( st_ivas->hQMetaData->metadata_max_bits + 1, 500 ); // TODO: remove 500 once max MD bits has been defined at all bitrates in DirAC -#else int16_t max_bits; if ( ivas_get_hodirac_flag( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ) ) { @@ -305,7 +302,6 @@ int16_t ivas_sba_get_max_md_bits( max_bits = 500; } max_md_bits = min( st_ivas->hQMetaData->metadata_max_bits + 1, max_bits ); // TODO: remove 500 once max MD bits has been defined at all bitrates in DirAC -#endif if ( st_ivas->sba_mode == SBA_MODE_SPAR ) { max_md_bits += st_ivas->hSpar->hMdEnc->spar_md_cfg.max_md_bits_spar; diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 439c8ba1ba..0fa22ace29 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -731,12 +731,9 @@ static ivas_error ivas_spar_enc_process( { ivas_spar_set_bitrate_config( &hSpar->hMdEnc->spar_md_cfg, table_idx, ( hSpar->hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND -#ifdef ARITH_HUFF_CODER_CHANGES_1 - , - hSpar->hMdEnc->spar_hoa_dirac2spar_md_flag -#endif #ifdef ARITH_HUFF_CODER_CHANGES , + hSpar->hMdEnc->spar_hoa_dirac2spar_md_flag, 1, hEncoderConfig->Opt_PCA_ON, hSpar->AGC_Enable #endif diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index e371367da3..d7a22af54f 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -342,12 +342,9 @@ ivas_error ivas_spar_md_enc_init( ivas_spar_set_bitrate_config( &hMdEnc->spar_md_cfg, table_idx, ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND -#ifdef ARITH_HUFF_CODER_CHANGES_1 - , - hMdEnc->spar_hoa_dirac2spar_md_flag -#endif #ifdef ARITH_HUFF_CODER_CHANGES , + hMdEnc->spar_hoa_dirac2spar_md_flag, 1, hEncoderConfig->Opt_PCA_ON, #ifndef DEBUG_AGC_ENCODER_CMD_OPTION ivas_agc_enc_get_flag( ivas_spar_br_table_consts[table_idx].nchan_transport ) -- GitLab From 4e277b68fb0449c30ef3355439ef149bf5dcced6 Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Mon, 22 May 2023 10:47:34 +0530 Subject: [PATCH 26/26] Resolving build warnings --- lib_enc/ivas_spar_encoder.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 0fa22ace29..d1727cfb97 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -458,7 +458,9 @@ static ivas_error ivas_spar_enc_process( #endif #ifdef ARITH_HUFF_CODER_CHANGES - int16_t start_nb_bits, total_md_bits, total_sba_bits; + int16_t start_nb_bits; + /*Commented for now*/ + //int16_t total_md_bits, total_sba_bits; #endif push_wmops( "ivas_spar_enc_process" ); @@ -1114,9 +1116,10 @@ static ivas_error ivas_spar_enc_process( pop_wmops(); #ifdef ARITH_HUFF_CODER_CHANGES - total_md_bits = hMetaData->nb_bits_tot - start_nb_bits; + /*Commented for now*/ + /*total_md_bits = hMetaData->nb_bits_tot - start_nb_bits; total_sba_bits = ivas_sba_get_max_md_bits( st_ivas ); - // assert( total_md_bits <= total_sba_bits ); + assert( total_md_bits <= total_sba_bits );*/ #endif return error; -- GitLab