From 9c79250239013bdcb63c197994332e062157d647 Mon Sep 17 00:00:00 2001 From: vaclav Date: Mon, 5 Jun 2023 15:21:38 +0200 Subject: [PATCH 1/3] avoid double to single point float data type conversions --- lib_enc/ivas_mc_paramupmix_enc.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib_enc/ivas_mc_paramupmix_enc.c b/lib_enc/ivas_mc_paramupmix_enc.c index c5ee2950db..e50627cedd 100644 --- a/lib_enc/ivas_mc_paramupmix_enc.c +++ b/lib_enc/ivas_mc_paramupmix_enc.c @@ -696,9 +696,9 @@ static void ivas_mc_paramupmix_dmx( for ( l = 0; l < input_frame; l++ ) { /* mid */ - hMCParamUpmix->midside[i][0][l] = ( data_f[chan1s[i]][l] + data_f[chan2s[i]][l] ) * (float) 0.5; + hMCParamUpmix->midside[i][0][l] = ( data_f[chan1s[i]][l] + data_f[chan2s[i]][l] ) * 0.5f; /* side */ - hMCParamUpmix->midside[i][1][l] = ( data_f[chan1s[i]][l] - data_f[chan2s[i]][l] ) * (float) 0.5; + hMCParamUpmix->midside[i][1][l] = ( data_f[chan1s[i]][l] - data_f[chan2s[i]][l] ) * 0.5f; data_f[chanOut[i]][l] = hMCParamUpmix->midside[i][0][l]; } } @@ -831,14 +831,14 @@ static void ivas_mc_paramupmix_param_est_enc( rxy = hMCParamUpmix->cov_real[b][1][0][bnd]; ryy = hMCParamUpmix->cov_real[b][1][1][bnd]; cmat = rxy / ( ryy + EPSILON ); - alphas[b][bnd] = (float) 2.0 * cmat - (float) 1.0; + alphas[b][bnd] = 2.0f * cmat - 1.0f; rxx = hMCParamUpmix->cov_real[b][0][0][bnd]; rxxest = cmat * cmat * ryy; drxx = rxx - rxxest; - drxx = (float) max( drxx, 0.0 ); - wetaux = (float) sqrt( drxx / ( ryy + EPSILON ) ); - betas[b][bnd] = (float) 2.0 * wetaux; + drxx = max( drxx, 0.0f ); + wetaux = sqrtf( drxx / ( ryy + EPSILON ) ); + betas[b][bnd] = 2.0f * wetaux; } } #ifdef FIX_468_16KHZ_PUPMIX @@ -848,8 +848,8 @@ static void ivas_mc_paramupmix_param_est_enc( { for ( bnd = maxbands; bnd < IVAS_MAX_NUM_BANDS; bnd++ ) { - alphas[b][bnd] = 0.0; - betas[b][bnd] = 0.0; + alphas[b][bnd] = 0.0f; + betas[b][bnd] = 0.0f; } } } -- GitLab From db6fead21ba89c89ff260bce408ce4071e309919 Mon Sep 17 00:00:00 2001 From: vaclav Date: Mon, 5 Jun 2023 15:51:46 +0200 Subject: [PATCH 2/3] formal improvements to the Param Upmx MC code --- lib_com/ivas_prot.h | 54 +++++----- lib_com/ivas_rom_com.c | 11 +++ lib_com/ivas_rom_com.h | 7 ++ lib_dec/ivas_dec.c | 2 +- lib_dec/ivas_mc_paramupmix_dec.c | 128 ++++++++++++------------ lib_enc/ivas_mc_paramupmix_enc.c | 163 ++++++++++++++++++------------- lib_enc/ivas_mct_enc.c | 4 +- 7 files changed, 207 insertions(+), 162 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 2804668e0f..6e17622406 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -3960,7 +3960,8 @@ void ivas_dirac_dec_compute_directional_responses( void ivas_dirac_dec_get_frequency_axis( float *frequency_axis, /* o : array of center frequencies of a real filter bank */ const int32_t output_Fs, /* i : sampling frequency */ - const int16_t num_freq_bands ); /* i : number of frequency bands */ + const int16_t num_freq_bands /* i : number of frequency bands */ +); void calculate_hodirac_sector_parameters( #ifdef FIX_485_STATIC_BUFFERS @@ -3968,55 +3969,50 @@ void calculate_hodirac_sector_parameters( #endif float RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX],/* i : signal vector (L+1)^2 x N_bins, real part */ float ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX],/* i : signal vector, imaginary part */ - const float beta, /* i : forgetting factor for average filtering */ - const int16_t *band_grouping, /* i : indices of band groups */ - const int16_t N_bands, /* i : number of bands (groups) */ - const int16_t enc_param_start_band, /* i : first band to process */ - float *azi, /* o : array of sector azimuth angles, flat */ - float *ele, /* o : array of sector elevation angles, flat */ - float *diff, /* o : array of sector diffuseness values, flat */ - float *ene /* o : array of sector energy values, flat */ + const float beta, /* i : forgetting factor for average filtering */ + const int16_t *band_grouping, /* i : indices of band groups */ + const int16_t N_bands, /* i : number of bands (groups) */ + const int16_t enc_param_start_band, /* i : first band to process */ + float *azi, /* o : array of sector azimuth angles, flat */ + float *ele, /* o : array of sector elevation angles, flat */ + float *diff, /* o : array of sector diffuseness values, flat */ + float *ene /* o : array of sector energy values, flat */ ); void ivas_mc_paramupmix_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ - BSTR_ENC_HANDLE hMetaData, /* i/o: IVAS Metadata bitstream handle */ - float data_f[][L_FRAME48k], /* i/o: input: CICP6, CICP12, CICP14, CICP16 or CICP19 MC data */ - const int16_t input_frame /* i : input frame length */ + Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: IVAS Metadata bitstream handle */ + float data_f[][L_FRAME48k], /* i/o: input: CICP6, CICP12, CICP14, CICP16 or CICP19 MC data */ + const int16_t input_frame /* i : input frame length */ ); ivas_error ivas_mc_paramupmix_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ + Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ); void ivas_mc_paramupmix_enc_close( - MC_PARAMUPMIX_ENC_HANDLE *hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ - const int32_t sampling_rate + MC_PARAMUPMIX_ENC_HANDLE *hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ + const int32_t input_Fs /* i : input sampling rate */ ); void ivas_mc_paramupmix_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ -); - -int16_t ivas_mc_paramupmix_getNumTransportChannels( - void + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels/DirAC output */ ); ivas_error ivas_mc_paramupmix_dec_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ + Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ); void ivas_mc_paramupmix_dec_close( - MC_PARAMUPMIX_DEC_HANDLE *hMCParamUpmix_out /* i/o: Parametric MC decoder handle */ + MC_PARAMUPMIX_DEC_HANDLE *hMCParamUpmix_out /* i/o: Parametric MC decoder handle */ ); void ivas_mc_paramupmix_dec_read_BS( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - Decoder_State *st, /* i/o: decoder state structure */ - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, /* i/o: decoder MC Param-Upmix handle */ - int16_t *nb_bits /* o : number of bits written */ + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + Decoder_State *st, /* i/o: decoder state structure */ + MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, /* i/o: decoder MC Param-Upmix handle */ + int16_t *nb_bits /* o : number of bits written */ ); void ivas_param_mc_metadata_open( diff --git a/lib_com/ivas_rom_com.c b/lib_com/ivas_rom_com.c index 9f67c602f6..5c0d9c5809 100644 --- a/lib_com/ivas_rom_com.c +++ b/lib_com/ivas_rom_com.c @@ -2535,6 +2535,17 @@ const uint16_t ivas_param_mc_sym_freq_ild_delta_combined_48_16bits[2 * PARAM_MC_ }; +/*----------------------------------------------------------------------------------* + * Parametric Upmix MC ROM tables + *----------------------------------------------------------------------------------*/ + +const int16_t ivas_param_upmx_mx_qmap[2][33] = +{ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, + { 0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4, 3, 2, 1, 0 } +}; + + /*----------------------------------------------------------------------------------* * MASA ROM tables *----------------------------------------------------------------------------------*/ diff --git a/lib_com/ivas_rom_com.h b/lib_com/ivas_rom_com.h index a6437565c9..00a8334947 100644 --- a/lib_com/ivas_rom_com.h +++ b/lib_com/ivas_rom_com.h @@ -261,6 +261,13 @@ extern const uint16_t ivas_param_mc_cum_freq_icc_delta_combined_48_16bits[2 * PA extern const uint16_t ivas_param_mc_sym_freq_icc_delta_combined_48_16bits[2 * PARAM_MC_SZ_ICC_QUANTIZER - 1]; +/*----------------------------------------------------------------------------------* + * Parametric Upmix MC ROM tables + *----------------------------------------------------------------------------------*/ + +extern const int16_t ivas_param_upmx_mx_qmap[2][33]; + + /*----------------------------------------------------------------------------------* * MASA ROM tables *----------------------------------------------------------------------------------*/ diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 82f03fdb3b..c22e9a06d2 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -627,7 +627,7 @@ ivas_error ivas_dec( { ivas_lfe_dec( st_ivas->hLFE, st, output_frame, st_ivas->bfi, output_lfe_ch ); - ivas_mc_paramupmix_dec_read_BS( ivas_total_brate, st, st_ivas, st_ivas->hMCParamUpmix, &nb_bits_metadata[0] ); + ivas_mc_paramupmix_dec_read_BS( st_ivas, st, st_ivas->hMCParamUpmix, &nb_bits_metadata[0] ); if ( ( error = ivas_mct_dec( st_ivas, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) { diff --git a/lib_dec/ivas_mc_paramupmix_dec.c b/lib_dec/ivas_mc_paramupmix_dec.c index 346868ab6a..37da2c702e 100644 --- a/lib_dec/ivas_mc_paramupmix_dec.c +++ b/lib_dec/ivas_mc_paramupmix_dec.c @@ -52,19 +52,21 @@ /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -static void ps_pred_process( MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, float qmf_mod_re[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_mod_im[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_side_re[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_side_im[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], int16_t ch ); + +static void ps_pred_process( MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, float qmf_mod_re[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_mod_im[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_side_re[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_side_im[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const int16_t ch ); static void paramupmix_td_decorr_process( ivas_td_decorr_state_t *hTdDecorr[], float pcm_in[][L_FRAME48k], float **pp_out_pcm, const int16_t output_frame ); static int huff_read( Decoder_State *st, const int16_t ( *ht )[2] ); -static void huffman_decode( Decoder_State *st, int16_t nv, int16_t ivStart, PAR_TYPE parType, QUANT_TYPE quant_type, int16_t bNoDt, int32_t *vq ); +static void huffman_decode( Decoder_State *st, const int16_t nv, const int16_t ivStart, PAR_TYPE parType, QUANT_TYPE quant_type, const int16_t bNoDt, int32_t *vq ); + +static void dequant_alpha( const int16_t nv, const int16_t ivStart, const QUANT_TYPE quant_type, int32_t *vq, float *v ); -static void dequant_alpha( int16_t nv, int16_t ivStart, QUANT_TYPE quant_type, int32_t *vq, float *v ); +static void dequant_beta( const int16_t nv, const int16_t ivStart, const QUANT_TYPE quant_type, int32_t *aq, int32_t *bq, float *beta ); -static void dequant_beta( int16_t nv, int16_t ivStart, QUANT_TYPE quant_type, int32_t *aq, int32_t *bq, float *beta ); +static void get_ec_data( Decoder_State *st, const PAR_TYPE parType, const QUANT_TYPE quant_type, const int16_t nParBand, const int16_t parBandStart, int32_t *parQ, int32_t *alphaQEnv, float ab[IVAS_MAX_NUM_BANDS] ); -static void get_ec_data( Decoder_State *st, PAR_TYPE parType, QUANT_TYPE quant_type, int16_t nParBand, int16_t parBandStart, int32_t *parQ, int32_t *alphaQEnv, float ab[IVAS_MAX_NUM_BANDS] ); /*------------------------------------------------------------------------- * ivas_mc_paramupmix_dec_read_BS() @@ -73,11 +75,10 @@ static void get_ec_data( Decoder_State *st, PAR_TYPE parType, QUANT_TYPE quant_t *------------------------------------------------------------------------*/ void ivas_mc_paramupmix_dec_read_BS( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - Decoder_State *st, /* i/o: decoder state structure */ - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, /* i/o: decoder MC Param-Upmix handle */ - int16_t *nb_bits /* o : number of bits written */ + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + Decoder_State *st0, /* i/o: decoder state structure */ + MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, /* i/o: decoder MC Param-Upmix handle */ + int16_t *nb_bits /* o : number of bits written */ ) { int16_t i, k; @@ -89,7 +90,7 @@ void ivas_mc_paramupmix_dec_read_BS( push_wmops( "mc_paramupmix_read_bs" ); *nb_bits = 0; - if ( st->bfi ) + if ( st0->bfi ) { for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) { @@ -103,31 +104,31 @@ void ivas_mc_paramupmix_dec_read_BS( } else /* if (!st->bfi) */ { - bit_stream_orig = st->bit_stream; - next_bit_pos_orig = st->next_bit_pos; - last_bit_pos = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - 1 ); + bit_stream_orig = st0->bit_stream; + next_bit_pos_orig = st0->next_bit_pos; + last_bit_pos = (int16_t) ( ( st_ivas->hDecoderConfig->ivas_total_brate / FRAMES_PER_SEC ) - 1 ); nb_bits_read_orig = 0; last_bit_pos -= nb_bits_read_orig; /* reverse the bitstream for easier reading of indices */ for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) { bstr_meta[i] = st_ivas->bit_stream[last_bit_pos - i]; } - st->bit_stream = bstr_meta; - st->next_bit_pos = 0; - st->bits_frame = min( MAX_BITS_METADATA, last_bit_pos + 1 ); - st->total_brate = st_ivas->hDecoderConfig->ivas_total_brate; /* to avoid BER detect */ + st0->bit_stream = bstr_meta; + st0->next_bit_pos = 0; + st0->bits_frame = min( MAX_BITS_METADATA, last_bit_pos + 1 ); + st0->total_brate = st_ivas->hDecoderConfig->ivas_total_brate; /* to avoid BER detect */ for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) { - get_ec_data( st, ALPHA, FINE /*quant_type*/, IVAS_MAX_NUM_BANDS /*nParBand*/, + get_ec_data( st0, ALPHA, FINE /*quant_type*/, IVAS_MAX_NUM_BANDS /*nParBand*/, 0 /*parBandStart*/, hMCParamUpmix->alpha_quant[i], alpha_quant, hMCParamUpmix->alphas[i] ); - get_ec_data( st, BETA, FINE /*quant_type*/, IVAS_MAX_NUM_BANDS /*nParBand*/, + get_ec_data( st0, BETA, FINE /*quant_type*/, IVAS_MAX_NUM_BANDS /*nParBand*/, 0 /*parBandStart*/, hMCParamUpmix->beta_quant[i], alpha_quant, hMCParamUpmix->betas[i] ); } - *nb_bits += st->next_bit_pos; - st->bit_stream = bit_stream_orig; - st->next_bit_pos = next_bit_pos_orig; + *nb_bits += st0->next_bit_pos; + st0->bit_stream = bit_stream_orig; + st0->next_bit_pos = next_bit_pos_orig; if ( hMCParamUpmix->first_frame ) { @@ -145,14 +146,16 @@ void ivas_mc_paramupmix_dec_read_BS( return; } + /*------------------------------------------------------------------------- * ivas_mc_paramupmix_dec() * * MC ParamUpmix decoding process *------------------------------------------------------------------------*/ + void ivas_mc_paramupmix_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels */ + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + float output_f[][L_FRAME48k] /* i/o: synthesized core-coder transport channels */ ) { MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix; @@ -288,17 +291,6 @@ void ivas_mc_paramupmix_dec( return; } -/*------------------------------------------------------------------------- - * ivas_mc_paramupmix_getNumTransportChannels() - * - * - *------------------------------------------------------------------------*/ -int16_t ivas_mc_paramupmix_getNumTransportChannels() -{ - int16_t nchan_transport; - nchan_transport = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; /* 5.1.2 */ - return nchan_transport; -} /*------------------------------------------------------------------------- * ivas_mc_paramupmix_dec_open() @@ -329,7 +321,7 @@ ivas_error ivas_mc_paramupmix_dec_open( output_Fs = st_ivas->hDecoderConfig->output_Fs; hMCParamUpmix->first_frame = 1; - st_ivas->nchan_transport = ivas_mc_paramupmix_getNumTransportChannels(); + st_ivas->nchan_transport = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; nchan_transport = st_ivas->nchan_transport; switch ( nchan_transport ) @@ -344,6 +336,7 @@ ivas_error ivas_mc_paramupmix_dec_open( assert( 0 && "Number of TC not supported for MC ParamUpmix!" ); #endif } + /*-----------------------------------------------------------------* * set input parameters *-----------------------------------------------------------------*/ @@ -369,6 +362,7 @@ ivas_error ivas_mc_paramupmix_dec_open( return error; } + /*------------------------------------------------------------------------- * ivas_mc_paramupmix_dec_close() * @@ -403,6 +397,7 @@ void ivas_mc_paramupmix_dec_close( return; } + /*****************************************************************************************/ /* local functions */ /*****************************************************************************************/ @@ -413,7 +408,7 @@ static void ps_pred_process( float qmf_mod_im[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_side_re[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* in/out */ float qmf_side_im[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - int16_t ch ) + const int16_t ch ) { float vmre, vmim, vsre, vsim; int16_t iqmf, ipar, ismp, iismp; @@ -423,7 +418,7 @@ static void ps_pred_process( float *alpha_prev = hMCParamUpmix->alpha_prev[ch]; float *beta_prev = hMCParamUpmix->beta_prev[ch]; - int16_t qmf_to_par_band[] = { + const int16_t qmf_to_par_band[] = { 0, 1, 2, 3, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, @@ -466,8 +461,11 @@ static void ps_pred_process( alpha1 = alpha2; beta1 = beta2; } + + return; } + static void paramupmix_td_decorr_process( ivas_td_decorr_state_t *hTdDecorr[], /* i/o: SPAR Covar. decoder handle */ float pcm_in[][L_FRAME48k], /* i : input audio channels */ @@ -514,6 +512,7 @@ static void paramupmix_td_decorr_process( return; } + static int huff_read( Decoder_State *st, const int16_t ( *ht )[2] ) @@ -531,19 +530,19 @@ static int huff_read( return -( node + 1 ); } + static void huffman_decode( Decoder_State *st, - int16_t nv, - int16_t ivStart, - PAR_TYPE parType, - QUANT_TYPE quant_type, - int16_t bNoDt, + const int16_t nv, + const int16_t ivStart, + const PAR_TYPE parType, + const QUANT_TYPE quant_type, + const int16_t bNoDt, int32_t *vq ) { const int16_t( *huff_node_table )[2]; int16_t iv, bdt, nquant, offset; - nquant = 0; switch ( parType ) { @@ -568,6 +567,7 @@ static void huffman_decode( bdt = st->bit_stream[st->next_bit_pos]; st->next_bit_pos++; } + if ( bdt ) { /* Get dt */ switch ( parType ) @@ -620,12 +620,15 @@ static void huffman_decode( vq[iv] = huff_read( st, huff_node_table ) + vq[iv - 1] - offset; } } + + return; } + static void dequant_alpha( - int16_t nv, - int16_t ivStart, - QUANT_TYPE quant_type, + const int16_t nv, + const int16_t ivStart, + const QUANT_TYPE quant_type, int32_t *vq, float *v ) { @@ -641,22 +644,21 @@ static void dequant_alpha( { v[iv] = quant_table->data[vq[iv]]; } + + return; } + static void dequant_beta( - int16_t nv, - int16_t ivStart, - QUANT_TYPE quant_type, + const int16_t nv, + const int16_t ivStart, + const QUANT_TYPE quant_type, int32_t *aq, int32_t *bq, float *beta ) { int16_t iv; ACPL_QUANT_TABLE *quant_table; - const int16_t qmap[2][33] = { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, - { 0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4, 3, 2, 1, 0 } - }; for ( iv = 0; iv < ivStart; iv++ ) { @@ -665,22 +667,26 @@ static void dequant_beta( for ( iv = ivStart; iv < nv; iv++ ) { - quant_table = &beta_quant_table[quant_type][qmap[quant_type][aq[iv]]]; + quant_table = &beta_quant_table[quant_type][ivas_param_upmx_mx_qmap[quant_type][aq[iv]]]; beta[iv] = quant_table->data[bq[iv]]; } + + return; } + static void get_ec_data( Decoder_State *st, - PAR_TYPE parType, - QUANT_TYPE quant_type, - int16_t nParBand, - int16_t parBandStart, + const PAR_TYPE parType, + const QUANT_TYPE quant_type, + const int16_t nParBand, + const int16_t parBandStart, int32_t *parQ, int32_t *alphaQEnv, float ab[IVAS_MAX_NUM_BANDS] ) { huffman_decode( st, nParBand, parBandStart, parType, quant_type, 0, parQ ); + if ( parType == ALPHA ) { dequant_alpha( nParBand, parBandStart, quant_type, parQ, ab ); @@ -690,4 +696,6 @@ static void get_ec_data( { dequant_beta( nParBand, parBandStart, quant_type, alphaQEnv, parQ, ab ); } + + return; } diff --git a/lib_enc/ivas_mc_paramupmix_enc.c b/lib_enc/ivas_mc_paramupmix_enc.c index e50627cedd..ba9479fa6c 100644 --- a/lib_enc/ivas_mc_paramupmix_enc.c +++ b/lib_enc/ivas_mc_paramupmix_enc.c @@ -57,19 +57,20 @@ static void ivas_mc_paramupmix_dmx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, floa static void ivas_mc_paramupmix_param_est_enc( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, float input_frame_t[][L_FRAME48k], const int16_t input_frame, float alphas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS], float betas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS] ); -static void get_huff_table( PAR_TYPE par_type, QUANT_TYPE quant_type, HUFF_TAB *df0, HUFF_TAB *df, HUFF_TAB *dt ); +static void get_huff_table( const PAR_TYPE par_type, const QUANT_TYPE quant_type, HUFF_TAB *df0, HUFF_TAB *df, HUFF_TAB *dt ); -static void write_huff_bits( int32_t value, uint16_t length, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); +static void write_huff_bits( const int32_t value, const uint16_t length, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); -static void huffman_encode( int16_t bdfOnly, int16_t bdtAllowed, int16_t nv, int16_t ivStart, int32_t *vqPrev, int32_t *vq, PAR_TYPE parType, QUANT_TYPE quant_type, int16_t nq, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); +static void huffman_encode( const int16_t bdfOnly, const int16_t bdtAllowed, const int16_t nv, const int16_t ivStart, const int32_t *vqPrev, const int32_t *vq, const PAR_TYPE parType, const QUANT_TYPE quant_type, const int16_t nq, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); -static void put_ec_data( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, int16_t ch, float pars[IVAS_MAX_NUM_BANDS], float alphas[IVAS_MAX_NUM_BANDS], PAR_TYPE parType, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); +static void put_ec_data( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, const int16_t ch, const float pars[IVAS_MAX_NUM_BANDS], const float alphas[IVAS_MAX_NUM_BANDS], const PAR_TYPE parType, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); -static void quantize_alpha( int16_t nv, const float *alpha, QUANT_TYPE quant_type, int16_t *pnq, int32_t aq[IVAS_MAX_NUM_BANDS], float *adeq ); +static void quantize_alpha( const int16_t nv, const float *alpha, const QUANT_TYPE quant_type, int16_t *pnq, int32_t aq[IVAS_MAX_NUM_BANDS], float *adeq ); -static void quantize_pars( int16_t nv, const float *v, int16_t nq, const float *data, int32_t vq[IVAS_MAX_NUM_BANDS], float *vdeq ); +static void quantize_pars( const int16_t nv, const float *v, const int16_t nq, const float *data, int32_t vq[IVAS_MAX_NUM_BANDS], float *vdeq ); + +static void quantize_pars( const int16_t nv, const float *v, const int16_t nq, const float *data, int32_t vq[IVAS_MAX_NUM_BANDS], float *vdeq ); -static void quantize_pars( int16_t nv, const float *v, int16_t nq, const float *data, int32_t vq[IVAS_MAX_NUM_BANDS], float *vdeq ); /*------------------------------------------------------------------------- * ivas_mc_paramupmix_enc() @@ -78,10 +79,10 @@ static void quantize_pars( int16_t nv, const float *v, int16_t nq, const float * *------------------------------------------------------------------------*/ void ivas_mc_paramupmix_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ - BSTR_ENC_HANDLE hBStr, /* i/o: IVAS Metadata bitstream handle */ - float data_f[][L_FRAME48k], /* i/o: input: CICP6, CICP12, CICP14, CICP16 or CICP19 MC data */ - const int16_t input_frame /* i : input frame length */ + Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ + BSTR_ENC_HANDLE hBStr, /* i/o: IVAS Metadata bitstream handle */ + float data_f[][L_FRAME48k], /* i/o: input: CICP6, CICP12, CICP14, CICP16 or CICP19 MC data */ + const int16_t input_frame /* i : input frame length */ ) { MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix; @@ -116,6 +117,7 @@ void ivas_mc_paramupmix_enc( return; } + /*------------------------------------------------------------------------- * ivas_mc_paramupmix_enc_open() * @@ -185,15 +187,14 @@ ivas_error ivas_mc_paramupmix_enc_open( /* set FB config. */ /* need to set num output channels to a value > 0 to get pFb != NULL */ #ifndef SBA_MODE_CLEAN_UP - if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, SBA_MODE_SPAR, MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH, MC_PARAMUPMIX_COMBINATIONS, 0, input_Fs, - 0 ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, SBA_MODE_SPAR, MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH, MC_PARAMUPMIX_COMBINATIONS, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) #else - if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH, MC_PARAMUPMIX_COMBINATIONS, 0, input_Fs, - 0 ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH, MC_PARAMUPMIX_COMBINATIONS, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) #endif { return error; } + fb_cfg->remix_order = mc_paramupmix_fb_remix_order; /* override latency, could be moved to ivas_fb_set_cfg */ /* assuming parameters are calculated at end of frame, compensate for MCT delay and half of decoder fb */ @@ -221,7 +222,6 @@ ivas_error ivas_mc_paramupmix_enc_open( } } - for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) { if ( ( hMCParamUpmix->cov_real[b] = (float ***) malloc( MC_PARAMUPMIX_NCH * sizeof( float ** ) ) ) == NULL ) @@ -268,6 +268,7 @@ ivas_error ivas_mc_paramupmix_enc_open( return error; } + /*------------------------------------------------------------------------- * ivas_mc_paramupmix_enc_close() * @@ -275,8 +276,9 @@ ivas_error ivas_mc_paramupmix_enc_open( *------------------------------------------------------------------------*/ void ivas_mc_paramupmix_enc_close( - MC_PARAMUPMIX_ENC_HANDLE *hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ - const int32_t sampling_rate ) + MC_PARAMUPMIX_ENC_HANDLE *hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ + const int32_t input_Fs /* i : input sampling rate */ +) { int16_t i, k; int16_t b, j; @@ -285,6 +287,7 @@ void ivas_mc_paramupmix_enc_close( { return; } + for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) { if ( ( *hMCParamUpmix )->cov_real[b] != NULL ) @@ -305,6 +308,7 @@ void ivas_mc_paramupmix_enc_close( } free( ( *hMCParamUpmix )->cov_real[b] ); } + if ( ( *hMCParamUpmix )->cov_dtx_real[b] != NULL ) { for ( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) @@ -340,7 +344,7 @@ void ivas_mc_paramupmix_enc_close( if ( ( *hMCParamUpmix )->hFbMixer != NULL ) { - ivas_FB_mixer_close( &( *hMCParamUpmix )->hFbMixer, sampling_rate, 0 ); + ivas_FB_mixer_close( &( *hMCParamUpmix )->hFbMixer, input_Fs, 0 ); } for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) @@ -354,33 +358,18 @@ void ivas_mc_paramupmix_enc_close( free( *hMCParamUpmix ); *hMCParamUpmix = NULL; - return; -} - -/*------------------------------------------------------------------------- - * ivas_mc_paramupmix_getNumTransportChannels() - * - * - *------------------------------------------------------------------------*/ -/* r : number of IVAS transport channels */ -int16_t ivas_mc_paramupmix_getNumTransportChannels() -{ - int16_t nchan_transport; - - /* LFE not included */ - nchan_transport = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS - 1; /*5_1_2*/ - - return nchan_transport; + return; } /*****************************************************************************************/ /* local functions */ /*****************************************************************************************/ + static void get_huff_table( - PAR_TYPE par_type, - QUANT_TYPE quant_type, + const PAR_TYPE par_type, + const QUANT_TYPE quant_type, HUFF_TAB *df0, HUFF_TAB *df, HUFF_TAB *dt ) @@ -404,31 +393,38 @@ static void get_huff_table( dt->length = huff_beta_table[quant_type].dt.length; break; } + + return; } + static void write_huff_bits( - int32_t value, - uint16_t length, + const int32_t value, + const uint16_t length, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ) { int16_t k; + for ( k = length - 1; k >= 0; k-- ) { bit_buffer[( *bit_pos )++] = (uint16_t) ( ( value >> k ) & 1 ); } + + return; } + static void huffman_encode( - int16_t bdfOnly, - int16_t bdtAllowed, - int16_t nv, - int16_t ivStart, - int32_t *vqPrev, - int32_t *vq, - PAR_TYPE parType, - QUANT_TYPE quant_type, - int16_t nq, + const int16_t bdfOnly, + const int16_t bdtAllowed, + const int16_t nv, + const int16_t ivStart, + const int32_t *vqPrev, + const int32_t *vq, + const PAR_TYPE parType, + const QUANT_TYPE quant_type, + const int16_t nq, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ) { @@ -490,19 +486,24 @@ static void huffman_encode( for ( iv = ivStart; iv < nv; iv++ ) { icode = vq[iv] - vqPrev[iv] + offset; +#ifdef DEBUGGING if ( icode < 0 || icode >= 2 * nq - 1 ) { assert( 0 ); } +#endif write_huff_bits( dt.value[icode], dt.length[icode], bit_buffer, bit_pos ); } } + + return; } + static void quantize_pars( - int16_t nv, + const int16_t nv, const float *v, - int16_t nq, + const int16_t nq, const float *data, int32_t vq[IVAS_MAX_NUM_BANDS], float *vdeq ) @@ -538,12 +539,15 @@ static void quantize_pars( vdeq[iv] = data[iq1]; } } + + return; } + static void quantize_alpha( - int16_t nv, + const int16_t nv, const float *alpha, - QUANT_TYPE quant_type, + const QUANT_TYPE quant_type, int16_t *pnq, int32_t aq[IVAS_MAX_NUM_BANDS], float *adeq ) @@ -557,13 +561,16 @@ static void quantize_alpha( quantize_pars( nv, alpha, nq, data, aq, adeq ); *pnq = nq; + + return; } + static void quantize_beta( - int16_t nv, + const int16_t nv, const float *beta, const int32_t aq[IVAS_MAX_NUM_BANDS], - QUANT_TYPE quant_type, + const QUANT_TYPE quant_type, int16_t *pnq, int32_t bq[IVAS_MAX_NUM_BANDS], float *bdeq ) @@ -571,11 +578,10 @@ static void quantize_beta( int16_t iv, iq, iq0, iq1; ACPL_QUANT_TABLE *tables = beta_quant_table[quant_type]; ACPL_QUANT_TABLE quant_table; - const int16_t qmap[2][33] = { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, - { 0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4, 3, 2, 1, 0 } }; + for ( iv = 0; iv < nv; iv++ ) { - quant_table = tables[qmap[quant_type][aq[iv]]]; + quant_table = tables[ivas_param_upmx_mx_qmap[quant_type][aq[iv]]]; iq0 = 0; iq1 = quant_table.nquant - 1; @@ -606,14 +612,17 @@ static void quantize_beta( } *pnq = beta_quant_table[quant_type][0].nquant; + + return; } + static void put_ec_data( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, - int16_t ch, - float pars[IVAS_MAX_NUM_BANDS], - float alphas[IVAS_MAX_NUM_BANDS], - PAR_TYPE parType, + const int16_t ch, + const float pars[IVAS_MAX_NUM_BANDS], + const float alphas[IVAS_MAX_NUM_BANDS], + const PAR_TYPE parType, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ) { @@ -635,6 +644,7 @@ static void put_ec_data( quantize_alpha( npar, alphas, quant_type, &nq, alphaQuant, alphaDequant ); quantize_beta( npar, pars, alphaQuant, quant_type, &nq, betaQuant, betaDequant ); } + if ( hMCParamUpmix->first_frame ) { mvl2l( &( alphaQuant[0] ), &( hMCParamUpmix->alpha_quant_prev[ch][0] ), IVAS_MAX_NUM_BANDS ); @@ -666,8 +676,11 @@ static void put_ec_data( { mvl2l( betaQuant, hMCParamUpmix->beta_quant_prev[ch], IVAS_MAX_NUM_BANDS ); } + + return; } + /*------------------------------------------------------------------------- * ivas_mc_paramupmix_dmx() * @@ -676,15 +689,15 @@ static void put_ec_data( static void ivas_mc_paramupmix_dmx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, /* i/o: MC ParamUpmix encoder handle */ - float data_f[][L_FRAME48k], /* i/o : Input, downmix out */ + float data_f[][L_FRAME48k], /* i/o: Input, downmix out */ const int16_t input_frame /* i : Input frame length */ ) { int16_t i, l; - int16_t chan1s[4] = { 4, 5, 8, 9 }; - int16_t chan2s[4] = { 6, 7, 10, 11 }; - int16_t chanOut[4] = { 4, 5, 6, 7 }; - int16_t chanZero[4] = { 8, 9, 10, 11 }; + const int16_t chan1s[4] = { 4, 5, 8, 9 }; + const int16_t chan2s[4] = { 6, 7, 10, 11 }; + const int16_t chanOut[4] = { 4, 5, 6, 7 }; + const int16_t chanZero[4] = { 8, 9, 10, 11 }; /* boxes = { 0 1 2 3 [4 6] [5 7] [8 10] [9 11] }; */ /* 9+11 -> 7 */ @@ -702,10 +715,12 @@ static void ivas_mc_paramupmix_dmx( data_f[chanOut[i]][l] = hMCParamUpmix->midside[i][0][l]; } } + for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) { set_zero( data_f[chanZero[i]], input_frame ); } + return; } @@ -718,7 +733,7 @@ static void ivas_mc_paramupmix_dmx( *------------------------------------------------------------------------*/ static void ivas_mc_paramupmix_param_est_enc( - MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ + MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ float input_frame_t[][L_FRAME48k], /* i : Input frame in the time domain */ const int16_t input_frame, /* i : Input frame length */ float alphas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS], @@ -735,13 +750,11 @@ static void ivas_mc_paramupmix_param_est_enc( float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; float rxx, rxy, ryy, cmat, rxxest, drxx, wetaux; - int16_t l_ts; int16_t b, i, j, ts, bnd; #ifdef FIX_468_16KHZ_PUPMIX int16_t maxbands; #endif - int16_t transient_det[MC_PARAMUPMIX_COMBINATIONS][2]; int16_t transient_det_l[2], transient_det_r[2]; int16_t chan1s[4] = { 4, 5, 8, 9 }; @@ -758,6 +771,7 @@ static void ivas_mc_paramupmix_param_est_enc( /*-----------------------------------------------------------------------------------------* * Transient detector *-----------------------------------------------------------------------------------------*/ + for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) { ivas_transient_det_process( hMCParamUpmix->hTranDet[2 * i], pcm_in[2 * i], input_frame, transient_det_l ); @@ -785,8 +799,10 @@ static void ivas_mc_paramupmix_param_est_enc( { ivas_fb_mixer_get_windowed_fr( hMCParamUpmix->hFbMixer, pcm_in, pp_in_fr_real, pp_in_fr_imag, l_ts, l_ts, hMCParamUpmix->hFbMixer->fb_cfg->num_in_chans ); + ivas_fb_mixer_update_prior_input( hMCParamUpmix->hFbMixer, pcm_in, l_ts, hMCParamUpmix->hFbMixer->fb_cfg->num_in_chans ); + for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH; i++ ) { pcm_in[i] += l_ts; @@ -798,14 +814,17 @@ static void ivas_mc_paramupmix_param_est_enc( /*-----------------------------------------------------------------------------------------* * Covariance process *-----------------------------------------------------------------------------------------*/ + for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) { pp_in_fr_real[0] = p_fr_realbuffer[2 * b]; pp_in_fr_imag[0] = p_fr_imagbuffer[2 * b]; pp_in_fr_real[1] = FR_Real_Mid; pp_in_fr_imag[1] = FR_Imag_Mid; + v_add( pp_in_fr_real[0], p_fr_realbuffer[2 * b + 1], pp_in_fr_real[1], L_FRAME48k ); v_add( pp_in_fr_imag[0], p_fr_imagbuffer[2 * b + 1], pp_in_fr_imag[1], L_FRAME48k ); + for ( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) { for ( j = 0; j < MC_PARAMUPMIX_NCH; j++ ) @@ -814,8 +833,10 @@ static void ivas_mc_paramupmix_param_est_enc( cov_dtx_real[i][j] = hMCParamUpmix->cov_dtx_real[b][i][j]; } } + ivas_enc_cov_handler_process( hMCParamUpmix->hCovEnc[b], pp_in_fr_real, pp_in_fr_imag, cov_real, cov_dtx_real, hMCParamUpmix->hFbMixer->pFb, 0, hMCParamUpmix->hFbMixer->pFb->filterbank_num_bands, MC_PARAMUPMIX_NCH, 0 /*dtx_vad*/, transient_det[b], HOA_md_ind ); } + #ifdef FIX_468_16KHZ_PUPMIX maxbands = hMCParamUpmix->hFbMixer->pFb->filterbank_num_bands; for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) @@ -841,6 +862,7 @@ static void ivas_mc_paramupmix_param_est_enc( betas[b][bnd] = 2.0f * wetaux; } } + #ifdef FIX_468_16KHZ_PUPMIX if ( maxbands < IVAS_MAX_NUM_BANDS ) { @@ -854,5 +876,6 @@ static void ivas_mc_paramupmix_param_est_enc( } } #endif + return; } diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index 55da6495f8..091352cc09 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -325,7 +325,7 @@ ivas_error create_mct_enc( } else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { - hMCT->nchan_out_woLFE = ivas_mc_paramupmix_getNumTransportChannels(); + hMCT->nchan_out_woLFE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; } else if ( ivas_format == SBA_FORMAT ) { @@ -441,7 +441,7 @@ ivas_error mct_enc_reconfigure( } else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { - hMCT->nchan_out_woLFE = ivas_mc_paramupmix_getNumTransportChannels(); + hMCT->nchan_out_woLFE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; } else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) { -- GitLab From 35bde97c4b21c4580d4a4a5a016fc2300387c3f9 Mon Sep 17 00:00:00 2001 From: vaclav Date: Mon, 5 Jun 2023 16:42:32 +0200 Subject: [PATCH 3/3] fix issue raised from ivas_mc_paramupmix_getNumTransportChannels() being defined twice before --- lib_enc/ivas_mct_enc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index 091352cc09..9c98fa6ee2 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -325,7 +325,7 @@ ivas_error create_mct_enc( } else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { - hMCT->nchan_out_woLFE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; + hMCT->nchan_out_woLFE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS - 1; } else if ( ivas_format == SBA_FORMAT ) { @@ -441,7 +441,7 @@ ivas_error mct_enc_reconfigure( } else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { - hMCT->nchan_out_woLFE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; + hMCT->nchan_out_woLFE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS - 1; } else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) { -- GitLab