Loading lib_com/ivas_prot.h +4 −0 Original line number Diff line number Diff line Loading @@ -5469,7 +5469,11 @@ void ivas_mono_dmx_renderer_close( MONO_DOWNMIX_RENDERER_HANDLE *hMonoDmxRenderer /* i/ i/o: Mono downmix structure */ ); #ifdef NONBE_FIX_967_ISM_MONO_DMX void ivas_ism_mono_dmx( #else void ivas_mono_downmix_render_passive( #endif Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output_f[], /* i/o: synthesized core-coder transport channels/mono output */ const int16_t output_frame /* i : output frame length */ Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,7 @@ #define NONBE_FIX_935_EARLY_REFLECTIONS_WRONG_ORDER /* Qualcomm: issue 953: fix order or ER channels in LC mode*/ #define NONBE_FIX_949_MC_5MS_FRAMING /* Dlb: issue 949: fix for issue 949, distorted output in MC mode with 5ms framing*/ #define NONBE_FIX_952_MC_PARAMUPMIX_5MS /* Dlb : issue 952 : Differences between 5ms and 20ms rendering for ParamUpmix*/ #define NONBE_FIX_967_ISM_MONO_DMX /* FhG: issue 967: accumulating energies in ISM mono DMX */ /* ##################### End NON-BE switches ########################### */ Loading lib_dec/ivas_jbm_dec.c +12 −0 Original line number Diff line number Diff line Loading @@ -196,7 +196,11 @@ ivas_error ivas_jbm_dec_tc( if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { #ifdef NONBE_FIX_967_ISM_MONO_DMX ivas_ism_mono_dmx( st_ivas, p_output, output_frame ); #else ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); #endif } else if ( st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) ) { Loading Loading @@ -388,7 +392,11 @@ ivas_error ivas_jbm_dec_tc( if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { #ifdef NONBE_FIX_967_ISM_MONO_DMX ivas_ism_mono_dmx( st_ivas, p_output, output_frame ); #else ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); #endif } else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) { Loading Loading @@ -512,7 +520,11 @@ ivas_error ivas_jbm_dec_tc( } else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) { #ifdef NONBE_FIX_967_ISM_MONO_DMX ivas_ism_mono_dmx( st_ivas, p_output, output_frame ); #else ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); #endif /* add W */ for ( n = 0; n < nchan_out; n++ ) Loading lib_dec/ivas_mono_dmx_renderer.c +34 −2 Original line number Diff line number Diff line Loading @@ -48,7 +48,9 @@ #define DOWNMIX_ALPHA 0.95f /* Smoothing coefficient */ #define DOWNMIX_MAX_GAIN 4.0f /* Maximum allowed gain */ #define MONO_DOWNMIX_RENDERER_MAX_INPUT_CHANS 4 #ifndef NONBE_FIX_967_ISM_MONO_DMX #define MONO_DOWNMIX_RENDERER_MAX_INPUT_CHANS 4 // FhG esr: this seems to be obsolete; not related to issue 967 #endif /*------------------------------------------------------------------------- Loading Loading @@ -99,12 +101,16 @@ void ivas_mono_dmx_renderer_close( /*------------------------------------------------------------------------- * ivas_mono_downmix_render_passive() * ivas_ism_mono_dmx() * * Downmix process *------------------------------------------------------------------------*/ #ifdef NONBE_FIX_967_ISM_MONO_DMX void ivas_ism_mono_dmx( #else void ivas_mono_downmix_render_passive( #endif Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output_f[], /* i/o: synthesized core-coder transport channels/mono output */ const int16_t output_frame /* i : output frame length */ Loading @@ -112,6 +118,9 @@ void ivas_mono_downmix_render_passive( { int16_t i, j, numInputChannels; float proto_signal[L_FRAME48k], eq; #ifdef NONBE_FIX_967_ISM_MONO_DMX float inputEnergy_local, protoEnergy_local; #endif MONO_DOWNMIX_RENDERER_HANDLE hDownmix; numInputChannels = st_ivas->nSCE; Loading @@ -134,6 +143,10 @@ void ivas_mono_downmix_render_passive( hDownmix = st_ivas->hMonoDmxRenderer; set_zero( proto_signal, output_frame ); #ifdef NONBE_FIX_967_ISM_MONO_DMX inputEnergy_local = 0; protoEnergy_local = 0; #endif /* Compute the Proto Signal */ for ( i = 0; i < numInputChannels; i++ ) Loading @@ -141,6 +154,18 @@ void ivas_mono_downmix_render_passive( v_add( output_f[i], proto_signal, proto_signal, output_frame ); } #ifdef NONBE_FIX_967_ISM_MONO_DMX /* compute the input energy, proto energy */ for ( i = 0; i < output_frame; i++ ) { protoEnergy_local += proto_signal[i] * proto_signal[i]; for ( j = 0; j < numInputChannels; j++ ) { inputEnergy_local += ( output_f[j][i] * output_f[j][i] ); } } #else /* compute the input energy, proto energy after smoothing */ hDownmix->inputEnergy *= DOWNMIX_ALPHA; hDownmix->protoEnergy *= DOWNMIX_ALPHA; Loading @@ -153,6 +178,13 @@ void ivas_mono_downmix_render_passive( hDownmix->inputEnergy += ( output_f[j][i] * output_f[j][i] ); } } #endif #ifdef NONBE_FIX_967_ISM_MONO_DMX hDownmix->inputEnergy *= DOWNMIX_ALPHA; hDownmix->protoEnergy *= DOWNMIX_ALPHA; hDownmix->inputEnergy += ( 1.0f - DOWNMIX_ALPHA ) * inputEnergy_local; hDownmix->protoEnergy += ( 1.0f - DOWNMIX_ALPHA ) * protoEnergy_local; #endif /* compute the eq factor */ eq = min( DOWNMIX_MAX_GAIN, sqrtf( hDownmix->inputEnergy / ( EPSILON + hDownmix->protoEnergy ) ) ); Loading Loading
lib_com/ivas_prot.h +4 −0 Original line number Diff line number Diff line Loading @@ -5469,7 +5469,11 @@ void ivas_mono_dmx_renderer_close( MONO_DOWNMIX_RENDERER_HANDLE *hMonoDmxRenderer /* i/ i/o: Mono downmix structure */ ); #ifdef NONBE_FIX_967_ISM_MONO_DMX void ivas_ism_mono_dmx( #else void ivas_mono_downmix_render_passive( #endif Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output_f[], /* i/o: synthesized core-coder transport channels/mono output */ const int16_t output_frame /* i : output frame length */ Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,7 @@ #define NONBE_FIX_935_EARLY_REFLECTIONS_WRONG_ORDER /* Qualcomm: issue 953: fix order or ER channels in LC mode*/ #define NONBE_FIX_949_MC_5MS_FRAMING /* Dlb: issue 949: fix for issue 949, distorted output in MC mode with 5ms framing*/ #define NONBE_FIX_952_MC_PARAMUPMIX_5MS /* Dlb : issue 952 : Differences between 5ms and 20ms rendering for ParamUpmix*/ #define NONBE_FIX_967_ISM_MONO_DMX /* FhG: issue 967: accumulating energies in ISM mono DMX */ /* ##################### End NON-BE switches ########################### */ Loading
lib_dec/ivas_jbm_dec.c +12 −0 Original line number Diff line number Diff line Loading @@ -196,7 +196,11 @@ ivas_error ivas_jbm_dec_tc( if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { #ifdef NONBE_FIX_967_ISM_MONO_DMX ivas_ism_mono_dmx( st_ivas, p_output, output_frame ); #else ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); #endif } else if ( st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) ) { Loading Loading @@ -388,7 +392,11 @@ ivas_error ivas_jbm_dec_tc( if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { #ifdef NONBE_FIX_967_ISM_MONO_DMX ivas_ism_mono_dmx( st_ivas, p_output, output_frame ); #else ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); #endif } else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) { Loading Loading @@ -512,7 +520,11 @@ ivas_error ivas_jbm_dec_tc( } else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) { #ifdef NONBE_FIX_967_ISM_MONO_DMX ivas_ism_mono_dmx( st_ivas, p_output, output_frame ); #else ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); #endif /* add W */ for ( n = 0; n < nchan_out; n++ ) Loading
lib_dec/ivas_mono_dmx_renderer.c +34 −2 Original line number Diff line number Diff line Loading @@ -48,7 +48,9 @@ #define DOWNMIX_ALPHA 0.95f /* Smoothing coefficient */ #define DOWNMIX_MAX_GAIN 4.0f /* Maximum allowed gain */ #define MONO_DOWNMIX_RENDERER_MAX_INPUT_CHANS 4 #ifndef NONBE_FIX_967_ISM_MONO_DMX #define MONO_DOWNMIX_RENDERER_MAX_INPUT_CHANS 4 // FhG esr: this seems to be obsolete; not related to issue 967 #endif /*------------------------------------------------------------------------- Loading Loading @@ -99,12 +101,16 @@ void ivas_mono_dmx_renderer_close( /*------------------------------------------------------------------------- * ivas_mono_downmix_render_passive() * ivas_ism_mono_dmx() * * Downmix process *------------------------------------------------------------------------*/ #ifdef NONBE_FIX_967_ISM_MONO_DMX void ivas_ism_mono_dmx( #else void ivas_mono_downmix_render_passive( #endif Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output_f[], /* i/o: synthesized core-coder transport channels/mono output */ const int16_t output_frame /* i : output frame length */ Loading @@ -112,6 +118,9 @@ void ivas_mono_downmix_render_passive( { int16_t i, j, numInputChannels; float proto_signal[L_FRAME48k], eq; #ifdef NONBE_FIX_967_ISM_MONO_DMX float inputEnergy_local, protoEnergy_local; #endif MONO_DOWNMIX_RENDERER_HANDLE hDownmix; numInputChannels = st_ivas->nSCE; Loading @@ -134,6 +143,10 @@ void ivas_mono_downmix_render_passive( hDownmix = st_ivas->hMonoDmxRenderer; set_zero( proto_signal, output_frame ); #ifdef NONBE_FIX_967_ISM_MONO_DMX inputEnergy_local = 0; protoEnergy_local = 0; #endif /* Compute the Proto Signal */ for ( i = 0; i < numInputChannels; i++ ) Loading @@ -141,6 +154,18 @@ void ivas_mono_downmix_render_passive( v_add( output_f[i], proto_signal, proto_signal, output_frame ); } #ifdef NONBE_FIX_967_ISM_MONO_DMX /* compute the input energy, proto energy */ for ( i = 0; i < output_frame; i++ ) { protoEnergy_local += proto_signal[i] * proto_signal[i]; for ( j = 0; j < numInputChannels; j++ ) { inputEnergy_local += ( output_f[j][i] * output_f[j][i] ); } } #else /* compute the input energy, proto energy after smoothing */ hDownmix->inputEnergy *= DOWNMIX_ALPHA; hDownmix->protoEnergy *= DOWNMIX_ALPHA; Loading @@ -153,6 +178,13 @@ void ivas_mono_downmix_render_passive( hDownmix->inputEnergy += ( output_f[j][i] * output_f[j][i] ); } } #endif #ifdef NONBE_FIX_967_ISM_MONO_DMX hDownmix->inputEnergy *= DOWNMIX_ALPHA; hDownmix->protoEnergy *= DOWNMIX_ALPHA; hDownmix->inputEnergy += ( 1.0f - DOWNMIX_ALPHA ) * inputEnergy_local; hDownmix->protoEnergy += ( 1.0f - DOWNMIX_ALPHA ) * protoEnergy_local; #endif /* compute the eq factor */ eq = min( DOWNMIX_MAX_GAIN, sqrtf( hDownmix->inputEnergy / ( EPSILON + hDownmix->protoEnergy ) ) ); Loading