From 612813eedb2ee66a948d54ab81a569bb089a8d0f Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Fri, 9 Feb 2024 12:18:48 +0100 Subject: [PATCH 01/16] in ParamMC decoder, set up rendering config for BINAURAL_ROOM_REVERB in the same way as BINAURAL_ROOM_IR --- lib_com/options.h | 6 +++++- lib_dec/ivas_output_config.c | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index e99cb812af..ac76eb3e52 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -173,7 +173,11 @@ #define NONBE_FIX_947_STEREO_DMX_EVS_PHA /* Orange: Fix issues on PHA */ #define NONBE_FIX_986_MC_BW_SWITCHING /* FhG: fix crash in bw and br switching with MC */ #define NONBE_FIX_975_JBM_USAN /* FhG: Fix issue #975, USAN in JBM decoding ad 13.2kbps */ -#define NONBE_FIX_982_OMASA_DELAY_COMP_5MS /* FhG : issue #982 : 5ms and 20ms output different for OMASA */ +#define NONBE_FIX_982_OMASA_DELAY_COMP_5MS /* FhG : issue #982 : 5ms and 20ms output different for OMASA */ +#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING /* FhG: issue 987: fix broken output with ParamMC to BINAURAL_REVERB rendering */ + +#define DISABLE_LIMITER + /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index da37b0ce96..27b6efb3a7 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -225,8 +225,12 @@ void ivas_renderer_select( #ifdef SPLIT_REND_WITH_HEAD_ROT if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) +#else +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL ) #else if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) +#endif #endif { #ifdef DEBUGGING -- GitLab From ea668d45f0ab59019a6bd792ae685414e77330d6 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Fri, 9 Feb 2024 12:36:10 +0100 Subject: [PATCH 02/16] do not disable the limiter --- lib_com/options.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index ac76eb3e52..d281254582 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -176,8 +176,6 @@ #define NONBE_FIX_982_OMASA_DELAY_COMP_5MS /* FhG : issue #982 : 5ms and 20ms output different for OMASA */ #define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING /* FhG: issue 987: fix broken output with ParamMC to BINAURAL_REVERB rendering */ -#define DISABLE_LIMITER - /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ -- GitLab From be4f170ed7b0428ddb5c9d26bacbecedff875dce Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Fri, 9 Feb 2024 15:52:06 +0100 Subject: [PATCH 03/16] apply rendering-setup fix in the split-rendering path too --- lib_dec/ivas_output_config.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index 27b6efb3a7..def7de11e0 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -224,7 +224,12 @@ void ivas_renderer_select( *internal_config = transport_config; #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) + +#else if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) +#endif #else #ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL ) -- GitLab From 2ac53f310086ee90455d6b0bd775d304e3ada7cb Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 14 Feb 2024 16:45:53 +0100 Subject: [PATCH 04/16] do not disable TD renderer for BINAURAL_ROOM_REVERB output from 5.1 and 7.1 format --- lib_com/options.h | 2 ++ lib_dec/ivas_output_config.c | 17 ++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index f5e2002526..8257e53980 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -180,6 +180,8 @@ #endif #define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING /* FhG: issue 987: fix broken output with ParamMC to BINAURAL_REVERB rendering */ +#define DISABLE_LIMITER + /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index def7de11e0..894b5b3683 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -224,18 +224,9 @@ void ivas_renderer_select( *internal_config = transport_config; #ifdef SPLIT_REND_WITH_HEAD_ROT -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) - -#else if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) -#endif -#else -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL ) #else if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) -#endif #endif { #ifdef DEBUGGING @@ -252,6 +243,10 @@ void ivas_renderer_select( { *renderer_type = RENDERER_BINAURAL_MIXER_CONV; } + else if (output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB) + { + *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; + } else { *renderer_type = RENDERER_BINAURAL_FASTCONV; @@ -267,7 +262,11 @@ void ivas_renderer_select( *renderer_type = RENDERER_BINAURAL_FASTCONV; } #endif +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + if ( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && !(output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB) ) +#else if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) +#endif { /* force HOA3 domain for rotation*/ *internal_config = IVAS_AUDIO_CONFIG_HOA3; -- GitLab From d685508bda1408420be644a5d1e14df536638ac9 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 14 Feb 2024 16:49:37 +0100 Subject: [PATCH 05/16] wrap new else if clause into ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING --- lib_dec/ivas_output_config.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index 894b5b3683..26e12695a5 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -243,10 +243,12 @@ void ivas_renderer_select( { *renderer_type = RENDERER_BINAURAL_MIXER_CONV; } +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING else if (output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB) { *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; } +#endif else { *renderer_type = RENDERER_BINAURAL_FASTCONV; -- GitLab From d4da0e7a80863049a1c1d4942ec7b7aca43063e9 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 14 Feb 2024 16:56:50 +0100 Subject: [PATCH 06/16] fix formatting --- lib_dec/ivas_output_config.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index 26e12695a5..61dfaef3f4 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -244,10 +244,10 @@ void ivas_renderer_select( *renderer_type = RENDERER_BINAURAL_MIXER_CONV; } #ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - else if (output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB) - { - *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; - } + else if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + { + *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; + } #endif else { @@ -265,7 +265,7 @@ void ivas_renderer_select( } #endif #ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - if ( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && !(output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB) ) + if ( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && !( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) #else if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) #endif -- GitLab From 89fa831d990cfd0d363a72d4ce0496f1994caa38 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 14 Feb 2024 17:20:36 +0100 Subject: [PATCH 07/16] re-enable limiter --- lib_com/options.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 8257e53980..f5e2002526 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -180,8 +180,6 @@ #endif #define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING /* FhG: issue 987: fix broken output with ParamMC to BINAURAL_REVERB rendering */ -#define DISABLE_LIMITER - /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ -- GitLab From b301e223133713bdee5abbb5281f4c3139e374cd Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 21 Feb 2024 15:43:20 +0100 Subject: [PATCH 08/16] scale binaural audio channels down to avoid clipping with BINAURAL_ROOM_REVERB --- lib_com/ivas_prot.h | 4 ++++ lib_com/options.h | 2 ++ lib_dec/ivas_binRenderer_internal.c | 18 ++++++++++++++++++ lib_dec/ivas_dirac_dec.c | 7 ++++++- lib_dec/ivas_mc_param_dec.c | 7 ++++++- lib_dec/ivas_mc_paramupmix_dec.c | 7 ++++++- lib_dec/ivas_output_config.c | 2 +- 7 files changed, 43 insertions(+), 4 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index d0c797e27d..aa94e4e053 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5225,6 +5225,10 @@ void ivas_binRenderer( #endif float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + , + AUDIO_CONFIG output_config /* i : output configuration */ +#endif ); void ivas_binaural_add_LFE( diff --git a/lib_com/options.h b/lib_com/options.h index 60b17001e0..0c51093178 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -191,6 +191,8 @@ #define NONBE_FIX_1000_G1_G2_SWB_TBE /* VA: issue 1000: avoid div by zero due to g1 + g2 being zero in SWB TBE */ #define NONBE_FIX_999_JBM_MCT_FLUSH /* FhG: issue #999: fix wrong flushing for MCT at a JBM rate switch */ +#define DISABLE_LIMITER + /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index feb59980cf..48e0f13cff 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1916,6 +1916,10 @@ void ivas_binRenderer( #endif float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + , + AUDIO_CONFIG output_config /* i : output configuration */ +#endif ) { int16_t chIdx, k; @@ -2051,6 +2055,20 @@ void ivas_binRenderer( } #endif +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + { + for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + { + for ( k = 0; k < numTimeSlots; k++ ) + { + v_multc( Cldfb_RealBuffer_Binaural[chIdx][k], 0.5f, Cldfb_RealBuffer_Binaural[chIdx][k], CLDFB_NO_CHANNELS_MAX ); + v_multc( Cldfb_ImagBuffer_Binaural[chIdx][k], 0.5f, Cldfb_ImagBuffer_Binaural[chIdx][k], CLDFB_NO_CHANNELS_MAX ); + } + } + } +#endif + /* Obtain the binaural dmx and compute the reverb */ if ( hBinRenderer->hReverb != NULL ) { diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index f7f152b738..d41f8376f4 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2407,7 +2407,12 @@ void ivas_dirac_dec_render_sf( #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG NULL, #endif - Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + , + st_ivas->hDecoderConfig->output_config +#endif + ); #ifdef SPLIT_REND_WITH_HEAD_ROT 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_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c index 45ed71c978..eaab7b4952 100644 --- a/lib_dec/ivas_mc_param_dec.c +++ b/lib_dec/ivas_mc_param_dec.c @@ -1825,7 +1825,12 @@ void ivas_param_mc_dec_render( #endif st_ivas->hCombinedOrientationData, hParamMC->subframe_nbslots[subframe_idx], - Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + , + st_ivas->hDecoderConfig->output_config +#endif + ); #ifdef SPLIT_REND_WITH_HEAD_ROT 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_mc_paramupmix_dec.c b/lib_dec/ivas_mc_paramupmix_dec.c index 2ff77228f8..9e9fea7e09 100644 --- a/lib_dec/ivas_mc_paramupmix_dec.c +++ b/lib_dec/ivas_mc_paramupmix_dec.c @@ -830,7 +830,12 @@ static void ivas_mc_paramupmix_dec_sf( st_ivas->hTcBuffer->subframe_nbslots[subframeIdx], Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer_subfr, - Cldfb_ImagBuffer_subfr ); + Cldfb_ImagBuffer_subfr +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + , + st_ivas->hDecoderConfig->output_config +#endif + ); #ifdef SPLIT_REND_WITH_HEAD_ROT 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_output_config.c b/lib_dec/ivas_output_config.c index db8ee3dded..e044aa76e6 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -243,7 +243,7 @@ void ivas_renderer_select( { *renderer_type = RENDERER_BINAURAL_MIXER_CONV; } -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING +#if 0 else if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; -- GitLab From a8dede3c41a2ee71b0ea5a5f931b9823fc7b5fba Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Thu, 22 Feb 2024 15:23:20 +0100 Subject: [PATCH 09/16] Revert "scale binaural audio channels down to avoid clipping with BINAURAL_ROOM_REVERB" This reverts commit b301e223133713bdee5abbb5281f4c3139e374cd. --- lib_com/ivas_prot.h | 4 ---- lib_com/options.h | 2 -- lib_dec/ivas_binRenderer_internal.c | 37 ----------------------------- lib_dec/ivas_dirac_dec.c | 7 +----- lib_dec/ivas_mc_param_dec.c | 7 +----- lib_dec/ivas_mc_paramupmix_dec.c | 7 +----- lib_dec/ivas_output_config.c | 2 +- 7 files changed, 4 insertions(+), 62 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index aa94e4e053..d0c797e27d 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5225,10 +5225,6 @@ void ivas_binRenderer( #endif float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - AUDIO_CONFIG output_config /* i : output configuration */ -#endif ); void ivas_binaural_add_LFE( diff --git a/lib_com/options.h b/lib_com/options.h index 12f4434116..073500f5b0 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -180,8 +180,6 @@ #define NONBE_FIX_1000_G1_G2_SWB_TBE /* VA: issue 1000: avoid div by zero due to g1 + g2 being zero in SWB TBE */ #define NONBE_FIX_999_JBM_MCT_FLUSH /* FhG: issue #999: fix wrong flushing for MCT at a JBM rate switch */ -#define DISABLE_LIMITER - /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 97a90171fd..7cbcf2dba4 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1916,10 +1916,6 @@ void ivas_binRenderer( #endif float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - AUDIO_CONFIG output_config /* i : output configuration */ -#endif ) { int16_t chIdx, k; @@ -2053,39 +2049,6 @@ void ivas_binRenderer( } } } -#endif - -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) - { - for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) - { - for ( k = 0; k < numTimeSlots; k++ ) - { - v_multc( Cldfb_RealBuffer_Binaural[pos_idx][chIdx][k], 0.5f, Cldfb_RealBuffer_Binaural[pos_idx][chIdx][k], hBinRenderer->conv_band ); - v_multc( Cldfb_ImagBuffer_Binaural[pos_idx][chIdx][k], 0.5f, Cldfb_ImagBuffer_Binaural[pos_idx][chIdx][k], hBinRenderer->conv_band ); - } - } - } - } -#else - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) - { - for ( k = 0; k < numTimeSlots; k++ ) - { - v_multc( Cldfb_RealBuffer_Binaural[chIdx][k], 0.5f, Cldfb_RealBuffer_Binaural[chIdx][k], hBinRenderer->conv_band ); - v_multc( Cldfb_ImagBuffer_Binaural[chIdx][k], 0.5f, Cldfb_ImagBuffer_Binaural[chIdx][k], hBinRenderer->conv_band ); - } - } - } -#endif - #endif /* Obtain the binaural dmx and compute the reverb */ diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index d41f8376f4..f7f152b738 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2407,12 +2407,7 @@ void ivas_dirac_dec_render_sf( #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG NULL, #endif - Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - st_ivas->hDecoderConfig->output_config -#endif - ); + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); #ifdef SPLIT_REND_WITH_HEAD_ROT 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_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c index eaab7b4952..45ed71c978 100644 --- a/lib_dec/ivas_mc_param_dec.c +++ b/lib_dec/ivas_mc_param_dec.c @@ -1825,12 +1825,7 @@ void ivas_param_mc_dec_render( #endif st_ivas->hCombinedOrientationData, hParamMC->subframe_nbslots[subframe_idx], - Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - st_ivas->hDecoderConfig->output_config -#endif - ); + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); #ifdef SPLIT_REND_WITH_HEAD_ROT 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_mc_paramupmix_dec.c b/lib_dec/ivas_mc_paramupmix_dec.c index 9e9fea7e09..2ff77228f8 100644 --- a/lib_dec/ivas_mc_paramupmix_dec.c +++ b/lib_dec/ivas_mc_paramupmix_dec.c @@ -830,12 +830,7 @@ static void ivas_mc_paramupmix_dec_sf( st_ivas->hTcBuffer->subframe_nbslots[subframeIdx], Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer_subfr, - Cldfb_ImagBuffer_subfr -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - st_ivas->hDecoderConfig->output_config -#endif - ); + Cldfb_ImagBuffer_subfr ); #ifdef SPLIT_REND_WITH_HEAD_ROT 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_output_config.c b/lib_dec/ivas_output_config.c index e044aa76e6..db8ee3dded 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -243,7 +243,7 @@ void ivas_renderer_select( { *renderer_type = RENDERER_BINAURAL_MIXER_CONV; } -#if 0 +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING else if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; -- GitLab From 2ad0fa862aa7bd143b3e07c7023e49ebcbf65342 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Thu, 22 Feb 2024 15:36:21 +0100 Subject: [PATCH 10/16] remove left-overs from experimantal binaural-signal scaling --- lib_dec/ivas_binRenderer_internal.c | 21 +++------------------ lib_rend/ivas_prot_rend.h | 4 ---- lib_rend/lib_rend.c | 28 ++++------------------------ 3 files changed, 7 insertions(+), 46 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 7cbcf2dba4..feb59980cf 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -2114,12 +2114,7 @@ void ivas_rend_CldfbMultiBinRendProcess( float Cldfb_Out_Real[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ float Cldfb_Out_Imag[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const int16_t low_res_pre_rend_rot, - const int16_t num_subframes -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - AUDIO_CONFIG output_config /* i : output configuration */ -#endif -) + const int16_t num_subframes ) { int16_t slot_idx, ch_idx, idx, pose_idx, i, j; int16_t sf_idx; @@ -2169,19 +2164,9 @@ void ivas_rend_CldfbMultiBinRendProcess( #endif #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - ivas_binRenderer( hCldfbRend, pMultiBinPoseData, *pCombinedOrientationData, MAX_PARAM_SPATIAL_SUBFRAMES, &head_track_post, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer_sfIn, Cldfb_ImagBuffer_sfIn -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - output_config -#endif - ); + ivas_binRenderer( hCldfbRend, pMultiBinPoseData, *pCombinedOrientationData, MAX_PARAM_SPATIAL_SUBFRAMES, &head_track_post, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer_sfIn, Cldfb_ImagBuffer_sfIn ); #else - ivas_binRenderer( hCldfbRend, pMultiBinPoseData, *pCombinedOrientationData, MAX_PARAM_SPATIAL_SUBFRAMES, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer_sfIn, Cldfb_ImagBuffer_sfIn -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - output_config -#endif - ); + ivas_binRenderer( hCldfbRend, pMultiBinPoseData, *pCombinedOrientationData, MAX_PARAM_SPATIAL_SUBFRAMES, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer_sfIn, Cldfb_ImagBuffer_sfIn ); #endif for ( pose_idx = 0; pose_idx < hCldfbRend->numPoses; pose_idx++ ) { diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index cb760871e8..975a2356aa 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1901,10 +1901,6 @@ void ivas_rend_CldfbMultiBinRendProcess( float Cldfb_Out_Imag[MAX_HEAD_ROT_POSES*BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const int16_t low_res_pre_rend_rot, const int16_t num_subframes -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - AUDIO_CONFIG output_config /* i : output configuration */ -#endif ); ivas_error ivas_rend_openCldfb( diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index d89abbb9a4..8194de9fba 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -7316,12 +7316,7 @@ static ivas_error renderSbaToMultiBinauralCldfb( float Cldfb_Out_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_Out_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const int16_t low_res_pre_rend_rot, - const int16_t num_subframes -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - AUDIO_CONFIG output_config /* i : output configuration */ -#endif -) + const int16_t num_subframes ) { float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; @@ -7329,12 +7324,7 @@ static ivas_error renderSbaToMultiBinauralCldfb( copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); ivas_rend_CldfbMultiBinRendProcess( sbaInput->cldfbRendWrapper.hCldfbRend, sbaInput->base.ctx.pCombinedOrientationData, &sbaInput->base.ctx.pSplitRendWrapper->multiBinPoseData, - Cldfb_RealBuffer, Cldfb_ImagBuffer, Cldfb_Out_Real, Cldfb_Out_Imag, low_res_pre_rend_rot, num_subframes -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - output_config -#endif - ); + Cldfb_RealBuffer, Cldfb_ImagBuffer, Cldfb_Out_Real, Cldfb_Out_Imag, low_res_pre_rend_rot, num_subframes ); return IVAS_ERR_OK; } @@ -7359,12 +7349,7 @@ static ivas_error renderSbaToSplitBinaural( if ( sbaInput->base.ctx.hhRendererConfig[0]->split_rend_config.rendererSelection == IVAS_SPLIT_REND_RENDERER_SELECTION_FASTCONV ) { if ( ( renderSbaToMultiBinauralCldfb( sbaInput, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, low_res_pre_rend_rot, - getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - outConfig -#endif - ) ) != IVAS_ERR_OK ) + getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) { return error; } @@ -7409,12 +7394,7 @@ static ivas_error renderSbaToBinaural( float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; if ( ( error = renderSbaToMultiBinauralCldfb( sbaInput, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, 0, - getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - , - outConfig -#endif - ) ) != IVAS_ERR_OK ) + getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) { return error; } -- GitLab From f6a9546fa79d3115cddba176cc4661d3874d66f2 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Thu, 22 Feb 2024 15:44:16 +0100 Subject: [PATCH 11/16] do not swith do BRIRs for BINAURAL_ROOM_REVERB --- lib_dec/ivas_output_config.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index db8ee3dded..1e31f0aac4 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -243,12 +243,6 @@ void ivas_renderer_select( { *renderer_type = RENDERER_BINAURAL_MIXER_CONV; } -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING - else if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; - } -#endif else { *renderer_type = RENDERER_BINAURAL_FASTCONV; -- GitLab From b123958c5f964abf77b25bfbae56e532f290edea Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 26 Feb 2024 12:05:01 +0100 Subject: [PATCH 12/16] rename NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING to NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_A --- lib_com/options.h | 2 +- lib_dec/ivas_output_config.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 64c96ac769..cdd45dbd68 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -177,7 +177,7 @@ #ifdef SPLIT_REND_WITH_HEAD_ROT #define SPLIT_REND_LCLD_5MS /* Dlb: LCLD 5ms framing operation */ #endif -#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING /* FhG: issue 987: fix broken output with ParamMC to BINAURAL_REVERB rendering */ +#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_A /* FhG: issue 987: fix broken output with ParamMC to BINAURAL_REVERB rendering */ #define NONBE_FIX_984_OMASA_EXT_OUTPUT /* Nokia: issue #984: complete the OMASA EXT output implementation */ #define NONBE_FIX_1000_G1_G2_SWB_TBE /* VA: issue 1000: avoid div by zero due to g1 + g2 being zero in SWB TBE */ diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index 1e31f0aac4..57876353a6 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -248,7 +248,7 @@ void ivas_renderer_select( *renderer_type = RENDERER_BINAURAL_FASTCONV; } -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_A if ( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && !( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) #else if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) -- GitLab From 30751c5582ab140f6a3ef334dd80234683d4a469 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 27 Feb 2024 13:05:14 +0100 Subject: [PATCH 13/16] implement downmixing of HOA3 to stereo for the reverberator input --- lib_com/options.h | 3 +- lib_dec/ivas_binRenderer_internal.c | 50 ++++++++++++++++++++++------- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index cdd45dbd68..86ea6322c7 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -177,7 +177,8 @@ #ifdef SPLIT_REND_WITH_HEAD_ROT #define SPLIT_REND_LCLD_5MS /* Dlb: LCLD 5ms framing operation */ #endif -#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_A /* FhG: issue 987: fix broken output with ParamMC to BINAURAL_REVERB rendering */ +//#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_A /* FhG: issue 987: solution a: switch to SD */ +#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_B /* FhG: issue 987: solution b: downmix HOA3 to stereo a input for the reverberator */ #define NONBE_FIX_984_OMASA_EXT_OUTPUT /* Nokia: issue #984: complete the OMASA EXT output implementation */ #define NONBE_FIX_1000_G1_G2_SWB_TBE /* VA: issue 1000: avoid div by zero due to g1 + g2 being zero in SWB TBE */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index feb59980cf..97b80e3f1a 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -952,22 +952,48 @@ static void ivas_binaural_obtain_DMX( set_zero( outRealRightPtr, CLDFB_NO_CHANNELS_MAX ); set_zero( outImagRightPtr, CLDFB_NO_CHANNELS_MAX ); - for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) - { - float foa_const = hBinRenderer->hReverb->foa_enc[chIdx][1]; +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_B + /*Ambisonics input requires different processing*/ + if ( hBinRenderer->nInChannels == 16 ) + { + float *inRealPtr_W, *inImagPtr_W; + float *inRealPtr_Y, *inImagPtr_Y; - inRealPtr = (float *) &( RealBuffer[chIdx][k][0] ); - inImagPtr = (float *) &( ImagBuffer[chIdx][k][0] ); + inRealPtr_W = (float *) &( RealBuffer[0][k][0] ); + inImagPtr_W = (float *) &( ImagBuffer[0][k][0] ); + + inRealPtr_Y = (float *) &( RealBuffer[1][k][0] ); + inImagPtr_Y = (float *) &( ImagBuffer[1][k][0] ); for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) { - outRealLeftPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f + foa_const ); - outImagLeftPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f + foa_const ); - - outRealRightPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f - foa_const ); - outImagRightPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f - foa_const ); - } - } + outRealLeftPtr[bandIdx] = inRealPtr_W[bandIdx] + inRealPtr_Y[bandIdx]; + outImagLeftPtr[bandIdx] = inImagPtr_W[bandIdx] + inImagPtr_Y[bandIdx]; + + outRealRightPtr[bandIdx] = inRealPtr_W[bandIdx] - inRealPtr_Y[bandIdx]; + outImagRightPtr[bandIdx] = inImagPtr_W[bandIdx] - inImagPtr_Y[bandIdx]; + } + } + else +#endif + { + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + float foa_const = hBinRenderer->hReverb->foa_enc[chIdx][1]; + + inRealPtr = (float *) &( RealBuffer[chIdx][k][0] ); + inImagPtr = (float *) &( ImagBuffer[chIdx][k][0] ); + + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + outRealLeftPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f + foa_const ); + outImagLeftPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f + foa_const ); + + outRealRightPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f - foa_const ); + outImagRightPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f - foa_const ); + } + } + } } } -- GitLab From fb3c47a76822ba026a2a603e044ff0852736beb0 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 27 Feb 2024 13:14:26 +0100 Subject: [PATCH 14/16] fix formatting --- lib_dec/ivas_binRenderer_internal.c | 50 ++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 97b80e3f1a..b48a352a71 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -954,15 +954,15 @@ static void ivas_binaural_obtain_DMX( #ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_B /*Ambisonics input requires different processing*/ - if ( hBinRenderer->nInChannels == 16 ) - { + if ( hBinRenderer->nInChannels == 16 ) + { float *inRealPtr_W, *inImagPtr_W; float *inRealPtr_Y, *inImagPtr_Y; inRealPtr_W = (float *) &( RealBuffer[0][k][0] ); inImagPtr_W = (float *) &( ImagBuffer[0][k][0] ); - inRealPtr_Y = (float *) &( RealBuffer[1][k][0] ); + inRealPtr_Y = (float *) &( RealBuffer[1][k][0] ); inImagPtr_Y = (float *) &( ImagBuffer[1][k][0] ); for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) @@ -970,30 +970,30 @@ static void ivas_binaural_obtain_DMX( outRealLeftPtr[bandIdx] = inRealPtr_W[bandIdx] + inRealPtr_Y[bandIdx]; outImagLeftPtr[bandIdx] = inImagPtr_W[bandIdx] + inImagPtr_Y[bandIdx]; - outRealRightPtr[bandIdx] = inRealPtr_W[bandIdx] - inRealPtr_Y[bandIdx]; + outRealRightPtr[bandIdx] = inRealPtr_W[bandIdx] - inRealPtr_Y[bandIdx]; outImagRightPtr[bandIdx] = inImagPtr_W[bandIdx] - inImagPtr_Y[bandIdx]; - } - } - else + } + } + else #endif - { - for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) - { - float foa_const = hBinRenderer->hReverb->foa_enc[chIdx][1]; - - inRealPtr = (float *) &( RealBuffer[chIdx][k][0] ); - inImagPtr = (float *) &( ImagBuffer[chIdx][k][0] ); - - for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - outRealLeftPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f + foa_const ); - outImagLeftPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f + foa_const ); - - outRealRightPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f - foa_const ); - outImagRightPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f - foa_const ); - } - } - } + { + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + float foa_const = hBinRenderer->hReverb->foa_enc[chIdx][1]; + + inRealPtr = (float *) &( RealBuffer[chIdx][k][0] ); + inImagPtr = (float *) &( ImagBuffer[chIdx][k][0] ); + + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + outRealLeftPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f + foa_const ); + outImagLeftPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f + foa_const ); + + outRealRightPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f - foa_const ); + outImagRightPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f - foa_const ); + } + } + } } } -- GitLab From 0be39a6acaa2be01d34de00c4ef2dd41ddc06fa9 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 28 Feb 2024 16:35:11 +0100 Subject: [PATCH 15/16] delete code under ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_A --- lib_com/options.h | 3 +-- lib_dec/ivas_binRenderer_internal.c | 2 +- lib_dec/ivas_output_config.c | 4 ---- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 42c1122dab..fa896a857a 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -183,8 +183,7 @@ #define NONBE_FIX_1012_1013_JBM_FLUSH_BUFFER /* FhG: issues #1012, 1013: JBM flush function uses wrong output buffer */ #define NONBE_FIX_1004_USAN_DTX_MASA_NO_DIRS /* Nokia: fix USAN error caused by non-setting of correctly the number of MASA directions in DTX */ -//#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_A /* FhG: issue 987: solution a: switch to SD */ -#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_B /* FhG: issue 987: solution b: downmix HOA3 to stereo a input for the reverberator */ +#define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING /* FhG: issue 987: solution b: downmix HOA3 to stereo a input for the reverberator */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index b48a352a71..68d630909f 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -952,7 +952,7 @@ static void ivas_binaural_obtain_DMX( set_zero( outRealRightPtr, CLDFB_NO_CHANNELS_MAX ); set_zero( outImagRightPtr, CLDFB_NO_CHANNELS_MAX ); -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_B +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING /*Ambisonics input requires different processing*/ if ( hBinRenderer->nInChannels == 16 ) { diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index 57876353a6..c93b16dcdb 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -248,11 +248,7 @@ void ivas_renderer_select( *renderer_type = RENDERER_BINAURAL_FASTCONV; } -#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING_A - if ( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && !( output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) -#else if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) -#endif { /* force HOA3 domain for rotation*/ *internal_config = IVAS_AUDIO_CONFIG_HOA3; -- GitLab From 4864891a1528f499e6fd596d8793fbe032b1e157 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 28 Feb 2024 16:50:53 +0100 Subject: [PATCH 16/16] do not initialize foa_enc when generating reverb from an ambisonics signal --- lib_dec/ivas_binRenderer_internal.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 68d630909f..58d24b87ae 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1280,7 +1280,11 @@ ivas_error ivas_binRenderer_open( if ( hBinRenderer->hReverb != NULL ) { +#ifdef NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING + if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 && hBinRenderer->nInChannels != 16 ) +#else if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 ) +#endif { for ( k = 0; k < 11; k++ ) { -- GitLab