From b15d981ffd6cc44005b6f842d862aeec95d608c5 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Thu, 11 Jul 2024 13:55:39 +0200 Subject: [PATCH 01/18] enable rendering of objects to BINAURAL_ROOM_IR output in discrete-OBSA mode --- lib_com/options.h | 3 ++- lib_dec/ivas_osba_dec.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 8d9fa9a11f..187758a6b2 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -170,7 +170,8 @@ /* all switches in this category should start with "NONBE_" */ #define NON_BE_FIX_1137_GSC_IVAS_FXFLT_DECODING /* VA: Add fix point bit allocation for special GSC mode such that float and fixed point have the same final bit allocation */ - +#define NONBE_FIX_1141_OSBA_ROOM_RENDERING /* FhG: Fix for issue 1141: render objects in OSBA decoder with room effect */ + /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index eaf5d11a7e..d044fc3a40 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -282,8 +282,9 @@ ivas_error ivas_osba_render_sf( { return error; } - +#ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) +#endif { ivas_ism_render_sf( st_ivas, st_ivas->renderer_type, p_output_ism, *nSamplesRendered ); } -- GitLab From e9d2b0aec13c5b5be3e6d9051126f10f5c6d300a Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Thu, 11 Jul 2024 16:41:07 +0200 Subject: [PATCH 02/18] render OSBA objects to BINAURAL_ROOM_IR using crend --- lib_dec/ivas_init_dec.c | 12 +++++++++++- lib_dec/ivas_ism_param_dec.c | 6 +++++- lib_dec/ivas_ism_renderer.c | 6 +++++- lib_dec/ivas_osba_dec.c | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 907f5619ab..c0460618c4 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1959,7 +1959,17 @@ ivas_error ivas_init_decoder( return error; } } - } + } +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_7_1_4 ) + { + if ((error = ivas_rend_openCrend(&(st_ivas->hCrendWrapper), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, + st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs, (st_ivas->hSplitBinRend == NULL) ? 1 : st_ivas->hSplitBinRend->splitrend.multiBinPoseData.num_poses)) != IVAS_ERR_OK) + { + return error; + } + } +#endif } /*-----------------------------------------------------------------* diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 01efe5669d..42816b6be2 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -749,7 +749,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_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index 11b8c5a202..fbfd5af388 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -281,7 +281,11 @@ void ivas_ism_render_sf( n_samples_rendered_loop += n_samples_in_subframe; /* update rendered subframe and slots info for all cases apart from a following crend call, the update will then happen in the crend call*/ - if ( renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM ) + if ( renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + && !(renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) +#endif + ) { st_ivas->hTcBuffer->subframes_rendered += 1; st_ivas->hTcBuffer->slots_rendered += st_ivas->hTcBuffer->subframe_nbslots[subframe_idx]; diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index d044fc3a40..87d4233d70 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -289,9 +289,23 @@ ivas_error ivas_osba_render_sf( ivas_ism_render_sf( st_ivas, st_ivas->renderer_type, p_output_ism, *nSamplesRendered ); } + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, + IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, NULL, NULL, + st_ivas->hTcBuffer, p_output_ism, p_output_ism, *nSamplesRendered, st_ivas->hDecoderConfig->output_Fs, 0 + ) ) != IVAS_ERR_OK) + { + return error; + } + } + + for ( n = 0; n < st_ivas->hDecoderConfig->nchan_out; n++ ) { +#ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) +#endif { v_add( p_output[n], p_output_ism[n], p_output[n], *nSamplesRendered ); } -- GitLab From 8633d117a56043498d5cc31d1c33ead36aba7331 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Thu, 11 Jul 2024 16:55:35 +0200 Subject: [PATCH 03/18] fix formatting --- lib_dec/ivas_init_dec.c | 18 +++++++++--------- lib_dec/ivas_ism_param_dec.c | 4 ++-- lib_dec/ivas_ism_renderer.c | 6 +++--- lib_dec/ivas_osba_dec.c | 19 +++++++++---------- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index c0460618c4..fa0d568e40 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1959,16 +1959,16 @@ ivas_error ivas_init_decoder( return error; } } - } + } #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_7_1_4 ) - { - if ((error = ivas_rend_openCrend(&(st_ivas->hCrendWrapper), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, - st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs, (st_ivas->hSplitBinRend == NULL) ? 1 : st_ivas->hSplitBinRend->splitrend.multiBinPoseData.num_poses)) != IVAS_ERR_OK) - { - return error; - } - } + else if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_7_1_4 ) + { + if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, + st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs, ( st_ivas->hSplitBinRend == NULL ) ? 1 : st_ivas->hSplitBinRend->splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) + { + return error; + } + } #endif } diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 42816b6be2..6dbf8ef3d6 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -751,9 +751,9 @@ void ivas_ism_dec_digest_tc( st_ivas->renderer_type == RENDERER_OSBA_LS || 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 ) + || ( 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_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index fbfd5af388..ee293bd80e 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -281,11 +281,11 @@ void ivas_ism_render_sf( n_samples_rendered_loop += n_samples_in_subframe; /* update rendered subframe and slots info for all cases apart from a following crend call, the update will then happen in the crend call*/ - if ( renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM + if ( renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING - && !(renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) + && !( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) #endif - ) + ) { st_ivas->hTcBuffer->subframes_rendered += 1; st_ivas->hTcBuffer->slots_rendered += st_ivas->hTcBuffer->subframe_nbslots[subframe_idx]; diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 87d4233d70..526065d230 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -289,16 +289,15 @@ ivas_error ivas_osba_render_sf( ivas_ism_render_sf( st_ivas, st_ivas->renderer_type, p_output_ism, *nSamplesRendered ); } - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, - IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, NULL, NULL, - st_ivas->hTcBuffer, p_output_ism, p_output_ism, *nSamplesRendered, st_ivas->hDecoderConfig->output_Fs, 0 - ) ) != IVAS_ERR_OK) - { - return error; - } - } + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, + IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, NULL, NULL, + st_ivas->hTcBuffer, p_output_ism, p_output_ism, *nSamplesRendered, st_ivas->hDecoderConfig->output_Fs, 0 ) ) != IVAS_ERR_OK ) + { + return error; + } + } for ( n = 0; n < st_ivas->hDecoderConfig->nchan_out; n++ ) -- GitLab From 0de4c532238098ad81b998ebdf4f6f39f2d3e15c Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Fri, 12 Jul 2024 10:51:51 +0200 Subject: [PATCH 04/18] do not run crend for BINAURAL_ROOM_REVERB --- lib_dec/ivas_osba_dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 526065d230..6074cdbc3d 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -289,7 +289,7 @@ ivas_error ivas_osba_render_sf( ivas_ism_render_sf( st_ivas, st_ivas->renderer_type, p_output_ism, *nSamplesRendered ); } - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) { if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, NULL, NULL, -- GitLab From 920816e2c579b47730310c8ed4b74ee528292143 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Fri, 12 Jul 2024 12:37:23 +0200 Subject: [PATCH 05/18] fix subframe counting in OSBA with BINAURAL_ROOM_REVERB --- lib_dec/ivas_ism_renderer.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index ee293bd80e..588932cb8a 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -283,7 +283,11 @@ void ivas_ism_render_sf( then happen in the crend call*/ if ( renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING - && !( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) + && !( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && + st_ivas->ivas_format == SBA_ISM_FORMAT && + st_ivas->ism_mode == ISM_SBA_MODE_DISC && + st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR + ) #endif ) { -- GitLab From d8ddd94d877d2a7e41c173cac0071ac878a557a0 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 15 Jul 2024 11:10:41 +0200 Subject: [PATCH 06/18] fix gain interpolator for BINAURAL_ROOM_REVERB output --- lib_dec/ivas_ism_param_dec.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 6dbf8ef3d6..b329b4b8d3 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++ ) -- GitLab From d3271583970c36459241d8a440b74b861092fc35 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 15 Jul 2024 11:58:33 +0200 Subject: [PATCH 07/18] do not use crend for objects in discrete PSB with reverb --- lib_dec/ivas_init_dec.c | 10 ---------- lib_dec/ivas_ism_renderer.c | 10 +--------- lib_dec/ivas_osba_dec.c | 15 --------------- 3 files changed, 1 insertion(+), 34 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index fa0d568e40..907f5619ab 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1960,16 +1960,6 @@ ivas_error ivas_init_decoder( } } } -#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_7_1_4 ) - { - if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, - st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs, ( st_ivas->hSplitBinRend == NULL ) ? 1 : st_ivas->hSplitBinRend->splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) - { - return error; - } - } -#endif } /*-----------------------------------------------------------------* diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index 588932cb8a..11b8c5a202 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -281,15 +281,7 @@ void ivas_ism_render_sf( n_samples_rendered_loop += n_samples_in_subframe; /* update rendered subframe and slots info for all cases apart from a following crend call, the update will then happen in the crend call*/ - if ( renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM -#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING - && !( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && - st_ivas->ivas_format == SBA_ISM_FORMAT && - st_ivas->ism_mode == ISM_SBA_MODE_DISC && - st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR - ) -#endif - ) + if ( renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM ) { st_ivas->hTcBuffer->subframes_rendered += 1; st_ivas->hTcBuffer->slots_rendered += st_ivas->hTcBuffer->subframe_nbslots[subframe_idx]; diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 6074cdbc3d..0e745bffec 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -282,29 +282,14 @@ ivas_error ivas_osba_render_sf( { return error; } -#ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) -#endif { ivas_ism_render_sf( st_ivas, st_ivas->renderer_type, p_output_ism, *nSamplesRendered ); } - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, - IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, NULL, NULL, - st_ivas->hTcBuffer, p_output_ism, p_output_ism, *nSamplesRendered, st_ivas->hDecoderConfig->output_Fs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - for ( n = 0; n < st_ivas->hDecoderConfig->nchan_out; n++ ) { -#ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) -#endif { v_add( p_output[n], p_output_ism[n], p_output[n], *nSamplesRendered ); } -- GitLab From 2eb479a9d05f508c6069a1ce7dc6c80e4638bd82 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 15 Jul 2024 14:37:52 +0200 Subject: [PATCH 08/18] fix interpolator framing --- lib_com/options.h | 2 +- lib_dec/ivas_dirac_dec.c | 18 +++++++++++++++--- lib_dec/ivas_ism_param_dec.c | 3 +++ lib_dec/ivas_stat_dec.h | 3 +++ 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 187758a6b2..cff812ad4d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -150,7 +150,7 @@ /* keep as part of options.h */ #define BASOP_NOGLOB /* Disable global symbols in BASOPs, Overflow/Carry in BASOPs disabled, additional BASOPs in case of Overflow */ -/*#define DISABLE_LIMITER */ /* test switch for testing BE between 5ms and 20ms rendering */ +#define DISABLE_LIMITER /* test switch for testing BE between 5ms and 20ms rendering */ /* ################## Start DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 9bf0f5ef60..f61086a5a6 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2232,19 +2232,25 @@ 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 ); - interp_offset = 0; +#ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING + interp_offset = 0; +#endif } for ( i = 0; i < num_objects; i++ ) @@ -2273,8 +2279,11 @@ void ivas_dirac_dec_render_sf( { float *tc_re, *tc_im; float *w1, w2; - - w1 = &st_ivas->hIsmRendererData->interpolator[interp_offset]; +#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]; @@ -2302,6 +2311,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 b329b4b8d3..54f7bfb83f 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -722,6 +722,9 @@ void ivas_ism_dec_digest_tc( { st_ivas->hIsmRendererData->interpolator[i] = st_ivas->hIsmRendererData->interpolator[i - 1] + 1.f / ( interpolator_length - 1 ); } +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + st_ivas->hIsmRendererData->interp_offset = 0; +#endif } else { diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 8f096dd705..961faa4912 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -807,6 +807,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; -- GitLab From 528e4d1fb225663b0fd9ff83d94b9d087ef7e88d Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 15 Jul 2024 15:14:34 +0200 Subject: [PATCH 09/18] fix formatting --- lib_dec/ivas_dirac_dec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index f61086a5a6..1902143630 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2249,7 +2249,7 @@ void ivas_dirac_dec_render_sf( { ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator ); #ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING - interp_offset = 0; + interp_offset = 0; #endif } @@ -2280,9 +2280,9 @@ 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]; + w1 = &st_ivas->hIsmRendererData->interpolator[st_ivas->hIsmRendererData->interp_offset]; #else - w1 = &st_ivas->hIsmRendererData->interpolator[interp_offset]; + 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]; -- GitLab From 3ac03523b43557a56cc0ac99e3f1f73ee0c318d0 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 15 Jul 2024 16:28:42 +0200 Subject: [PATCH 10/18] fix interpolator setup --- lib_dec/ivas_dirac_dec.c | 5 ++++- lib_dec/ivas_ism_param_dec.c | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 1902143630..a0375ec2bb 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2248,7 +2248,10 @@ void ivas_dirac_dec_render_sf( 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 ); -#ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + st_ivas->hIsmRendererData->interp_offset = 0; +#else + interp_offset = 0; #endif } diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 54f7bfb83f..534f4971d6 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -722,9 +722,6 @@ void ivas_ism_dec_digest_tc( { st_ivas->hIsmRendererData->interpolator[i] = st_ivas->hIsmRendererData->interpolator[i - 1] + 1.f / ( interpolator_length - 1 ); } -#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING - st_ivas->hIsmRendererData->interp_offset = 0; -#endif } else { @@ -738,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++ ) -- GitLab From 281ffdd657959c1574d99074c3806fcf907b3e66 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 15 Jul 2024 17:29:26 +0200 Subject: [PATCH 11/18] disable interpolator workaround for split-rendering modes --- lib_dec/ivas_dirac_dec.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index a0375ec2bb..dc2175cf57 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2232,28 +2232,21 @@ 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++ ) @@ -2283,10 +2276,16 @@ 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]; + if ( !st_ivas->hSplitBinRend ) + { + w1 = &st_ivas->hIsmRendererData->interpolator[st_ivas->hIsmRendererData->interp_offset]; + } + else #endif + { + w1 = &st_ivas->hIsmRendererData->interpolator[interp_offset]; + } + tc_re = pppQMfFrame_ts_re[nchan_transport + i][0]; tc_im = pppQMfFrame_ts_im[nchan_transport + i][0]; -- GitLab From ea5da63d62894492fa08107c04fae3f7ba231564 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 16 Jul 2024 10:23:19 +0200 Subject: [PATCH 12/18] fix compilation with NONBE_FIX_1141_OSBA_ROOM_RENDERING disabled --- lib_com/options.h | 2 +- lib_dec/ivas_dirac_dec.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index cff812ad4d..c748956f04 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -170,7 +170,7 @@ /* all switches in this category should start with "NONBE_" */ #define NON_BE_FIX_1137_GSC_IVAS_FXFLT_DECODING /* VA: Add fix point bit allocation for special GSC mode such that float and fixed point have the same final bit allocation */ -#define NONBE_FIX_1141_OSBA_ROOM_RENDERING /* FhG: Fix for issue 1141: render objects in OSBA decoder with room effect */ +//#define NONBE_FIX_1141_OSBA_ROOM_RENDERING /* FhG: Fix for issue 1141: render objects in OSBA decoder with room effect */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index dc2175cf57..579e66cb43 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2245,7 +2245,9 @@ void ivas_dirac_dec_render_sf( 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 ); - st_ivas->hIsmRendererData->interp_offset = 0; +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + st_ivas->hIsmRendererData->interp_offset = 0; +#endif interp_offset = 0; } -- GitLab From 716447885cf588ed644ca54ada0987283730c5a5 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 16 Jul 2024 10:25:10 +0200 Subject: [PATCH 13/18] disable DISABLE_LIMITER --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index c748956f04..be26286365 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -150,7 +150,7 @@ /* keep as part of options.h */ #define BASOP_NOGLOB /* Disable global symbols in BASOPs, Overflow/Carry in BASOPs disabled, additional BASOPs in case of Overflow */ -#define DISABLE_LIMITER /* test switch for testing BE between 5ms and 20ms rendering */ +/*#define DISABLE_LIMITER*/ /* test switch for testing BE between 5ms and 20ms rendering */ /* ################## Start DEVELOPMENT switches ######################### */ -- GitLab From 220c5f8efd8815f7d9143a28c2e7202cc8539142 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 16 Jul 2024 10:42:32 +0200 Subject: [PATCH 14/18] fix formatting --- lib_dec/ivas_dirac_dec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 579e66cb43..b7aefa7503 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2245,8 +2245,8 @@ void ivas_dirac_dec_render_sf( 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; +#ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING + st_ivas->hIsmRendererData->interp_offset = 0; #endif interp_offset = 0; } -- GitLab From c442286fdc14a94c4b6e4002ec9c9a23f695069e Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 16 Jul 2024 11:36:39 +0200 Subject: [PATCH 15/18] enable NONBE_FIX_1141_OSBA_ROOM_RENDERING --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index e7b797d412..c5fc76b3c2 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -172,7 +172,7 @@ /* all switches in this category should start with "NONBE_" */ #define NON_BE_FIX_1137_GSC_IVAS_FXFLT_DECODING /* VA: Add fix point bit allocation for special GSC mode such that float and fixed point have the same final bit allocation */ -//#define NONBE_FIX_1141_OSBA_ROOM_RENDERING /* FhG: Fix for issue 1141: render objects in OSBA decoder with room effect */ +#define NONBE_FIX_1141_OSBA_ROOM_RENDERING /* FhG: Fix for issue 1141: render objects in OSBA decoder with room effect */ /* ##################### End NON-BE switches ########################### */ -- GitLab From afb9269242189b61ac8cceea71bf807a69d60865 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 16 Jul 2024 13:29:30 +0200 Subject: [PATCH 16/18] disable split-rendering conditions for testing --- lib_dec/ivas_dirac_dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index b7aefa7503..9a50e11ac7 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2278,7 +2278,7 @@ void ivas_dirac_dec_render_sf( float *tc_re, *tc_im; float *w1, w2; #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING - if ( !st_ivas->hSplitBinRend ) + if ( 1 ) { w1 = &st_ivas->hIsmRendererData->interpolator[st_ivas->hIsmRendererData->interp_offset]; } -- GitLab From db12e4d64427f8087c611baa6ae0c8c96611da2e Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 16 Jul 2024 13:51:27 +0200 Subject: [PATCH 17/18] delete experimental split-rendering workaround --- lib_dec/ivas_dirac_dec.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 9a50e11ac7..b9d51f1cc2 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2232,7 +2232,9 @@ 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; @@ -2240,15 +2242,18 @@ void ivas_dirac_dec_render_sf( 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; -#endif +#else interp_offset = 0; +#endif } for ( i = 0; i < num_objects; i++ ) @@ -2278,15 +2283,10 @@ void ivas_dirac_dec_render_sf( float *tc_re, *tc_im; float *w1, w2; #ifdef NONBE_FIX_1141_OSBA_ROOM_RENDERING - if ( 1 ) - { - w1 = &st_ivas->hIsmRendererData->interpolator[st_ivas->hIsmRendererData->interp_offset]; - } - else + w1 = &st_ivas->hIsmRendererData->interpolator[st_ivas->hIsmRendererData->interp_offset]; +#else + w1 = &st_ivas->hIsmRendererData->interpolator[interp_offset]; #endif - { - w1 = &st_ivas->hIsmRendererData->interpolator[interp_offset]; - } tc_re = pppQMfFrame_ts_re[nchan_transport + i][0]; tc_im = pppQMfFrame_ts_im[nchan_transport + i][0]; -- GitLab From 0fef1844b7f26bd57994ec84b46af89c10345a6f Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 17 Jul 2024 08:59:35 +0200 Subject: [PATCH 18/18] change formatting --- lib_com/options.h | 2 +- lib_dec/ivas_dirac_dec.c | 2 +- lib_dec/ivas_osba_dec.c | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index c5fc76b3c2..17f07dd408 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -150,7 +150,7 @@ /* keep as part of options.h */ #define BASOP_NOGLOB /* Disable global symbols in BASOPs, Overflow/Carry in BASOPs disabled, additional BASOPs in case of Overflow */ -/*#define DISABLE_LIMITER*/ /* test switch for testing BE between 5ms and 20ms rendering */ +/*#define DISABLE_LIMITER */ /* test switch for testing BE between 5ms and 20ms rendering */ /* ################## Start DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index b9d51f1cc2..92df801929 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2235,7 +2235,6 @@ void ivas_dirac_dec_render_sf( #ifndef NONBE_FIX_1141_OSBA_ROOM_RENDERING int16_t interp_offset; #endif - float gain, prev_gain; num_objects = st_ivas->nchan_ism; @@ -2282,6 +2281,7 @@ 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 diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 0e745bffec..eaf5d11a7e 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -282,6 +282,7 @@ ivas_error ivas_osba_render_sf( { return error; } + if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) { ivas_ism_render_sf( st_ivas, st_ivas->renderer_type, p_output_ism, *nSamplesRendered ); -- GitLab