diff --git a/lib_com/options.h b/lib_com/options.h index f44ad78c495f49741c4827fa6db8df71a225738e..f9f53108b57a8981751e3446b7926c941c418698 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -165,6 +165,7 @@ #define NONBE_FIX_871_ACELP_CRASH_IN_OSBA /* FhG: isse 871: crash in ACELP core encoder with OSBA */ #define NONBE_FIX_225_MASA_EXT_REND /* Nokia: Resolve #225: Complete MASA external renderer implementation */ #define NONBE_FIX_897_USAN_WITH_MASA_RENDERING /* Nokia: issue #897: USAN null pointer in MASA external renderer to Ambisonics */ +#define NONBE_FIX_903_OSBA_TO_STEREO /* VA: issue 903: fix OSBA to stereo rendering issue */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_jbm_dec.c b/lib_dec/ivas_jbm_dec.c index 9229336f785a60170033cb0329044ae86bab62f8..42346986297283c018c5893cde1b684e068b0f4c 100644 --- a/lib_dec/ivas_jbm_dec.c +++ b/lib_dec/ivas_jbm_dec.c @@ -1186,13 +1186,27 @@ ivas_error ivas_jbm_dec_render( { *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); +#ifdef NONBE_FIX_903_OSBA_TO_STEREO + /* shift SBA channels to avoid overwrite by ISM upmix in 1 object case */ + if ( st_ivas->nchan_ism == 1 ) + { + mvr2r( p_output[2], p_output[3], *nSamplesRendered ); + mvr2r( p_output[1], p_output[2], *nSamplesRendered ); + p_tc[3] = p_output[3]; + } +#endif + /* render objects */ ivas_ism_render_sf( st_ivas, p_output, *nSamplesRendered ); /* add already rendererd SBA part */ for ( n = 0; n < nchan_out; n++ ) { +#ifdef NONBE_FIX_903_OSBA_TO_STEREO + v_add( p_output[n], p_tc[n + max( nchan_out, st_ivas->nchan_ism )], p_output[n], *nSamplesRendered ); +#else v_add( p_output[n], p_tc[n + st_ivas->nchan_ism], p_output[n], *nSamplesRendered ); +#endif } } else if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM )