Loading lib_com/ivas_cnst.h +2 −4 Original line number Diff line number Diff line Loading @@ -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 /*----------------------------------------------------------------------------------* Loading Loading @@ -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 */ Loading Loading @@ -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 ) Loading lib_com/ivas_dirac_com.c +73 −1 Original line number Diff line number Diff line Loading @@ -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() Loading Loading @@ -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; Loading Loading @@ -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; } Loading lib_com/ivas_prot.h +22 −6 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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 */ Loading Loading @@ -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 ); Loading Loading @@ -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( Loading Loading @@ -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 Loading lib_com/ivas_rom_com.h +0 −1 Original line number Diff line number Diff line Loading @@ -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 *----------------------------------------------------------------------------------*/ Loading lib_com/ivas_spar_com.c +44 −35 Original line number Diff line number Diff line Loading @@ -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 ) { Loading @@ -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; Loading Loading @@ -2160,12 +2161,8 @@ void ivas_spar_set_bitrate_config( #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 ) ) /*calculate the actual worst case bits*/ if ( ivas_total_brate >= BRATE_SPAR_Q_STRAT ) { quant_strat = QUANT_STRAT_0; } Loading @@ -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; } } else { agc_bits = AGC_SIGNALLING_BITS; } if ( wc_coarse_strat > table_cal_wc ) 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; Loading Loading
lib_com/ivas_cnst.h +2 −4 Original line number Diff line number Diff line Loading @@ -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 /*----------------------------------------------------------------------------------* Loading Loading @@ -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 */ Loading Loading @@ -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 ) Loading
lib_com/ivas_dirac_com.c +73 −1 Original line number Diff line number Diff line Loading @@ -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() Loading Loading @@ -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; Loading Loading @@ -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; } Loading
lib_com/ivas_prot.h +22 −6 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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 */ Loading Loading @@ -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 ); Loading Loading @@ -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( Loading Loading @@ -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 Loading
lib_com/ivas_rom_com.h +0 −1 Original line number Diff line number Diff line Loading @@ -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 *----------------------------------------------------------------------------------*/ Loading
lib_com/ivas_spar_com.c +44 −35 Original line number Diff line number Diff line Loading @@ -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 ) { Loading @@ -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; Loading Loading @@ -2160,12 +2161,8 @@ void ivas_spar_set_bitrate_config( #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 ) ) /*calculate the actual worst case bits*/ if ( ivas_total_brate >= BRATE_SPAR_Q_STRAT ) { quant_strat = QUANT_STRAT_0; } Loading @@ -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; } } else { agc_bits = AGC_SIGNALLING_BITS; } if ( wc_coarse_strat > table_cal_wc ) 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; Loading