diff --git a/apps/renderer.c b/apps/renderer.c index a11d077258dcf134ad4bc59e2779360da992b5d1..cfdaeee4692b2408715d7bde5cb53c6e84d4eb9b 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1174,7 +1174,53 @@ int main( fprintf( stderr, "\nError in Renderer Config Init: %s\n", ivas_error_to_string( error ) ); goto cleanup; } +#ifdef FIX_1452_DEFAULT_REVERB + if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + { + /* Set reverb room size if specified or select based automatically based on default per input formats */ + IVAS_ROOM_SIZE_T selectedReverbRoomSize = args.reverbRoomSize; + if ( selectedReverbRoomSize == IVAS_ROOM_SIZE_AUTO ) + { + bool combinedFormat = false; + selectedReverbRoomSize = IVAS_ROOM_SIZE_MEDIUM; + + /* ISM present with MASA/SBA inputs; treat as combined format */ + if ( args.inConfig.numAudioObjects > 0 && ( args.inConfig.numMasaBuses > 0 || args.inConfig.numAmbisonicsBuses > 0 ) ) + { + combinedFormat = true; + } + + if ( combinedFormat ) + { + selectedReverbRoomSize = IVAS_ROOM_SIZE_MEDIUM; + } + else + { + /* Only set large if ISM is present alone, MASA and Ambisonic have been checked above */ + if ( args.inConfig.numAudioObjects > 0 && args.inConfig.numMultiChannelBuses == 0 ) + { + selectedReverbRoomSize = IVAS_ROOM_SIZE_LARGE; + } + /* if only MC is present, set medium; Will not be overridden by the subsequent block */ + else if ( args.inConfig.numMultiChannelBuses > 0 ) + { + selectedReverbRoomSize = IVAS_ROOM_SIZE_MEDIUM; + } + else if ( args.inConfig.numMasaBuses > 0 || args.inConfig.numAmbisonicsBuses > 0 ) + { + selectedReverbRoomSize = IVAS_ROOM_SIZE_SMALL; + } + } + } + + if ( ( error = IVAS_REND_SetReverbRoomSize( hIvasRend, selectedReverbRoomSize ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError setting reverb room size\n" ); + goto cleanup; + } + } +#endif if ( args.renderConfigFilePath[0] != '\0' ) { diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 2c83a0264de03f2235468258f5d97480f5d1f5a9..7bb753feb2d7974d3d2fa872dc5e0eb5261c498d 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1640,6 +1640,17 @@ typedef enum #define IVAS_REVERB_DEFAULT_M_N_BANDS 31 #define IVAS_REVERB_DEFAULT_S_N_BANDS 60 +#ifdef FIX_1452_DEFAULT_REVERB +#define IVAS_REVERB_DEFAULT_S_ACOUSTIC_PRE_DELAY_FX 2013266 /* 0.015f in Q27 */ +#define IVAS_REVERB_DEFAULT_S_INPUT_PRE_DELAY_FX 2684355 /* 0.02f in Q27 */ + +#define IVAS_REVERB_DEFAULT_M_ACOUSTIC_PRE_DELAY_FX 2013266 /* 0.015f in Q27 */ +#define IVAS_REVERB_DEFAULT_M_INPUT_PRE_DELAY_FX 2684355 /* 0.02f in Q27 */ + +#define IVAS_REVERB_DEFAULT_L_ACOUSTIC_PRE_DELAY_FX 2181038 /* 0.01625f in Q27 */ +#define IVAS_REVERB_DEFAULT_L_INPUT_PRE_DELAY_FX 13421773 /* 0.1f in Q27 */ +#endif + #define LR_IAC_LENGTH_NR_FC ( RV_LENGTH_NR_FC ) #define LR_IAC_LENGTH_NR_FC_16KHZ ( RV_LENGTH_NR_FC_16KHZ ) diff --git a/lib_com/options.h b/lib_com/options.h index 074d039191490122c3490f21950c73cef83ca8a4..54bfbc1465b1f99950db314ca6e34ab6d4f37377 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -121,6 +121,7 @@ #define FIX_BASOP_2522_MAP_PARAMS_DIRAC_STEREO /* FhG: BASOP issue 2522: Fix copy and paste error for side_gain calculation in map_params_dirac_to_stereo() */ #define FIX_2505_IVAS_DEC_SEGFAULT /* FhG: BASOP #2505: Add headroom to input of ivas_rend_crendProcessSubframe_fx() for ivas_mdft_fx() calculation */ #define HARMONIZE_DoRTFTn /* VA: harmonize functions DoRTFTn_fx() and DoRTFTn_fx_ivas() */ +#define FIX_1452_DEFAULT_REVERB /* Nokia/Philips/FhG: Fix default room presets and their usage in renderer */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_rend/ivas_render_config_fx.c b/lib_rend/ivas_render_config_fx.c index 81f66bf60af8e61e1eac8098d2204cde18c0265f..08697038183cc1aa0612635a43de164428883896 100644 --- a/lib_rend/ivas_render_config_fx.c +++ b/lib_rend/ivas_render_config_fx.c @@ -35,6 +35,9 @@ #include "prot_fx.h" #include "ivas_prot_rend_fx.h" #include "ivas_rom_rend.h" +#ifdef FIX_1452_DEFAULT_REVERB +#include "ivas_cnst.h" +#endif #include "ivas_rom_TdBinauralRenderer.h" #include "wmc_auto.h" @@ -42,6 +45,7 @@ * Local constants *-----------------------------------------------------------------------*/ +#ifndef FIX_1452_DEFAULT_REVERB #define IVAS_REVERB_DEFAULT_L_PRE_DELAY_FX 2147484 // 0.016 #define IVAS_REVERB_DEFAULT_L_INPUT_DELAY_FX 13421773 // 0.1 @@ -50,6 +54,7 @@ #define IVAS_REVERB_DEFAULT_M_PRE_DELAY_FX 1677722 // 0.0125f #define IVAS_REVERB_DEFAULT_M_INPUT_DELAY_FX 0 // 0.0f +#endif #define IVAS_REVERB_DEFAULT_USE_ER 0 @@ -117,10 +122,17 @@ ivas_error ivas_render_config_init_from_rom_fx( move16(); ( *hRenderConfig )->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_L_N_BANDS; move16(); +#ifdef FIX_1452_DEFAULT_REVERB + ( *hRenderConfig )->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_L_ACOUSTIC_PRE_DELAY_FX; + move32(); + ( *hRenderConfig )->roomAcoustics.inputPreDelay_fx = IVAS_REVERB_DEFAULT_L_INPUT_PRE_DELAY_FX; + move32(); +#else ( *hRenderConfig )->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_L_PRE_DELAY_FX; move32(); ( *hRenderConfig )->roomAcoustics.inputPreDelay_fx = IVAS_REVERB_DEFAULT_L_INPUT_DELAY_FX; move32(); +#endif ( *hRenderConfig )->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; move16(); set32_fx( &( *hRenderConfig )->roomAcoustics.pFc_input_fx[0], 0, CLDFB_NO_CHANNELS_MAX ); @@ -182,17 +194,30 @@ ivas_error ivas_render_config_change_defaults( IVAS_DefaultReverbSize defaultReverbSize /* i: Reverb default size */ ) { +#ifdef FIX_1452_DEFAULT_REVERB + hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; + move16(); + +#endif + SWITCH( defaultReverbSize ) { case DEFAULT_REVERB_SMALL: hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_S_N_BANDS; move16(); +#ifdef FIX_1452_DEFAULT_REVERB + hRenderConfig->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_S_ACOUSTIC_PRE_DELAY_FX; + move32(); + hRenderConfig->roomAcoustics.inputPreDelay_fx = IVAS_REVERB_DEFAULT_S_INPUT_PRE_DELAY_FX; + move32(); +#else hRenderConfig->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_S_PRE_DELAY_FX; move32(); hRenderConfig->roomAcoustics.inputPreDelay_fx = IVAS_REVERB_DEFAULT_S_INPUT_DELAY_FX; move32(); hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; move16(); +#endif set_zero_fx( &hRenderConfig->roomAcoustics.pFc_input_fx[0], CLDFB_NO_CHANNELS_MAX ); set_zero_fx( &hRenderConfig->roomAcoustics.pAcoustic_rt60_fx[0], CLDFB_NO_CHANNELS_MAX ); set_zero_fx( &hRenderConfig->roomAcoustics.pAcoustic_dsr_fx[0], CLDFB_NO_CHANNELS_MAX ); @@ -204,12 +229,19 @@ ivas_error ivas_render_config_change_defaults( case DEFAULT_REVERB_MEDIUM: hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_M_N_BANDS; move16(); +#ifdef FIX_1452_DEFAULT_REVERB + hRenderConfig->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_M_ACOUSTIC_PRE_DELAY_FX; + move32(); + hRenderConfig->roomAcoustics.inputPreDelay_fx = IVAS_REVERB_DEFAULT_M_INPUT_PRE_DELAY_FX; + move32(); +#else hRenderConfig->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_M_PRE_DELAY_FX; move32(); hRenderConfig->roomAcoustics.inputPreDelay_fx = IVAS_REVERB_DEFAULT_M_INPUT_DELAY_FX; move32(); hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; move16(); +#endif set_zero_fx( &hRenderConfig->roomAcoustics.pFc_input_fx[0], CLDFB_NO_CHANNELS_MAX ); set_zero_fx( &hRenderConfig->roomAcoustics.pAcoustic_rt60_fx[0], CLDFB_NO_CHANNELS_MAX ); set_zero_fx( &hRenderConfig->roomAcoustics.pAcoustic_dsr_fx[0], CLDFB_NO_CHANNELS_MAX ); @@ -221,12 +253,19 @@ ivas_error ivas_render_config_change_defaults( case DEFAULT_REVERB_LARGE: hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_L_N_BANDS; move16(); +#ifdef FIX_1452_DEFAULT_REVERB + hRenderConfig->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_L_ACOUSTIC_PRE_DELAY_FX; + move32(); + hRenderConfig->roomAcoustics.inputPreDelay_fx = IVAS_REVERB_DEFAULT_L_INPUT_PRE_DELAY_FX; + move32(); +#else hRenderConfig->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_L_PRE_DELAY_FX; move32(); hRenderConfig->roomAcoustics.inputPreDelay_fx = IVAS_REVERB_DEFAULT_L_INPUT_DELAY_FX; move32(); hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; move16(); +#endif set_zero_fx( &hRenderConfig->roomAcoustics.pFc_input_fx[0], CLDFB_NO_CHANNELS_MAX ); set_zero_fx( &hRenderConfig->roomAcoustics.pAcoustic_rt60_fx[0], CLDFB_NO_CHANNELS_MAX ); set_zero_fx( &hRenderConfig->roomAcoustics.pAcoustic_dsr_fx[0], CLDFB_NO_CHANNELS_MAX ); diff --git a/lib_rend/ivas_rom_rend_fx.c b/lib_rend/ivas_rom_rend_fx.c index 18c018f293a94db497482b3a2b3ad83502f1de83..cd57355f57ab1f40dc2a24be567ea71e9ecfe36d 100644 --- a/lib_rend/ivas_rom_rend_fx.c +++ b/lib_rend/ivas_rom_rend_fx.c @@ -270,12 +270,21 @@ const Word32 ivas_reverb_default_small_RT60_fx[IVAS_REVERB_DEFAULT_S_N_BANDS] = const Word32 ivas_reverb_default_small_DSR_fx[IVAS_REVERB_DEFAULT_S_N_BANDS] = { +#ifdef FIX_1452_DEFAULT_REVERB + 7492, 3154, 2033, 1848, 2280, 2721, 2988, 3693, 4165, 4276, + 3797, 3273, 2676, 2205, 1756, 1386, 1142, 932, 832, 952, + 1084, 1320, 1508, 1675, 1659, 1610, 1475, 1263, 1118, 981, + 876, 769, 666, 612, 535, 467, 429, 379, 351, 321, + 296, 273, 250, 226, 203, 180, 160, 149, 141, 133, + 129, 123, 118, 115, 111, 110, 107, 106, 106, 105 +#else 16773, 7628, 5046, 4620, 5666, 6853, 7771, 9876, 11530, 12337, 11421, 10287, 8791, 7565, 6305, 5215, 4504, 3860, 3627, 4363, 5246, 6739, 8151, 9611, 10088, 10416, 10154, 9187, 8628, 8012, 7491, 6931, 6320, 6074, 5589, 5145, 4977, 4646, 4558, 4411, 4331, 4253, 4147, 4018, 3821, 3629, 3428, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361 +#endif }; const Word32 ivas_reverb_default_medium_fc_fx[IVAS_REVERB_DEFAULT_M_N_BANDS] = @@ -304,6 +313,16 @@ const Word32 ivas_reverb_default_medium_RT60_fx[IVAS_REVERB_DEFAULT_M_N_BANDS] = const Word32 ivas_reverb_default_medium_DSR_fx[IVAS_REVERB_DEFAULT_M_N_BANDS] = { +#ifdef FIX_1452_DEFAULT_REVERB + 5324, 5580, 5917, 6365, + 6903, 7617, 8575, 9732, + 11218, 13358, 15873, 14689, + 13167, 11206, 8942, 6549, + 5536, 4354, 4110, 4418, + 5367, 6294, 8399, 8798, + 5894, 2958, 2403, 3968, + 1999, 840, 433 +#else 15978, 16341, 16813, 17430, 18156, 19101, 20335, 21788, 23603, 26145, 29050, 27037, @@ -312,6 +331,7 @@ const Word32 ivas_reverb_default_medium_DSR_fx[IVAS_REVERB_DEFAULT_M_N_BANDS] = 10526, 12575, 17260, 19074, 13653, 7464, 6609, 12688, 7607, 3835, 2373 +#endif }; const Word32 ivas_reverb_default_large_fc_fx[IVAS_REVERB_DEFAULT_L_N_BANDS] /*Q16*/ = diff --git a/lib_rend/lib_rend_fx.c b/lib_rend/lib_rend_fx.c index 72a2eca3e9fdc298206c9d5f7bd6fd028d55464a..0971b866079cfaf123852cc67f8756f25913a31d 100644 --- a/lib_rend/lib_rend_fx.c +++ b/lib_rend/lib_rend_fx.c @@ -5554,6 +5554,10 @@ ivas_error IVAS_REND_FeedRenderConfig( hRenderConfig->roomAcoustics.aeID = renderConfig.roomAcoustics.aeID; move16(); +#ifdef FIX_1452_DEFAULT_REVERB + hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_UNSET; + move32(); +#endif hRenderConfig->roomAcoustics.nBands = renderConfig.roomAcoustics.nBands; move16(); hRenderConfig->roomAcoustics.acousticPreDelay_fx = renderConfig.roomAcoustics.acousticPreDelay_fx; @@ -6093,9 +6097,13 @@ ivas_error IVAS_REND_SetReverbRoomSize( BREAK; case IVAS_ROOM_SIZE_AUTO: default: +#ifdef FIX_1452_DEFAULT_REVERB + assert( 0 && "Room size is not set" ); +#else hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_UNSET; move32(); BREAK; /* will be setup in IVAS_REND_AddInput() */ +#endif } IF( hIvasRend->hRendererConfig != NULL ) diff --git a/lib_util/render_config_reader.c b/lib_util/render_config_reader.c index 318072fe8566da06ff6755c612e8f231b09868ed..b153ea2d9daf0d331563a328da3963d14fcbca82 100644 --- a/lib_util/render_config_reader.c +++ b/lib_util/render_config_reader.c @@ -2326,6 +2326,9 @@ ivas_error RenderConfigReader_read( aeHasERsize = aeHasERabs = FALSE; params_idx = 0; pValue = (char *) calloc( strlen( pParams ), sizeof( char ) ); +#ifdef FIX_1452_DEFAULT_REVERB + hRenderConfig->roomAcoustics.acousticPreDelay_fx = IVAS_REVERB_DEFAULT_L_ACOUSTIC_PRE_DELAY_FX; +#endif while ( sscanf( pParams + params_idx, "%64[^=]=%[^;];", item, pValue ) == 2 ) { params_idx += (int32_t) ( strlen( item ) + strlen( pValue ) + 2 ); @@ -2941,6 +2944,9 @@ ivas_error RenderConfigReader_getAcousticEnvironment( { if ( id == pRenderConfigReader->pAE[n].id ) { +#ifdef FIX_1452_DEFAULT_REVERB + pAcEnv->aeID = (UWord16) pRenderConfigReader->pAE[n].id; +#endif pAcEnv->nBands = (int16_t) pRenderConfigReader->pAE[n].pFG->nrBands; pAcEnv->inputPreDelay_fx = (Word32) ( pRenderConfigReader->pAE[n].preDelay * ONE_IN_Q27 ); if ( pRenderConfigReader->pAE[n].preDelay > INPUTPREDELAY_MAX ||