Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 lib_enc/ivas_spar_encoder.c +0 −1 Original line number Diff line number Diff line Loading @@ -236,7 +236,6 @@ ivas_error ivas_spar_enc_open( #ifdef SBA_BR_SWITCHING_CLEAN_UP } #endif /*-----------------------------------------------------------------* * Final assignment *-----------------------------------------------------------------*/ Loading lib_enc/ivas_spar_md_enc.c +58 −2 Original line number Diff line number Diff line Loading @@ -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 ) Loading Loading @@ -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; Loading Loading @@ -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 ); Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 ) ) Loading lib_enc/ivas_stat_enc.h +4 −2 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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; Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -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
lib_enc/ivas_spar_encoder.c +0 −1 Original line number Diff line number Diff line Loading @@ -236,7 +236,6 @@ ivas_error ivas_spar_enc_open( #ifdef SBA_BR_SWITCHING_CLEAN_UP } #endif /*-----------------------------------------------------------------* * Final assignment *-----------------------------------------------------------------*/ Loading
lib_enc/ivas_spar_md_enc.c +58 −2 Original line number Diff line number Diff line Loading @@ -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 ) Loading Loading @@ -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; Loading Loading @@ -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 ); Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 ) ) Loading
lib_enc/ivas_stat_enc.h +4 −2 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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; Loading