diff --git a/apps/decoder.c b/apps/decoder.c index f6b55ba00f5851cf9aa35d911047ba98f45b2059..ca5b010fb0ac5b4826e8899306565946493aa06f 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -39,6 +39,9 @@ #include "evs_rtp_payload.h" #include "ism_file_writer.h" #include "ivas_rtp_file.h" +#ifdef FIX_1452_DEFAULT_REVERB +#include "ivas_cnst.h" +#endif #include "jbm_file_writer.h" #include "hrtf_file_reader.h" #include "ls_custom_file_reader.h" diff --git a/apps/renderer.c b/apps/renderer.c index 491433d645a25ba2da700da30c92c9187391f336..0d313f9a94df449768e3785666edfbeb414a722c 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -50,6 +50,9 @@ #include "split_render_file_read_write.h" #include "split_rend_bfi_file_reader.h" #include "vector3_pair_file_reader.h" +#ifdef FIX_1452_DEFAULT_REVERB +#include "ivas_cnst.h" +#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -1087,6 +1090,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 ( ( 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/common_api_types.h b/lib_com/common_api_types.h index ab9ae0ad3343a61714792a70eadcbc9b71ec7131..a0e420c3660dcb457d57efbea8bca4cdd4a3f55e 100644 --- a/lib_com/common_api_types.h +++ b/lib_com/common_api_types.h @@ -60,7 +60,9 @@ #define IVAS_ROOM_ABS_COEFF 6 #define IVAS_REVERB_PREDELAY_MAX 20 /* Max input delay for reverb module */ #define IVAS_ER_LIST_HEIGHT 1.6f -#define IVAS_DEFAULT_AEID 65535 +#ifndef FIX_1452_DEFAULT_REVERB +#define IVAS_DEFAULT_AEID 65535 +#endif /* JBM constants for adaptive-playout */ #define IVAS_TIME_SCALE_MIN 50 /* min. time-scaling [%] */ diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 609fb930aca67722e39b8bcacf6bb9eaf46c0aff..05f5ea29d9639c7aafd56f5304706aeec31e60a6 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1593,6 +1593,14 @@ 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_SYNTH_PRE_DELAY 0.016f +#define IVAS_REVERB_DEFAULT_S_INPUT_PRE_DELAY 0.0f +#define IVAS_REVERB_DEFAULT_M_INPUT_PRE_DELAY 0.0f +#define IVAS_REVERB_DEFAULT_L_INPUT_PRE_DELAY 0.1f +#define IVAS_DEFAULT_AEID 65535u +#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 3bc10a191e06cedf885474468f31482908e30b1f..a2228d24c247cac7e28eb5dcad1f81d6c09e4018 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -172,6 +172,7 @@ #define FIX_1435_MOVE_STEREO_PANNING /* VA: issue 1435: do the EVS stereo panning in the renderer */ +#define FIX_1452_DEFAULT_REVERB /* Philips/Nokia: Default room sizes support */ #define FIX_1454_FIX_STEREO_TO_FOA_JBM /* VA: issue 1454: fix buggy stereo to FOA in JBM */ #define FIX_1461_CNG_BW_SWITCHING /* Eri: issue 1461: Stereo parameters are not updated when SID/NODATA forces BW to stay the same */ diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index f4348b2cf062ddd000da7340661d5d496e6a00f5..e01478caa9e9988e843f3a2354efc869d9119786 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -35,6 +35,9 @@ #include "prot.h" #include "ivas_prot_rend.h" #include "ivas_rom_rend.h" +#ifdef FIX_1452_DEFAULT_REVERB +#include "ivas_cnst.h" +#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -45,6 +48,7 @@ * Local constants *-----------------------------------------------------------------------*/ +#ifndef FIX_1452_DEFAULT_REVERB #define IVAS_REVERB_DEFAULT_L_PRE_DELAY 0.016f #define IVAS_REVERB_DEFAULT_L_INPUT_DELAY 0.1f @@ -53,6 +57,7 @@ #define IVAS_REVERB_DEFAULT_M_PRE_DELAY 0.0125f #define IVAS_REVERB_DEFAULT_M_INPUT_DELAY 0.0f +#endif #define IVAS_REVERB_DEFAULT_USE_ER 0 @@ -118,8 +123,13 @@ ivas_error ivas_render_config_init_from_rom( ( *hRenderConfig )->roomAcoustics.aeID = IVAS_DEFAULT_AEID; ( *hRenderConfig )->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_L_N_BANDS; +#ifdef FIX_1452_DEFAULT_REVERB + ( *hRenderConfig )->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_SYNTH_PRE_DELAY; + ( *hRenderConfig )->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_L_INPUT_PRE_DELAY; +#else ( *hRenderConfig )->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_L_PRE_DELAY; ( *hRenderConfig )->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_L_INPUT_DELAY; +#endif ( *hRenderConfig )->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; set_zero( &( *hRenderConfig )->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX ); set_zero( &( *hRenderConfig )->roomAcoustics.pAcoustic_rt60[0], CLDFB_NO_CHANNELS_MAX ); @@ -167,13 +177,14 @@ ivas_error ivas_render_config_change_defaults( IVAS_DefaultReverbSize defaultReverbSize /* i: Reverb default size */ ) { + hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_SYNTH_PRE_DELAY; + hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; + switch ( defaultReverbSize ) { case DEFAULT_REVERB_SMALL: hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_S_N_BANDS; - hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_S_PRE_DELAY; - hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_S_INPUT_DELAY; - hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; + hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_S_INPUT_PRE_DELAY; set_zero( &hRenderConfig->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX ); set_zero( &hRenderConfig->roomAcoustics.pAcoustic_rt60[0], CLDFB_NO_CHANNELS_MAX ); set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); @@ -184,9 +195,7 @@ ivas_error ivas_render_config_change_defaults( break; case DEFAULT_REVERB_MEDIUM: hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_M_N_BANDS; - hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_M_PRE_DELAY; - hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_M_INPUT_DELAY; - hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; + hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_M_INPUT_PRE_DELAY; set_zero( &hRenderConfig->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX ); set_zero( &hRenderConfig->roomAcoustics.pAcoustic_rt60[0], CLDFB_NO_CHANNELS_MAX ); set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); @@ -197,9 +206,7 @@ ivas_error ivas_render_config_change_defaults( break; case DEFAULT_REVERB_LARGE: hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_L_N_BANDS; - hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_L_PRE_DELAY; - hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_L_INPUT_DELAY; - hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; + hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_L_INPUT_PRE_DELAY; set_zero( &hRenderConfig->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX ); set_zero( &hRenderConfig->roomAcoustics.pAcoustic_rt60[0], CLDFB_NO_CHANNELS_MAX ); set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 9462886b3f5cb2f9ef8b63108d43f4eb17cdf841..aa3bd412aa69fccd91269e18877aecb55df66794 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -4663,6 +4663,9 @@ ivas_error IVAS_REND_FeedRenderConfig( hRenderConfig = hIvasRend->hRendererConfig; hRenderConfig->roomAcoustics.aeID = renderConfig.roomAcoustics.aeID; +#ifdef FIX_1452_DEFAULT_REVERB + hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_UNSET; +#endif hRenderConfig->roomAcoustics.nBands = renderConfig.roomAcoustics.nBands; hRenderConfig->roomAcoustics.acousticPreDelay = renderConfig.roomAcoustics.acousticPreDelay; hRenderConfig->roomAcoustics.inputPreDelay = renderConfig.roomAcoustics.inputPreDelay; @@ -5249,8 +5252,7 @@ ivas_error IVAS_REND_SetReverbRoomSize( break; case IVAS_ROOM_SIZE_AUTO: default: - hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_UNSET; - break; /* will be setup in IVAS_REND_AddInput() */ + assert( 0 && "Room size is not set" ); } if ( hIvasRend->hRendererConfig != NULL ) diff --git a/lib_util/render_config_reader.c b/lib_util/render_config_reader.c index b9bb2e5a609ade0167533ec651f1744a8badf162..ea06b8baf5debd6b886fbc1c8898cf3acd16cd85 100644 --- a/lib_util/render_config_reader.c +++ b/lib_util/render_config_reader.c @@ -2373,6 +2373,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 = IVAS_REVERB_DEFAULT_SYNTH_PRE_DELAY; +#endif while ( sscanf( pParams + params_idx, "%64[^=]=%[^;];", item, pValue ) == 2 ) { params_idx += (int32_t) ( strlen( item ) + strlen( pValue ) + 2 ); @@ -3032,6 +3035,9 @@ ivas_error RenderConfigReader_getAcousticEnvironment( { if ( id == pRenderConfigReader->pAE[n].id ) { +#ifdef FIX_1452_DEFAULT_REVERB + pAcEnv->aeID = (uint16_t) pRenderConfigReader->pAE[n].id; +#endif pAcEnv->nBands = (int16_t) pRenderConfigReader->pAE[n].pFG->nrBands; pAcEnv->inputPreDelay = pRenderConfigReader->pAE[n].preDelay; for ( m = 0; m < pAcEnv->nBands; m++ )