diff --git a/lib_com/options.h b/lib_com/options.h index 33c1d943abfc7432f73bcfa0be919b3b46af84b7..c0cd3fbb39c3b43142a16560c6a5f78e3881be31 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -172,6 +172,7 @@ #define FIX_FLOAT_1493_MASA_ENCODE_STABILITY_IMPROVE /* Nokia: float issue 1493: Improves float decision stability in MASA encoding by adjusting reduction code */ #define FIX_2432_ISM_SPIKES_16KHZ /* VA: basop issue 2432: fix spikes in ISM decoding at 16kHz output sampling rate */ +#define FIX_FLOAT_1518 /* FhG: fix issue 1518: loudness differences in OSBA decoding to mono or stereo output */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index fc1c85aaa4bfc46e3818fe2cc88743c03e5441cb..231b1ed866a570dde1f3779ae2d7c893865dd8fa 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -500,7 +500,14 @@ ivas_error ivas_cpe_dec( if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->nchan_out == 1 && ( is_DTXrate( ivas_total_brate ) == 0 || ( is_DTXrate( ivas_total_brate ) == 1 && is_DTXrate( st_ivas->hDecoderConfig->last_ivas_total_brate ) == 0 ) ) ) { - applyDmxMdctStereo( hCPE, output, output_frame ); +#ifdef FIX_FLOAT_1518 + if ( !( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_NONE ) ) + { +#endif + applyDmxMdctStereo( hCPE, output, output_frame ); +#ifdef FIX_FLOAT_1518 + } +#endif } #ifndef DEBUG_STEREO_DFT_OUTRESPRED diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index bebc8a6a420c0d8150ee24176f427b290f60969a..f47dfb6118d4ac2201282414f56fbe0148ff0284 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -443,6 +443,12 @@ ivas_error ivas_dec( ivas_sba_dirac_stereo_dec( st_ivas, &p_output[sba_ch_idx], output_frame ); } +#ifdef FIX_FLOAT_1518 + else if ( st_ivas->hDecoderConfig->nchan_out == 1 && st_ivas->ism_mode == ISM_MODE_NONE ) + { + v_multc( p_output[0], 2.0f, p_output[0], output_frame ); + } +#endif /* HP filtering */ for ( n = 0; n < getNumChanSynthesis( st_ivas ); n++ ) diff --git a/lib_dec/ivas_sba_dirac_stereo_dec.c b/lib_dec/ivas_sba_dirac_stereo_dec.c index e2fed3b0ca8c993e60356c553d0e44d091e01543..ea3355769d01eefa04e51aa8886f802519616c40 100644 --- a/lib_dec/ivas_sba_dirac_stereo_dec.c +++ b/lib_dec/ivas_sba_dirac_stereo_dec.c @@ -910,7 +910,11 @@ void ivas_sba_dirac_stereo_dec( synchro_synthesis( st_ivas->hDecoderConfig->ivas_total_brate, hCPE, output, output_frame, 1 /*st_ivas->sba_dirac_stereo_flag*/ ); /* output scaling */ +#ifdef FIX_FLOAT_1518 + if ( !sba_mono_flag && !( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_NONE ) ) +#else if ( !sba_mono_flag ) +#endif { v_multc( output[0], 0.5f, output[0], output_frame ); v_multc( output[1], 0.5f, output[1], output_frame ); diff --git a/lib_dec/ivas_stereo_mdct_core_dec.c b/lib_dec/ivas_stereo_mdct_core_dec.c index 2bd77a831cb49977db01621ce73457ff5bdc510c..4ba86bc7bd2d14c2a6adfb1871bd4e6a840c92d5 100644 --- a/lib_dec/ivas_stereo_mdct_core_dec.c +++ b/lib_dec/ivas_stereo_mdct_core_dec.c @@ -349,7 +349,11 @@ void stereo_mdct_core_dec( run_min_stats( sts, x ); +#ifdef FIX_FLOAT_1518 + if ( hCPE->nchan_out == 1 && ( !bfi || ( bfi && sts[0]->core != ACELP_CORE && sts[1]->core != ACELP_CORE ) ) && !( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_NONE ) ) +#else if ( hCPE->nchan_out == 1 && ( !bfi || ( bfi && sts[0]->core != ACELP_CORE && sts[1]->core != ACELP_CORE ) ) ) +#endif { apply_dmx_weights( hCPE, x, sts[0]->transform_type, sts[1]->transform_type ); }