diff --git a/lib_com/options.h b/lib_com/options.h index 0ea5510b4ff81f5d1b2eaa4d9755d0141e0fc570..ed8f4a3f42761a2acf927a867f984bae6e37c7d1 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -211,6 +211,7 @@ #define NONBE_FIX_1110_STEREO_DTX_BRATE_SWITCHING /* VA: issue 1110: fix encoder crash in the stereo DTX bitrate switching condition */ #define NONBE_1894_OSBA_SCALING /* FhG: port OSBA scaling MRs (298,355,360) jointly */ +#define NONBE_FIX_1141_OSBA_ROOM_RENDERING /* FhG: Fix for issue 1141: render objects in OSBA decoder with room effect */ #define NONBE_1360_LFE_DELAY /* Dlb: LFE delay alignment when rendering in CLDFB domain*/ #define NONBE_1229_FIX_ISM1_DPID /* Eri: issue 1229: fix bug causing ISM 1 to use default -dpid instead of the specified one */ #define NONBE_SVD_OPTIMIZATION diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 678a2075bec0873f65c6c0ad59f6ec047c469d9c..78c11ceb5892a0fb1a83ffc84a2f5c7206e0cfdc 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2249,19 +2249,27 @@ void ivas_dirac_dec_render_sf( int16_t az1, el1; int16_t n_slots_to_render; int16_t n_samples_to_render; +#ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING int16_t interp_offset; +#endif float gain, prev_gain; num_objects = st_ivas->nchan_ism; nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; n_slots_to_render = st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered]; n_samples_to_render = hSpatParamRendCom->num_freq_bands * n_slots_to_render; +#ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING interp_offset = st_ivas->hTcBuffer->n_samples_rendered; +#endif if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] ) { ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator ); +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + st_ivas->hIsmRendererData->interp_offset = 0; +#else interp_offset = 0; +#endif } for ( i = 0; i < num_objects; i++ ) @@ -2291,7 +2299,12 @@ void ivas_dirac_dec_render_sf( float *tc_re, *tc_im; float *w1, w2; +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + w1 = &st_ivas->hIsmRendererData->interpolator[st_ivas->hIsmRendererData->interp_offset]; +#else w1 = &st_ivas->hIsmRendererData->interpolator[interp_offset]; +#endif + tc_re = pppQMfFrame_ts_re[nchan_transport + i][0]; tc_im = pppQMfFrame_ts_im[nchan_transport + i][0]; @@ -2319,6 +2332,9 @@ void ivas_dirac_dec_render_sf( } } } +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + st_ivas->hIsmRendererData->interp_offset += hSpatParamRendCom->num_freq_bands * st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered]; +#endif } if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 5803086c66cb03b7158e53cc8e1c7f5441c9db63..ba878d4b65b3abf946ef1ec13832bd94c88fbb0a 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -711,7 +711,11 @@ void ivas_ism_dec_digest_tc( if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || st_ivas->renderer_type == RENDERER_OSBA_AMBI || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) + st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + || ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) +#endif + ) { st_ivas->hIsmRendererData->interpolator[0] = 0.0f; for ( i = 1; i < interpolator_length; i++ ) @@ -731,6 +735,9 @@ void ivas_ism_dec_digest_tc( { ivas_jbm_dec_get_adapted_linear_interpolator( (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ), st_ivas->hTcBuffer->n_samples_available, st_ivas->hIsmRendererData->interpolator ); } +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + st_ivas->hIsmRendererData->interp_offset = 0; +#endif /* also get the gains here */ for ( i = 0; i < st_ivas->nchan_ism; i++ ) @@ -749,7 +756,11 @@ void ivas_ism_dec_digest_tc( if ( ( st_ivas->renderer_type == RENDERER_TD_PANNING || st_ivas->renderer_type == RENDERER_OSBA_LS || - st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) && + st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + || ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) +#endif + ) && st_ivas->hCombinedOrientationData == NULL ) { if ( st_ivas->hIntSetup.is_planar_setup ) diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 2a4e9130c7917da7ca1759be0547bea213e5f4ea..ae12ff552a0747289460e8d1829e0099bba9aa8a 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -811,6 +811,9 @@ typedef struct renderer_struct float prev_gains[MAX_NUM_OBJECTS][MAX_OUTPUT_CHANNELS]; float *interpolator; int16_t interpolator_length; +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + int16_t interp_offset; +#endif float gains[MAX_NUM_OBJECTS][MAX_OUTPUT_CHANNELS]; } ISM_RENDERER_DATA, *ISM_RENDERER_HANDLE;