Loading lib_com/ivas_cnst.h +62 −0 Original line number Diff line number Diff line Loading @@ -1776,6 +1776,68 @@ typedef enum } STEREO_DMX_EVS_PRC; #endif /*----------------------------------------------------------------------------------* * Static downmix scaling factors *----------------------------------------------------------------------------------*/ #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA /* McMASA */ /* 5.1 */ #define ivas_mcmasa_dmx_scal_fac_CICP6_1tc_static ( 2.44948983f ) #define ivas_mcmasa_dmx_scal_fac_CICP6_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP6_1tc_static ) /* 7.1 */ #define ivas_mcmasa_dmx_scal_fac_CICP12_1tc_static ( 2.82842708f ) #define ivas_mcmasa_dmx_scal_fac_CICP12_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP12_1tc_static ) /* 5.1+2 */ #define ivas_mcmasa_dmx_scal_fac_CICP14_1tc_static ( 2.82842708f ) #define ivas_mcmasa_dmx_scal_fac_CICP14_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP14_1tc_static ) /* 5.1+4 */ #define ivas_mcmasa_dmx_scal_fac_CICP16_1tc_static ( 3.1622777f ) #define ivas_mcmasa_dmx_scal_fac_CICP16_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP16_1tc_static ) #define ivas_mcmasa_dmx_scal_fac_CICP16_2tc_static ( 2.44948983f ) #define ivas_mcmasa_dmx_scal_fac_CICP16_2tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP16_2tc_static ) #define ivas_mcmasa_dmx_scal_fac_CICP16_3tc_static ( 2.0f ) #define ivas_mcmasa_dmx_scal_fac_CICP16_3tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP16_3tc_static ) /* 7.1+4 */ #define ivas_mcmasa_dmx_scal_fac_CICP19_1tc_static ( 3.46410155f ) #define ivas_mcmasa_dmx_scal_fac_CICP19_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP19_1tc_static ) #define ivas_mcmasa_dmx_scal_fac_CICP19_2tc_static ( 2.64575124f ) #define ivas_mcmasa_dmx_scal_fac_CICP19_2tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP19_2tc_static ) #define ivas_mcmasa_dmx_scal_fac_CICP19_3tc_static ( 2.23606801f ) #define ivas_mcmasa_dmx_scal_fac_CICP19_3tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP19_3tc_static ) /* Separated channel */ #define ivas_mcmasa_dmx_scal_fac_sep_chan_static ( 2.0f ) #define ivas_mcmasa_dmx_scal_fac_sep_chan_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_sep_chan_static ) #endif #ifdef NONBE_FIX_1165_STATIC_SCAL_OMASA /* OMASA */ /* Approximates that 2 channels sum coherently and rest are incoherent */ #define ivas_omasa_dmx_scal_fac_2ch_static ( 2.0f ) #define ivas_omasa_dmx_scal_fac_2ch_static_inv ( 1.0f / ivas_omasa_dmx_scal_fac_2ch_static ) #define ivas_omasa_dmx_scal_fac_3ch_static ( 2.23606801f ) #define ivas_omasa_dmx_scal_fac_3ch_static_inv ( 1.0f / ivas_omasa_dmx_scal_fac_3ch_static ) #define ivas_omasa_dmx_scal_fac_4ch_static ( 2.44948983f ) #define ivas_omasa_dmx_scal_fac_4ch_static_inv ( 1.0f / ivas_omasa_dmx_scal_fac_4ch_static ) #define ivas_omasa_dmx_scal_fac_5ch_static ( 2.64575124f ) #define ivas_omasa_dmx_scal_fac_5ch_static_inv ( 1.0f / ivas_omasa_dmx_scal_fac_5ch_static ) #endif /* clang-format on */ /* IVAS_CNST_H */ lib_com/ivas_prot.h +16 −0 Original line number Diff line number Diff line Loading @@ -5362,6 +5362,14 @@ ivas_error ivas_mcmasa_dec_reconfig( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ); #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA void ivas_mcmasa_gain_umx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *data_f[], /* i/o: output signals */ const int16_t output_frame /* i : output frame length per channel */ ); #endif void ivas_mcmasa_setNumTransportChannels( int16_t* nchan_transport, /* o : Pointer to number of transport channels to be set */ int16_t* element_mode, /* o : Pointer to element mode to be set */ Loading Loading @@ -5858,6 +5866,14 @@ void ivas_omasa_modify_masa_energy_ratios( float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_MAXIMUM_CODING_SUBBANDS] ); #ifdef NONBE_FIX_1165_STATIC_SCAL_OMASA void ivas_omasa_gain_umx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *data_f[], /* i/o: output signals */ const int16_t output_frame /* i : output frame length per channel */ ); #endif /*----------------------------------------------------------------------------------* * TD Binaural Object renderer Loading lib_com/options.h +3 −0 Original line number Diff line number Diff line Loading @@ -195,6 +195,9 @@ #define NONE_BE_FIX_816_LFE_PLC_FLOAT /* DLB: issue 816: reduce required precision to float for LFE-PLC*/ #define NONBE_FIX_1220_OMASA_JBM_EXT_USAN /* Nokia: fix issue 1220 OMASA EXT JBM USAN, also fix similar cases of free to avoid future problems */ #define NONBE_FIX_1165_STATIC_SCAL_MCMASA /* Nok: add static scaling to McMASA DMX */ #define NONBE_FIX_1165_STATIC_SCAL_OMASA /* Nok: add static scaling to OMASA DMX */ #define NONBE_FIX_1165_STATIC_SCAL_PARAMMC /* FhG: add static scaling to ParamMC DMX */ Loading lib_dec/ivas_jbm_dec.c +23 −0 Original line number Diff line number Diff line Loading @@ -308,6 +308,14 @@ ivas_error ivas_jbm_dec_tc( if ( st_ivas->ivas_format == MASA_FORMAT ) { #ifdef NONBE_FIX_1165_STATIC_SCAL_OMASA if ( st_ivas->hMasa->config.input_ivas_format == MASA_ISM_FORMAT ) { /* Revert scaling done to the downmix in the encoder */ ivas_omasa_gain_umx( st_ivas, p_output, output_frame ); } #endif ivas_masa_prerender( st_ivas, p_output, output_frame, nchan_remapped ); /* external output */ Loading Loading @@ -390,6 +398,11 @@ ivas_error ivas_jbm_dec_tc( hp20( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); } #ifdef NONBE_FIX_1165_STATIC_SCAL_OMASA /* Revert scaling done to the downmix in the encoder */ ivas_omasa_gain_umx( st_ivas, p_output, output_frame ); #endif if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { ivas_ism_mono_dmx( st_ivas, p_output, output_frame ); Loading Loading @@ -682,6 +695,11 @@ ivas_error ivas_jbm_dec_tc( return error; } #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA /* Revert scaling done to the downmix in the encoder */ ivas_mcmasa_gain_umx( st_ivas, p_output, output_frame ); #endif /* Delay the separated channel to sync with CLDFB delay of the DirAC synthesis, and synthesize the LFE signal. */ if ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_7_1 || output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || Loading Loading @@ -711,6 +729,11 @@ ivas_error ivas_jbm_dec_tc( return error; } } #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA /* Revert scaling done to the downmix in the encoder */ ivas_mcmasa_gain_umx( st_ivas, p_output, output_frame ); #endif } if ( st_ivas->sba_dirac_stereo_flag ) /* use the flag to trigger the DFT upmix */ Loading lib_dec/ivas_mcmasa_dec.c +82 −0 Original line number Diff line number Diff line Loading @@ -98,3 +98,85 @@ ivas_error ivas_mcmasa_dec_reconfig( return error; } #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA /* Gain decoded signals to match the gains applied to the downmix signals in the encoder */ void ivas_mcmasa_gain_umx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *data_f[], /* i/o: output signals */ const int16_t output_frame /* i : output frame length per channel */ ) { float gain; int16_t nchan_transport; uint8_t separateChannelEnabled; nchan_transport = st_ivas->nchan_transport; separateChannelEnabled = st_ivas->hOutSetup.separateChannelEnabled; gain = 1.0f; if ( separateChannelEnabled ) { /* Separate channel gaining */ v_multc( data_f[2], ivas_mcmasa_dmx_scal_fac_sep_chan_static, data_f[2], output_frame ); /* Downmix channels gaining */ if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP16_3tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP19_3tc_static; } v_multc( data_f[0], gain, data_f[0], output_frame ); v_multc( data_f[1], gain, data_f[1], output_frame ); } else { if ( nchan_transport == 2 ) { if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP16_2tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP19_2tc_static; } v_multc( data_f[0], gain, data_f[0], output_frame ); v_multc( data_f[1], gain, data_f[1], output_frame ); } else { if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP6_1tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP12_1tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1_2 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP14_1tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP16_1tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP19_1tc_static; } v_multc( data_f[0], gain, data_f[0], output_frame ); } } return; } #endif Loading
lib_com/ivas_cnst.h +62 −0 Original line number Diff line number Diff line Loading @@ -1776,6 +1776,68 @@ typedef enum } STEREO_DMX_EVS_PRC; #endif /*----------------------------------------------------------------------------------* * Static downmix scaling factors *----------------------------------------------------------------------------------*/ #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA /* McMASA */ /* 5.1 */ #define ivas_mcmasa_dmx_scal_fac_CICP6_1tc_static ( 2.44948983f ) #define ivas_mcmasa_dmx_scal_fac_CICP6_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP6_1tc_static ) /* 7.1 */ #define ivas_mcmasa_dmx_scal_fac_CICP12_1tc_static ( 2.82842708f ) #define ivas_mcmasa_dmx_scal_fac_CICP12_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP12_1tc_static ) /* 5.1+2 */ #define ivas_mcmasa_dmx_scal_fac_CICP14_1tc_static ( 2.82842708f ) #define ivas_mcmasa_dmx_scal_fac_CICP14_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP14_1tc_static ) /* 5.1+4 */ #define ivas_mcmasa_dmx_scal_fac_CICP16_1tc_static ( 3.1622777f ) #define ivas_mcmasa_dmx_scal_fac_CICP16_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP16_1tc_static ) #define ivas_mcmasa_dmx_scal_fac_CICP16_2tc_static ( 2.44948983f ) #define ivas_mcmasa_dmx_scal_fac_CICP16_2tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP16_2tc_static ) #define ivas_mcmasa_dmx_scal_fac_CICP16_3tc_static ( 2.0f ) #define ivas_mcmasa_dmx_scal_fac_CICP16_3tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP16_3tc_static ) /* 7.1+4 */ #define ivas_mcmasa_dmx_scal_fac_CICP19_1tc_static ( 3.46410155f ) #define ivas_mcmasa_dmx_scal_fac_CICP19_1tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP19_1tc_static ) #define ivas_mcmasa_dmx_scal_fac_CICP19_2tc_static ( 2.64575124f ) #define ivas_mcmasa_dmx_scal_fac_CICP19_2tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP19_2tc_static ) #define ivas_mcmasa_dmx_scal_fac_CICP19_3tc_static ( 2.23606801f ) #define ivas_mcmasa_dmx_scal_fac_CICP19_3tc_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_CICP19_3tc_static ) /* Separated channel */ #define ivas_mcmasa_dmx_scal_fac_sep_chan_static ( 2.0f ) #define ivas_mcmasa_dmx_scal_fac_sep_chan_static_inv ( 1.0f / ivas_mcmasa_dmx_scal_fac_sep_chan_static ) #endif #ifdef NONBE_FIX_1165_STATIC_SCAL_OMASA /* OMASA */ /* Approximates that 2 channels sum coherently and rest are incoherent */ #define ivas_omasa_dmx_scal_fac_2ch_static ( 2.0f ) #define ivas_omasa_dmx_scal_fac_2ch_static_inv ( 1.0f / ivas_omasa_dmx_scal_fac_2ch_static ) #define ivas_omasa_dmx_scal_fac_3ch_static ( 2.23606801f ) #define ivas_omasa_dmx_scal_fac_3ch_static_inv ( 1.0f / ivas_omasa_dmx_scal_fac_3ch_static ) #define ivas_omasa_dmx_scal_fac_4ch_static ( 2.44948983f ) #define ivas_omasa_dmx_scal_fac_4ch_static_inv ( 1.0f / ivas_omasa_dmx_scal_fac_4ch_static ) #define ivas_omasa_dmx_scal_fac_5ch_static ( 2.64575124f ) #define ivas_omasa_dmx_scal_fac_5ch_static_inv ( 1.0f / ivas_omasa_dmx_scal_fac_5ch_static ) #endif /* clang-format on */ /* IVAS_CNST_H */
lib_com/ivas_prot.h +16 −0 Original line number Diff line number Diff line Loading @@ -5362,6 +5362,14 @@ ivas_error ivas_mcmasa_dec_reconfig( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ); #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA void ivas_mcmasa_gain_umx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *data_f[], /* i/o: output signals */ const int16_t output_frame /* i : output frame length per channel */ ); #endif void ivas_mcmasa_setNumTransportChannels( int16_t* nchan_transport, /* o : Pointer to number of transport channels to be set */ int16_t* element_mode, /* o : Pointer to element mode to be set */ Loading Loading @@ -5858,6 +5866,14 @@ void ivas_omasa_modify_masa_energy_ratios( float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_MAXIMUM_CODING_SUBBANDS] ); #ifdef NONBE_FIX_1165_STATIC_SCAL_OMASA void ivas_omasa_gain_umx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *data_f[], /* i/o: output signals */ const int16_t output_frame /* i : output frame length per channel */ ); #endif /*----------------------------------------------------------------------------------* * TD Binaural Object renderer Loading
lib_com/options.h +3 −0 Original line number Diff line number Diff line Loading @@ -195,6 +195,9 @@ #define NONE_BE_FIX_816_LFE_PLC_FLOAT /* DLB: issue 816: reduce required precision to float for LFE-PLC*/ #define NONBE_FIX_1220_OMASA_JBM_EXT_USAN /* Nokia: fix issue 1220 OMASA EXT JBM USAN, also fix similar cases of free to avoid future problems */ #define NONBE_FIX_1165_STATIC_SCAL_MCMASA /* Nok: add static scaling to McMASA DMX */ #define NONBE_FIX_1165_STATIC_SCAL_OMASA /* Nok: add static scaling to OMASA DMX */ #define NONBE_FIX_1165_STATIC_SCAL_PARAMMC /* FhG: add static scaling to ParamMC DMX */ Loading
lib_dec/ivas_jbm_dec.c +23 −0 Original line number Diff line number Diff line Loading @@ -308,6 +308,14 @@ ivas_error ivas_jbm_dec_tc( if ( st_ivas->ivas_format == MASA_FORMAT ) { #ifdef NONBE_FIX_1165_STATIC_SCAL_OMASA if ( st_ivas->hMasa->config.input_ivas_format == MASA_ISM_FORMAT ) { /* Revert scaling done to the downmix in the encoder */ ivas_omasa_gain_umx( st_ivas, p_output, output_frame ); } #endif ivas_masa_prerender( st_ivas, p_output, output_frame, nchan_remapped ); /* external output */ Loading Loading @@ -390,6 +398,11 @@ ivas_error ivas_jbm_dec_tc( hp20( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); } #ifdef NONBE_FIX_1165_STATIC_SCAL_OMASA /* Revert scaling done to the downmix in the encoder */ ivas_omasa_gain_umx( st_ivas, p_output, output_frame ); #endif if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { ivas_ism_mono_dmx( st_ivas, p_output, output_frame ); Loading Loading @@ -682,6 +695,11 @@ ivas_error ivas_jbm_dec_tc( return error; } #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA /* Revert scaling done to the downmix in the encoder */ ivas_mcmasa_gain_umx( st_ivas, p_output, output_frame ); #endif /* Delay the separated channel to sync with CLDFB delay of the DirAC synthesis, and synthesize the LFE signal. */ if ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_7_1 || output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || Loading Loading @@ -711,6 +729,11 @@ ivas_error ivas_jbm_dec_tc( return error; } } #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA /* Revert scaling done to the downmix in the encoder */ ivas_mcmasa_gain_umx( st_ivas, p_output, output_frame ); #endif } if ( st_ivas->sba_dirac_stereo_flag ) /* use the flag to trigger the DFT upmix */ Loading
lib_dec/ivas_mcmasa_dec.c +82 −0 Original line number Diff line number Diff line Loading @@ -98,3 +98,85 @@ ivas_error ivas_mcmasa_dec_reconfig( return error; } #ifdef NONBE_FIX_1165_STATIC_SCAL_MCMASA /* Gain decoded signals to match the gains applied to the downmix signals in the encoder */ void ivas_mcmasa_gain_umx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *data_f[], /* i/o: output signals */ const int16_t output_frame /* i : output frame length per channel */ ) { float gain; int16_t nchan_transport; uint8_t separateChannelEnabled; nchan_transport = st_ivas->nchan_transport; separateChannelEnabled = st_ivas->hOutSetup.separateChannelEnabled; gain = 1.0f; if ( separateChannelEnabled ) { /* Separate channel gaining */ v_multc( data_f[2], ivas_mcmasa_dmx_scal_fac_sep_chan_static, data_f[2], output_frame ); /* Downmix channels gaining */ if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP16_3tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP19_3tc_static; } v_multc( data_f[0], gain, data_f[0], output_frame ); v_multc( data_f[1], gain, data_f[1], output_frame ); } else { if ( nchan_transport == 2 ) { if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP16_2tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP19_2tc_static; } v_multc( data_f[0], gain, data_f[0], output_frame ); v_multc( data_f[1], gain, data_f[1], output_frame ); } else { if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP6_1tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP12_1tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1_2 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP14_1tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP16_1tc_static; } else if ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1_4 ) { gain = ivas_mcmasa_dmx_scal_fac_CICP19_1tc_static; } v_multc( data_f[0], gain, data_f[0], output_frame ); } } return; } #endif