From 6632b160f635faf1ce78d724a53c3de7470c5733 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Fri, 25 Apr 2025 19:35:34 +0300 Subject: [PATCH 01/18] Implements system for setting default reverb parameters per format. --- lib_com/ivas_cnst.h | 2 ++ lib_dec/ivas_init_dec.c | 16 +++++++-- lib_rend/ivas_prot_rend.h | 5 +++ lib_rend/ivas_render_config.c | 50 ++++++++++++++++++++++++++++ lib_rend/ivas_rom_rend.c | 61 +++++++++++++++++++++++++++++++++++ lib_rend/ivas_rom_rend.h | 8 +++++ 6 files changed, 139 insertions(+), 3 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index d2c2db4900..db09b1e299 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1579,6 +1579,8 @@ typedef enum #define RV_LENGTH_NR_FC ( RV_FILTER_MAX_FFT_SIZE / 2 ) + 1 #define RV_LENGTH_NR_FC_16KHZ ( RV_FILTER_MAX_FFT_SIZE / 4 ) + 1 #define IVAS_REVERB_DEFAULT_N_BANDS 31 +#define IVAS_REVERB_MASA_DEFAULT_N_BANDS 60 +#define IVAS_REVERB_MC_DEFAULT_N_BANDS 60 #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_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 0d3610065b..e9651425cb 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1377,16 +1377,26 @@ ivas_error ivas_init_decoder( } } - /*--------------------------------------------------------------------* - * Allocate and initialize HRTF Statistics handle - *--------------------------------------------------------------------*/ + /*--------------------------------------------------------------------------* + * Allocate and initialize HRTF Statistics handle, get default reverb values + *--------------------------------------------------------------------------*/ if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { + /* Init HRTF statistics */ if ( ( error = ivas_HRTF_statistics_init( &st_ivas->hHrtfStatistics, output_Fs ) ) != IVAS_ERR_OK ) { return error; } + + /* Get default reverb values based on format, if custom values were not given */ + if ( st_ivas->hDecoderConfig->Opt_RendConfigCustom == 0 ) + { + if ( ( error = ivas_render_config_change_defaults( st_ivas->hRenderConfig, st_ivas->ivas_format ) ) != IVAS_ERR_OK ) + { + return error; + } + } } /*-----------------------------------------------------------------* diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 121d912881..d420695474 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1344,6 +1344,11 @@ ivas_error ivas_render_config_init_from_rom( RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ ); +ivas_error ivas_render_config_change_defaults( + RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */ + IVAS_FORMAT ivas_format /* i: IVAS format */ +); + /*----------------------------------------------------------------------------------* * Quaternion operations diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index c3a39b426e..dad30ed241 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -48,6 +48,12 @@ #define IVAS_REVERB_DEFAULT_PRE_DELAY 0.016f #define IVAS_REVERB_DEFAULT_INPUT_DELAY 0.1f +#define IVAS_REVERB_MASA_DEFAULT_PRE_DELAY 0.0125f +#define IVAS_REVERB_MASA_DEFAULT_INPUT_DELAY 0.0f + +#define IVAS_REVERB_MC_DEFAULT_PRE_DELAY 0.0125f +#define IVAS_REVERB_MC_DEFAULT_INPUT_DELAY 0.0f + #define IVAS_REVERB_DEFAULT_USE_ER 0 @@ -150,3 +156,47 @@ ivas_error ivas_render_config_init_from_rom( return IVAS_ERR_OK; } + + +/*-------------------------------------------------------------------* + * ivas_render_config_change_defaults() + * + * Changes default values from ROM, based on the IVAS format + *-------------------------------------------------------------------*/ + +ivas_error ivas_render_config_change_defaults( + RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */ + IVAS_FORMAT ivas_format /* i: IVAS format */ +) +{ + if ( ivas_format == MASA_FORMAT ) + { + hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_MASA_DEFAULT_N_BANDS; + hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_MASA_DEFAULT_PRE_DELAY; + hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_MASA_DEFAULT_INPUT_DELAY; + 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 ); + set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); + + mvr2r( ivas_reverb_masa_default_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_MASA_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_masa_default_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_MASA_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_masa_default_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_MASA_DEFAULT_N_BANDS ); + } + else if ( ivas_format == MC_FORMAT ) + { + hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_MC_DEFAULT_N_BANDS; + hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_MC_DEFAULT_PRE_DELAY; + hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_MC_DEFAULT_INPUT_DELAY; + 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 ); + set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); + + mvr2r( ivas_reverb_mc_default_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_MC_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_mc_default_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_MC_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_mc_default_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_MC_DEFAULT_N_BANDS ); + } + + return IVAS_ERR_OK; +} diff --git a/lib_rend/ivas_rom_rend.c b/lib_rend/ivas_rom_rend.c index bf6776ab04..24a88ecc94 100644 --- a/lib_rend/ivas_rom_rend.c +++ b/lib_rend/ivas_rom_rend.c @@ -380,6 +380,67 @@ const float ivas_reverb_default_DSR[IVAS_REVERB_DEFAULT_N_BANDS] = 6.2001e-08f, 2.8483e-08f, 2.6267e-08f }; +const float ivas_reverb_masa_default_fc[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = +{ + 200.0f, 600.0f, 1000.0f, 1400.0f, 1800.0f, 2200.0f, 2600.0f, 3000.0f, 3400.0f, 3800.0f, + 4200.0f, 4600.0f, 5000.0f, 5400.0f, 5800.0f, 6200.0f, 6600.0f, 7000.0f, 7400.0f, 7800.0f, + 8200.0f, 8600.0f, 9000.0f, 9400.0f, 9800.0f, 10200.0f, 10600.0f, 11000.0f, 11400.0f, 11800.0f, + 12200.0f, 12600.0f, 13000.0f, 13400.0f, 13800.0f, 14200.0f, 14600.0f, 15000.0f, 15400.0f, 15800.0f, + 16200.0f, 16600.0f, 17000.0f, 17400.0f, 17800.0f, 18200.0f, 18600.0f, 19000.0f, 19400.0f, 19800.0f, + 20200.0f, 20600.0f, 21000.0f, 21400.0f, 21800.0f, 22200.0f, 22600.0f, 23000.0f, 23400.0f, 23800.0f +}; + +const float ivas_reverb_masa_default_RT60[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = +{ + 0.300000f, 0.273750f, 0.265941f, 0.263784f, 0.265572f, 0.261790f, 0.252988f, 0.245801f, 0.237429f, 0.228169f, + 0.219536f, 0.211116f, 0.203262f, 0.196144f, 0.189161f, 0.182436f, 0.176237f, 0.170114f, 0.164250f, 0.158791f, + 0.153349f, 0.148312f, 0.143266f, 0.138398f, 0.133929f, 0.129493f, 0.125309f, 0.121833f, 0.118321f, 0.115130f, + 0.112655f, 0.109958f, 0.107465f, 0.105311f, 0.103006f, 0.100783f, 0.098629f, 0.096469f, 0.094335f, 0.092217f, + 0.090115f, 0.088057f, 0.086034f, 0.084061f, 0.082327f, 0.080552f, 0.078876f, 0.077614f, 0.076203f, 0.074918f, + 0.074102f, 0.073068f, 0.072153f, 0.071659f, 0.070969f, 0.070686f, 0.070224f, 0.069878f, 0.069936f, 0.069820f +}; + +const float ivas_reverb_masa_default_DSR[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = +{ + 1.562141e-05f, 7.104127e-06f, 4.699859e-06f, 4.302786e-06f, 5.277136e-06f, 6.382504e-06f, 7.237492e-06f, 9.198124e-06f, 1.073813e-05f, 1.148954e-05f, + 1.063691e-05f, 9.580873e-06f, 8.187593e-06f, 7.045559e-06f, 5.871790e-06f, 4.857175e-06f, 4.194530e-06f, 3.594923e-06f, 3.377501e-06f, 4.063327e-06f, + 4.885563e-06f, 6.276646e-06f, 7.591577e-06f, 8.950862e-06f, 9.394771e-06f, 9.701081e-06f, 9.456415e-06f, 8.555601e-06f, 8.035221e-06f, 7.461511e-06f, + 6.976915e-06f, 6.454842e-06f, 5.885498e-06f, 5.657134e-06f, 5.205549e-06f, 4.791783e-06f, 4.635302e-06f, 4.326645e-06f, 4.245139e-06f, 4.107671e-06f, + 4.033808e-06f, 3.961318e-06f, 3.862554e-06f, 3.742024e-06f, 3.559007e-06f, 3.379882e-06f, 3.192690e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, + 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f +}; + +const float ivas_reverb_mc_default_fc[IVAS_REVERB_MC_DEFAULT_N_BANDS] = +{ + 200.0f, 600.0f, 1000.0f, 1400.0f, 1800.0f, 2200.0f, 2600.0f, 3000.0f, 3400.0f, 3800.0f, + 4200.0f, 4600.0f, 5000.0f, 5400.0f, 5800.0f, 6200.0f, 6600.0f, 7000.0f, 7400.0f, 7800.0f, + 8200.0f, 8600.0f, 9000.0f, 9400.0f, 9800.0f, 10200.0f, 10600.0f, 11000.0f, 11400.0f, 11800.0f, + 12200.0f, 12600.0f, 13000.0f, 13400.0f, 13800.0f, 14200.0f, 14600.0f, 15000.0f, 15400.0f, 15800.0f, + 16200.0f, 16600.0f, 17000.0f, 17400.0f, 17800.0f, 18200.0f, 18600.0f, 19000.0f, 19400.0f, 19800.0f, + 20200.0f, 20600.0f, 21000.0f, 21400.0f, 21800.0f, 22200.0f, 22600.0f, 23000.0f, 23400.0f, 23800.0f +}; + +const float ivas_reverb_mc_default_RT60[IVAS_REVERB_MC_DEFAULT_N_BANDS] = +{ + 0.400000f, 0.370000f, 0.361076f, 0.358610f, 0.360654f, 0.356331f, 0.346272f, 0.338059f, 0.328491f, 0.317907f, + 0.308041f, 0.298419f, 0.289442f, 0.281307f, 0.273326f, 0.265641f, 0.258557f, 0.251559f, 0.244857f, 0.238618f, + 0.232398f, 0.226642f, 0.220876f, 0.215312f, 0.210205f, 0.205135f, 0.200353f, 0.196380f, 0.192367f, 0.188720f, + 0.185892f, 0.182809f, 0.179960f, 0.177499f, 0.174864f, 0.172323f, 0.169862f, 0.167393f, 0.164954f, 0.162534f, + 0.160132f, 0.157780f, 0.155467f, 0.153213f, 0.151231f, 0.149203f, 0.147286f, 0.145845f, 0.144232f, 0.142763f, + 0.141831f, 0.140649f, 0.139604f, 0.139039f, 0.138250f, 0.137927f, 0.137399f, 0.137004f, 0.137070f, 0.136937f +}; + +const float ivas_reverb_mc_default_DSR[IVAS_REVERB_MC_DEFAULT_N_BANDS] = +{ + 2.705517e-05f, 1.205788e-05f, 7.921604e-06f, 7.237642e-06f, 8.891490e-06f, 1.071545e-05f, 1.204347e-05f, 1.518662e-05f, 1.755462e-05f, 1.855867e-05f, + 1.697032e-05f, 1.508359e-05f, 1.271521e-05f, 1.079401e-05f, 8.865647e-06f, 7.221897e-06f, 6.140750e-06f, 5.175824e-06f, 4.778731e-06f, 5.648105e-06f, + 6.661798e-06f, 8.394316e-06f, 9.940707e-06f, 1.146325e-05f, 1.176827e-05f, 1.186537e-05f, 1.128682e-05f, 9.990709e-06f, 9.163022e-06f, 8.314448e-06f, + 7.627883e-06f, 6.903900e-06f, 6.161279e-06f, 5.807365e-06f, 5.227551e-06f, 4.705133e-06f, 4.448539e-06f, 4.053002e-06f, 3.877406e-06f, 3.653874e-06f, + 3.490109e-06f, 3.330512e-06f, 3.151909e-06f, 2.961156e-06f, 2.737213e-06f, 2.520732e-06f, 2.309620e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, + 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f +}; + + /*----------------------------------------------------------------------------------* * Renderer SBA & MC enc/dec matrices *----------------------------------------------------------------------------------*/ diff --git a/lib_rend/ivas_rom_rend.h b/lib_rend/ivas_rom_rend.h index 927287ecd9..4033175785 100644 --- a/lib_rend/ivas_rom_rend.h +++ b/lib_rend/ivas_rom_rend.h @@ -117,6 +117,14 @@ extern const float ivas_reverb_default_fc[]; extern const float ivas_reverb_default_RT60[]; extern const float ivas_reverb_default_DSR[]; +extern const float ivas_reverb_masa_default_fc[]; +extern const float ivas_reverb_masa_default_RT60[]; +extern const float ivas_reverb_masa_default_DSR[]; + +extern const float ivas_reverb_mc_default_fc[]; +extern const float ivas_reverb_mc_default_RT60[]; +extern const float ivas_reverb_mc_default_DSR[]; + /*----------------------------------------------------------------------------------* * Renderer SBA & MC enc/dec matrices *----------------------------------------------------------------------------------*/ -- GitLab From 7420c51acf249dab4a58439ec637f0612f0c7b61 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Wed, 22 Oct 2025 09:46:20 +0200 Subject: [PATCH 02/18] Clang related editorials --- lib_rend/ivas_render_config.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index dad30ed241..855cc8c9e7 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -48,10 +48,10 @@ #define IVAS_REVERB_DEFAULT_PRE_DELAY 0.016f #define IVAS_REVERB_DEFAULT_INPUT_DELAY 0.1f -#define IVAS_REVERB_MASA_DEFAULT_PRE_DELAY 0.0125f +#define IVAS_REVERB_MASA_DEFAULT_PRE_DELAY 0.0125f #define IVAS_REVERB_MASA_DEFAULT_INPUT_DELAY 0.0f -#define IVAS_REVERB_MC_DEFAULT_PRE_DELAY 0.0125f +#define IVAS_REVERB_MC_DEFAULT_PRE_DELAY 0.0125f #define IVAS_REVERB_MC_DEFAULT_INPUT_DELAY 0.0f #define IVAS_REVERB_DEFAULT_USE_ER 0 -- GitLab From efc7a668019b9589aa6a33f1bcab21acda4f125b Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Mon, 27 Oct 2025 13:39:48 +0100 Subject: [PATCH 03/18] Revised version with default room sizes, medium room resampled to 1/3 octave grid with limited low-frequency resonances, refactoring. --- lib_com/ivas_cnst.h | 12 +++-- lib_dec/ivas_init_dec.c | 16 +++++- lib_rend/ivas_render_config.c | 98 ++++++++++++++++++++--------------- lib_rend/ivas_rom_rend.c | 60 +++++++++++---------- lib_rend/ivas_rom_rend.h | 19 +++---- 5 files changed, 124 insertions(+), 81 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 0d526822a5..37a9c14070 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1584,13 +1584,19 @@ typedef enum #define RV_FILTER_MAX_HISTORY ( 512 - 160 ) /* for longest history */ #define RV_LENGTH_NR_FC ( RV_FILTER_MAX_FFT_SIZE / 2 ) + 1 #define RV_LENGTH_NR_FC_16KHZ ( RV_FILTER_MAX_FFT_SIZE / 4 ) + 1 -#define IVAS_REVERB_DEFAULT_N_BANDS 31 -#define IVAS_REVERB_MASA_DEFAULT_N_BANDS 60 -#define IVAS_REVERB_MC_DEFAULT_N_BANDS 60 +#define IVAS_REVERB_DEFAULT_L_N_BANDS 31 +#define IVAS_REVERB_DEFAULT_M_N_BANDS 31 +#define IVAS_REVERB_DEFAULT_S_N_BANDS 60 #define LR_IAC_LENGTH_NR_FC ( RV_LENGTH_NR_FC ) #define LR_IAC_LENGTH_NR_FC_16KHZ ( RV_LENGTH_NR_FC_16KHZ ) +typedef enum +{ + REVERB_DEFAULT_SMALL, + REVERB_DEFAULT_MEDIUM, + REVERB_DEFAULT_LARGE +} IVAS_ReverbDefaultSize; /*----------------------------------------------------------------------------------* * FB mixer constants diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index a7d36cd621..5db909920e 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1396,7 +1396,21 @@ ivas_error ivas_init_decoder( /* Get default reverb values based on format, if custom values were not given */ if ( st_ivas->hDecoderConfig->Opt_RendConfigCustom == 0 ) { - if ( ( error = ivas_render_config_change_defaults( st_ivas->hRenderConfig, st_ivas->ivas_format ) ) != IVAS_ERR_OK ) + IVAS_ReverbDefaultSize defaultReverbSize; + + switch ( st_ivas->ivas_format ) + { + case MASA_FORMAT: + defaultReverbSize = REVERB_DEFAULT_SMALL; + break; + case MC_FORMAT: + defaultReverbSize = REVERB_DEFAULT_MEDIUM; + break; + default: + defaultReverbSize = REVERB_DEFAULT_LARGE; + } + + if ( ( error = ivas_render_config_change_defaults( st_ivas->hRenderConfig, defaultReverbSize ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index 855cc8c9e7..c345acd5cf 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -45,14 +45,14 @@ * Local constants *-----------------------------------------------------------------------*/ -#define IVAS_REVERB_DEFAULT_PRE_DELAY 0.016f -#define IVAS_REVERB_DEFAULT_INPUT_DELAY 0.1f +#define IVAS_REVERB_DEFAULT_L_PRE_DELAY 0.016f +#define IVAS_REVERB_DEFAULT_L_INPUT_DELAY 0.1f -#define IVAS_REVERB_MASA_DEFAULT_PRE_DELAY 0.0125f -#define IVAS_REVERB_MASA_DEFAULT_INPUT_DELAY 0.0f +#define IVAS_REVERB_DEFAULT_S_PRE_DELAY 0.0125f +#define IVAS_REVERB_DEFAULT_S_INPUT_DELAY 0.0f -#define IVAS_REVERB_MC_DEFAULT_PRE_DELAY 0.0125f -#define IVAS_REVERB_MC_DEFAULT_INPUT_DELAY 0.0f +#define IVAS_REVERB_DEFAULT_M_PRE_DELAY 0.0125f +#define IVAS_REVERB_DEFAULT_M_INPUT_DELAY 0.0f #define IVAS_REVERB_DEFAULT_USE_ER 0 @@ -119,17 +119,17 @@ ivas_error ivas_render_config_init_from_rom( #ifdef DEBUGGING ( *hRenderConfig )->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_NONE; #endif - ( *hRenderConfig )->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_N_BANDS; - ( *hRenderConfig )->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_PRE_DELAY; - ( *hRenderConfig )->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_INPUT_DELAY; + ( *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; 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 ); - mvr2r( ivas_reverb_default_fc, ( *hRenderConfig )->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_N_BANDS ); - mvr2r( ivas_reverb_default_RT60, ( *hRenderConfig )->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_N_BANDS ); - mvr2r( ivas_reverb_default_DSR, ( *hRenderConfig )->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_default_large_fc, ( *hRenderConfig )->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_L_N_BANDS ); + mvr2r( ivas_reverb_default_large_RT60, ( *hRenderConfig )->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_L_N_BANDS ); + mvr2r( ivas_reverb_default_large_DSR, ( *hRenderConfig )->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_L_N_BANDS ); for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) { @@ -161,41 +161,57 @@ ivas_error ivas_render_config_init_from_rom( /*-------------------------------------------------------------------* * ivas_render_config_change_defaults() * - * Changes default values from ROM, based on the IVAS format + * Changes default values from ROM *-------------------------------------------------------------------*/ ivas_error ivas_render_config_change_defaults( - RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */ - IVAS_FORMAT ivas_format /* i: IVAS format */ + RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */ + IVAS_ReverbDefaultSize reverbDefault /* i: IVAS format */ ) { - if ( ivas_format == MASA_FORMAT ) + switch ( reverbDefault ) { - hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_MASA_DEFAULT_N_BANDS; - hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_MASA_DEFAULT_PRE_DELAY; - hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_MASA_DEFAULT_INPUT_DELAY; - 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 ); - set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); - - mvr2r( ivas_reverb_masa_default_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_MASA_DEFAULT_N_BANDS ); - mvr2r( ivas_reverb_masa_default_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_MASA_DEFAULT_N_BANDS ); - mvr2r( ivas_reverb_masa_default_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_MASA_DEFAULT_N_BANDS ); - } - else if ( ivas_format == MC_FORMAT ) - { - hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_MC_DEFAULT_N_BANDS; - hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_MC_DEFAULT_PRE_DELAY; - hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_MC_DEFAULT_INPUT_DELAY; - 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 ); - set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); - - mvr2r( ivas_reverb_mc_default_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_MC_DEFAULT_N_BANDS ); - mvr2r( ivas_reverb_mc_default_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_MC_DEFAULT_N_BANDS ); - mvr2r( ivas_reverb_mc_default_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_MC_DEFAULT_N_BANDS ); + case REVERB_DEFAULT_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; + 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 ); + + mvr2r( ivas_reverb_default_small_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_S_N_BANDS ); + mvr2r( ivas_reverb_default_small_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_S_N_BANDS ); + mvr2r( ivas_reverb_default_small_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_S_N_BANDS ); + break; + case REVERB_DEFAULT_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; + 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 ); + + mvr2r( ivas_reverb_default_medium_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_M_N_BANDS ); + mvr2r( ivas_reverb_default_medium_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_M_N_BANDS ); + mvr2r( ivas_reverb_default_medium_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_M_N_BANDS ); + break; + case REVERB_DEFAULT_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; + 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 ); + + mvr2r( ivas_reverb_default_large_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_L_N_BANDS ); + mvr2r( ivas_reverb_default_large_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_L_N_BANDS ); + mvr2r( ivas_reverb_default_large_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_L_N_BANDS ); + break; + default: + return IVAS_ERR_ACOUSTIC_ENVIRONMENT_MISSING; } return IVAS_ERR_OK; diff --git a/lib_rend/ivas_rom_rend.c b/lib_rend/ivas_rom_rend.c index 03725cb852..d878c16c3b 100644 --- a/lib_rend/ivas_rom_rend.c +++ b/lib_rend/ivas_rom_rend.c @@ -346,7 +346,7 @@ const float t_design_11_elevation[70] = * Reverberator ROM tables *-----------------------------------------------------------------------*/ -const float ivas_reverb_default_fc[IVAS_REVERB_DEFAULT_N_BANDS] = +const float ivas_reverb_default_large_fc[IVAS_REVERB_DEFAULT_L_N_BANDS] = { 20.0f, 25.0f, 31.5f, 40.0f, 50.0f, 63.0f, 80.0f, 100.0f, @@ -358,7 +358,7 @@ const float ivas_reverb_default_fc[IVAS_REVERB_DEFAULT_N_BANDS] = 12500.0f, 16000.0f, 20000.0f }; -const float ivas_reverb_default_RT60[IVAS_REVERB_DEFAULT_N_BANDS] = +const float ivas_reverb_default_large_RT60[IVAS_REVERB_DEFAULT_L_N_BANDS] = { 1.3622f, 1.4486f, 1.3168f, 1.5787f, 1.4766f, 1.3954f, 1.2889f, 1.3462f, @@ -370,7 +370,7 @@ const float ivas_reverb_default_RT60[IVAS_REVERB_DEFAULT_N_BANDS] = 0.71945f, 0.61682f, 0.60031f }; -const float ivas_reverb_default_DSR[IVAS_REVERB_DEFAULT_N_BANDS] = +const float ivas_reverb_default_large_DSR[IVAS_REVERB_DEFAULT_L_N_BANDS] = { 1.8811e-08f, 2.1428e-08f, 1.3972e-08f, 1.51e-08f, 1.287e-08f, 1.8747e-08f, 2.413e-08f, 3.9927e-08f, @@ -382,7 +382,7 @@ const float ivas_reverb_default_DSR[IVAS_REVERB_DEFAULT_N_BANDS] = 6.2001e-08f, 2.8483e-08f, 2.6267e-08f }; -const float ivas_reverb_masa_default_fc[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = +const float ivas_reverb_default_small_fc[IVAS_REVERB_DEFAULT_S_N_BANDS] = { 200.0f, 600.0f, 1000.0f, 1400.0f, 1800.0f, 2200.0f, 2600.0f, 3000.0f, 3400.0f, 3800.0f, 4200.0f, 4600.0f, 5000.0f, 5400.0f, 5800.0f, 6200.0f, 6600.0f, 7000.0f, 7400.0f, 7800.0f, @@ -392,7 +392,7 @@ const float ivas_reverb_masa_default_fc[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = 20200.0f, 20600.0f, 21000.0f, 21400.0f, 21800.0f, 22200.0f, 22600.0f, 23000.0f, 23400.0f, 23800.0f }; -const float ivas_reverb_masa_default_RT60[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = +const float ivas_reverb_default_small_RT60[IVAS_REVERB_DEFAULT_S_N_BANDS] = { 0.300000f, 0.273750f, 0.265941f, 0.263784f, 0.265572f, 0.261790f, 0.252988f, 0.245801f, 0.237429f, 0.228169f, 0.219536f, 0.211116f, 0.203262f, 0.196144f, 0.189161f, 0.182436f, 0.176237f, 0.170114f, 0.164250f, 0.158791f, @@ -402,7 +402,7 @@ const float ivas_reverb_masa_default_RT60[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = 0.074102f, 0.073068f, 0.072153f, 0.071659f, 0.070969f, 0.070686f, 0.070224f, 0.069878f, 0.069936f, 0.069820f }; -const float ivas_reverb_masa_default_DSR[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = +const float ivas_reverb_default_small_DSR[IVAS_REVERB_DEFAULT_S_N_BANDS] = { 1.562141e-05f, 7.104127e-06f, 4.699859e-06f, 4.302786e-06f, 5.277136e-06f, 6.382504e-06f, 7.237492e-06f, 9.198124e-06f, 1.073813e-05f, 1.148954e-05f, 1.063691e-05f, 9.580873e-06f, 8.187593e-06f, 7.045559e-06f, 5.871790e-06f, 4.857175e-06f, 4.194530e-06f, 3.594923e-06f, 3.377501e-06f, 4.063327e-06f, @@ -412,34 +412,40 @@ const float ivas_reverb_masa_default_DSR[IVAS_REVERB_MASA_DEFAULT_N_BANDS] = 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f }; -const float ivas_reverb_mc_default_fc[IVAS_REVERB_MC_DEFAULT_N_BANDS] = +const float ivas_reverb_default_medium_fc[IVAS_REVERB_DEFAULT_M_N_BANDS] = { - 200.0f, 600.0f, 1000.0f, 1400.0f, 1800.0f, 2200.0f, 2600.0f, 3000.0f, 3400.0f, 3800.0f, - 4200.0f, 4600.0f, 5000.0f, 5400.0f, 5800.0f, 6200.0f, 6600.0f, 7000.0f, 7400.0f, 7800.0f, - 8200.0f, 8600.0f, 9000.0f, 9400.0f, 9800.0f, 10200.0f, 10600.0f, 11000.0f, 11400.0f, 11800.0f, - 12200.0f, 12600.0f, 13000.0f, 13400.0f, 13800.0f, 14200.0f, 14600.0f, 15000.0f, 15400.0f, 15800.0f, - 16200.0f, 16600.0f, 17000.0f, 17400.0f, 17800.0f, 18200.0f, 18600.0f, 19000.0f, 19400.0f, 19800.0f, - 20200.0f, 20600.0f, 21000.0f, 21400.0f, 21800.0f, 22200.0f, 22600.0f, 23000.0f, 23400.0f, 23800.0f + 20.0f, 25.0f, 31.5f, 40.0f, + 50.0f, 63.0f, 80.0f, 100.0f, + 125.0f, 160.0f, 200.0f, 250.0f, + 315.0f, 400.0f, 500.0f, 630.0f, + 800.0f, 1000.0f, 1250.0f, 1600.0f, + 2000.0f, 2500.0f, 3150.0f, 4000.0f, + 5000.0f, 6300.0f, 8000.0f, 10000.0f, + 12500.0f, 16000.0f, 20000.0f }; -const float ivas_reverb_mc_default_RT60[IVAS_REVERB_MC_DEFAULT_N_BANDS] = +const float ivas_reverb_default_medium_RT60[IVAS_REVERB_DEFAULT_M_N_BANDS] = { - 0.400000f, 0.370000f, 0.361076f, 0.358610f, 0.360654f, 0.356331f, 0.346272f, 0.338059f, 0.328491f, 0.317907f, - 0.308041f, 0.298419f, 0.289442f, 0.281307f, 0.273326f, 0.265641f, 0.258557f, 0.251559f, 0.244857f, 0.238618f, - 0.232398f, 0.226642f, 0.220876f, 0.215312f, 0.210205f, 0.205135f, 0.200353f, 0.196380f, 0.192367f, 0.188720f, - 0.185892f, 0.182809f, 0.179960f, 0.177499f, 0.174864f, 0.172323f, 0.169862f, 0.167393f, 0.164954f, 0.162534f, - 0.160132f, 0.157780f, 0.155467f, 0.153213f, 0.151231f, 0.149203f, 0.147286f, 0.145845f, 0.144232f, 0.142763f, - 0.141831f, 0.140649f, 0.139604f, 0.139039f, 0.138250f, 0.137927f, 0.137399f, 0.137004f, 0.137070f, 0.136937f + 0.30000000f, 0.31111111f, 0.32222222f, 0.33333333f, + 0.34444444f, 0.35555556f, 0.36666667f, 0.37777778f, + 0.38888889f, 0.39555556f, 0.40000000f, 0.36107600f, + 0.35861000f, 0.36065400f, 0.35633100f, 0.34627200f, + 0.33805900f, 0.32849100f, 0.31790700f, 0.30804100f, + 0.29841900f, 0.28944200f, 0.28130700f, 0.27332600f, + 0.26564100f, 0.25855700f, 0.25155900f, 0.24485700f, + 0.23861800f, 0.23239800f, 0.22664200f }; -const float ivas_reverb_mc_default_DSR[IVAS_REVERB_MC_DEFAULT_N_BANDS] = +const float ivas_reverb_default_medium_DSR[IVAS_REVERB_DEFAULT_M_N_BANDS] = { - 2.705517e-05f, 1.205788e-05f, 7.921604e-06f, 7.237642e-06f, 8.891490e-06f, 1.071545e-05f, 1.204347e-05f, 1.518662e-05f, 1.755462e-05f, 1.855867e-05f, - 1.697032e-05f, 1.508359e-05f, 1.271521e-05f, 1.079401e-05f, 8.865647e-06f, 7.221897e-06f, 6.140750e-06f, 5.175824e-06f, 4.778731e-06f, 5.648105e-06f, - 6.661798e-06f, 8.394316e-06f, 9.940707e-06f, 1.146325e-05f, 1.176827e-05f, 1.186537e-05f, 1.128682e-05f, 9.990709e-06f, 9.163022e-06f, 8.314448e-06f, - 7.627883e-06f, 6.903900e-06f, 6.161279e-06f, 5.807365e-06f, 5.227551e-06f, 4.705133e-06f, 4.448539e-06f, 4.053002e-06f, 3.877406e-06f, 3.653874e-06f, - 3.490109e-06f, 3.330512e-06f, 3.151909e-06f, 2.961156e-06f, 2.737213e-06f, 2.520732e-06f, 2.309620e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, - 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f + 2.705517e-05f, 1.205788e-05f, 7.921604e-06f, 7.237642e-06f, + 8.891490e-06f, 1.071545e-05f, 1.204347e-05f, 1.518662e-05f, + 1.755462e-05f, 1.855867e-05f, 2.210372e-06f, 2.210372e-06f, + 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, + 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, + 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, + 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, + 2.210372e-06f, 2.210372e-06f, 2.210372e-06f }; diff --git a/lib_rend/ivas_rom_rend.h b/lib_rend/ivas_rom_rend.h index 4033175785..880408e69d 100644 --- a/lib_rend/ivas_rom_rend.h +++ b/lib_rend/ivas_rom_rend.h @@ -113,17 +113,18 @@ extern const float t_design_11_elevation[70]; * Reverberator ROM tables *-----------------------------------------------------------------------*/ -extern const float ivas_reverb_default_fc[]; -extern const float ivas_reverb_default_RT60[]; -extern const float ivas_reverb_default_DSR[]; +extern const float ivas_reverb_default_small_fc[]; +extern const float ivas_reverb_default_small_RT60[]; +extern const float ivas_reverb_default_small_DSR[]; -extern const float ivas_reverb_masa_default_fc[]; -extern const float ivas_reverb_masa_default_RT60[]; -extern const float ivas_reverb_masa_default_DSR[]; +extern const float ivas_reverb_default_medium_fc[]; +extern const float ivas_reverb_default_medium_RT60[]; +extern const float ivas_reverb_default_medium_DSR[]; + +extern const float ivas_reverb_default_large_fc[]; +extern const float ivas_reverb_default_large_RT60[]; +extern const float ivas_reverb_default_large_DSR[]; -extern const float ivas_reverb_mc_default_fc[]; -extern const float ivas_reverb_mc_default_RT60[]; -extern const float ivas_reverb_mc_default_DSR[]; /*----------------------------------------------------------------------------------* * Renderer SBA & MC enc/dec matrices -- GitLab From a516fe3354f55d6c8d7ddef759c85c096dede16d Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Mon, 27 Oct 2025 13:47:40 +0100 Subject: [PATCH 04/18] Minor refactoring --- lib_rend/ivas_rom_rend.c | 72 ++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/lib_rend/ivas_rom_rend.c b/lib_rend/ivas_rom_rend.c index d878c16c3b..c6432fdf38 100644 --- a/lib_rend/ivas_rom_rend.c +++ b/lib_rend/ivas_rom_rend.c @@ -346,42 +346,6 @@ const float t_design_11_elevation[70] = * Reverberator ROM tables *-----------------------------------------------------------------------*/ -const float ivas_reverb_default_large_fc[IVAS_REVERB_DEFAULT_L_N_BANDS] = -{ - 20.0f, 25.0f, 31.5f, 40.0f, - 50.0f, 63.0f, 80.0f, 100.0f, - 125.0f, 160.0f, 200.0f, 250.0f, - 315.0f, 400.0f, 500.0f, 630.0f, - 800.0f, 1000.0f, 1250.0f, 1600.0f, - 2000.0f, 2500.0f, 3150.0f, 4000.0f, - 5000.0f, 6300.0f, 8000.0f, 10000.0f, - 12500.0f, 16000.0f, 20000.0f -}; - -const float ivas_reverb_default_large_RT60[IVAS_REVERB_DEFAULT_L_N_BANDS] = -{ - 1.3622f, 1.4486f, 1.3168f, 1.5787f, - 1.4766f, 1.3954f, 1.2889f, 1.3462f, - 1.0759f, 1.0401f, 1.097f, 1.085f, - 1.091f, 1.0404f, 1.0499f, 1.0699f, - 1.1028f, 1.1714f, 1.1027f, 1.0666f, - 1.055f, 1.0553f, 1.0521f, 1.0569f, - 1.0421f, 0.97822f, 0.80487f, 0.75944f, - 0.71945f, 0.61682f, 0.60031f -}; - -const float ivas_reverb_default_large_DSR[IVAS_REVERB_DEFAULT_L_N_BANDS] = -{ - 1.8811e-08f, 2.1428e-08f, 1.3972e-08f, 1.51e-08f, - 1.287e-08f, 1.8747e-08f, 2.413e-08f, 3.9927e-08f, - 8.9719e-08f, 1.902e-07f, 3.702e-07f, 6.1341e-07f, - 7.1432e-07f, 6.5331e-07f, 4.6094e-07f, 5.4683e-07f, - 7.0134e-07f, 6.856e-07f, 7.114e-07f, 6.9604e-07f, - 5.2939e-07f, 5.699e-07f, 6.1773e-07f, 5.7488e-07f, - 4.7748e-07f, 2.7213e-07f, 1.3681e-07f, 1.0941e-07f, - 6.2001e-08f, 2.8483e-08f, 2.6267e-08f -}; - const float ivas_reverb_default_small_fc[IVAS_REVERB_DEFAULT_S_N_BANDS] = { 200.0f, 600.0f, 1000.0f, 1400.0f, 1800.0f, 2200.0f, 2600.0f, 3000.0f, 3400.0f, 3800.0f, @@ -448,6 +412,42 @@ const float ivas_reverb_default_medium_DSR[IVAS_REVERB_DEFAULT_M_N_BANDS] = 2.210372e-06f, 2.210372e-06f, 2.210372e-06f }; +const float ivas_reverb_default_large_fc[IVAS_REVERB_DEFAULT_L_N_BANDS] = +{ + 20.0f, 25.0f, 31.5f, 40.0f, + 50.0f, 63.0f, 80.0f, 100.0f, + 125.0f, 160.0f, 200.0f, 250.0f, + 315.0f, 400.0f, 500.0f, 630.0f, + 800.0f, 1000.0f, 1250.0f, 1600.0f, + 2000.0f, 2500.0f, 3150.0f, 4000.0f, + 5000.0f, 6300.0f, 8000.0f, 10000.0f, + 12500.0f, 16000.0f, 20000.0f +}; + +const float ivas_reverb_default_large_RT60[IVAS_REVERB_DEFAULT_L_N_BANDS] = +{ + 1.3622f, 1.4486f, 1.3168f, 1.5787f, + 1.4766f, 1.3954f, 1.2889f, 1.3462f, + 1.0759f, 1.0401f, 1.097f, 1.085f, + 1.091f, 1.0404f, 1.0499f, 1.0699f, + 1.1028f, 1.1714f, 1.1027f, 1.0666f, + 1.055f, 1.0553f, 1.0521f, 1.0569f, + 1.0421f, 0.97822f, 0.80487f, 0.75944f, + 0.71945f, 0.61682f, 0.60031f +}; + +const float ivas_reverb_default_large_DSR[IVAS_REVERB_DEFAULT_L_N_BANDS] = +{ + 1.8811e-08f, 2.1428e-08f, 1.3972e-08f, 1.51e-08f, + 1.287e-08f, 1.8747e-08f, 2.413e-08f, 3.9927e-08f, + 8.9719e-08f, 1.902e-07f, 3.702e-07f, 6.1341e-07f, + 7.1432e-07f, 6.5331e-07f, 4.6094e-07f, 5.4683e-07f, + 7.0134e-07f, 6.856e-07f, 7.114e-07f, 6.9604e-07f, + 5.2939e-07f, 5.699e-07f, 6.1773e-07f, 5.7488e-07f, + 4.7748e-07f, 2.7213e-07f, 1.3681e-07f, 1.0941e-07f, + 6.2001e-08f, 2.8483e-08f, 2.6267e-08f +}; + /*----------------------------------------------------------------------------------* * Renderer SBA & MC enc/dec matrices -- GitLab From d655d8c1e1f0d21528e6560f27a9c19e8af70bed Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 28 Oct 2025 14:50:50 +0100 Subject: [PATCH 05/18] Updated ROM tables for medium sized room --- lib_rend/ivas_rom_rend.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/lib_rend/ivas_rom_rend.c b/lib_rend/ivas_rom_rend.c index c6432fdf38..726ec105d5 100644 --- a/lib_rend/ivas_rom_rend.c +++ b/lib_rend/ivas_rom_rend.c @@ -390,26 +390,26 @@ const float ivas_reverb_default_medium_fc[IVAS_REVERB_DEFAULT_M_N_BANDS] = const float ivas_reverb_default_medium_RT60[IVAS_REVERB_DEFAULT_M_N_BANDS] = { - 0.30000000f, 0.31111111f, 0.32222222f, 0.33333333f, - 0.34444444f, 0.35555556f, 0.36666667f, 0.37777778f, - 0.38888889f, 0.39555556f, 0.40000000f, 0.36107600f, - 0.35861000f, 0.36065400f, 0.35633100f, 0.34627200f, - 0.33805900f, 0.32849100f, 0.31790700f, 0.30804100f, - 0.29841900f, 0.28944200f, 0.28130700f, 0.27332600f, - 0.26564100f, 0.25855700f, 0.25155900f, 0.24485700f, - 0.23861800f, 0.23239800f, 0.22664200f + 0.22000000f, 0.22500000f, 0.23150000f, 0.24000000f, + 0.25000000f, 0.26300000f, 0.28000000f, 0.30000000f, + 0.32500000f, 0.36000000f, 0.40000000f, 0.39625000f, + 0.39137500f, 0.38500000f, 0.37750000f, 0.36933070f, + 0.36553800f, 0.36107600f, 0.35953475f, 0.35963200f, + 0.35849250f, 0.34878675f, 0.33447100f, 0.31297400f, + 0.28944200f, 0.26387000f, 0.23550800f, 0.20767000f, + 0.18357975f, 0.16133300f, 0.14229700f }; const float ivas_reverb_default_medium_DSR[IVAS_REVERB_DEFAULT_M_N_BANDS] = { - 2.705517e-05f, 1.205788e-05f, 7.921604e-06f, 7.237642e-06f, - 8.891490e-06f, 1.071545e-05f, 1.204347e-05f, 1.518662e-05f, - 1.755462e-05f, 1.855867e-05f, 2.210372e-06f, 2.210372e-06f, - 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, - 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, - 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, - 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, - 2.210372e-06f, 2.210372e-06f, 2.210372e-06f + 1.488034e-05f, 1.521853e-05f, 1.565818e-05f, 1.623310e-05f, + 1.690948e-05f, 1.778877e-05f, 1.893862e-05f, 2.029138e-05f, + 2.198233e-05f, 2.434965e-05f, 2.705517e-05f, 2.518051e-05f, + 2.274345e-05f, 1.955652e-05f, 1.580720e-05f, 1.174766e-05f, + 9.989742e-06f, 7.921604e-06f, 7.494128e-06f, 8.064566e-06f, + 9.803470e-06f, 1.171147e-05f, 1.607462e-05f, 1.776450e-05f, + 1.271521e-05f, 6.951610e-06f, 6.154952e-06f, 1.181682e-05f, + 7.084896e-06f, 3.571991e-06f, 2.210372e-06f }; const float ivas_reverb_default_large_fc[IVAS_REVERB_DEFAULT_L_N_BANDS] = -- GitLab From 889e5dd8496620348a125a27f2e63941fc3f0ad2 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 28 Oct 2025 15:40:46 +0100 Subject: [PATCH 06/18] Cleanup and refactoring --- lib_com/ivas_cnst.h | 8 ++++---- lib_dec/ivas_init_dec.c | 8 ++++---- lib_rend/ivas_prot_rend.h | 2 +- lib_rend/ivas_render_config.c | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 37a9c14070..3a6894d435 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1593,10 +1593,10 @@ typedef enum typedef enum { - REVERB_DEFAULT_SMALL, - REVERB_DEFAULT_MEDIUM, - REVERB_DEFAULT_LARGE -} IVAS_ReverbDefaultSize; + DEFAULT_REVERB_SMALL, + DEFAULT_REVERB_MEDIUM, + DEFAULT_REVERB_LARGE +} IVAS_DefaultReverbSize; /*----------------------------------------------------------------------------------* * FB mixer constants diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 5db909920e..7db484b0db 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1396,18 +1396,18 @@ ivas_error ivas_init_decoder( /* Get default reverb values based on format, if custom values were not given */ if ( st_ivas->hDecoderConfig->Opt_RendConfigCustom == 0 ) { - IVAS_ReverbDefaultSize defaultReverbSize; + IVAS_DefaultReverbSize defaultReverbSize; switch ( st_ivas->ivas_format ) { case MASA_FORMAT: - defaultReverbSize = REVERB_DEFAULT_SMALL; + defaultReverbSize = DEFAULT_REVERB_SMALL; break; case MC_FORMAT: - defaultReverbSize = REVERB_DEFAULT_MEDIUM; + defaultReverbSize = DEFAULT_REVERB_MEDIUM; break; default: - defaultReverbSize = REVERB_DEFAULT_LARGE; + defaultReverbSize = DEFAULT_REVERB_LARGE; } if ( ( error = ivas_render_config_change_defaults( st_ivas->hRenderConfig, defaultReverbSize ) ) != IVAS_ERR_OK ) diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 27f921e488..894821855d 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1345,7 +1345,7 @@ ivas_error ivas_render_config_init_from_rom( ivas_error ivas_render_config_change_defaults( RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */ - IVAS_FORMAT ivas_format /* i: IVAS format */ + IVAS_DefaultReverbSize reverbDefault /* i: Reverb default size */ ); diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index c345acd5cf..50094cf79a 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -165,13 +165,13 @@ ivas_error ivas_render_config_init_from_rom( *-------------------------------------------------------------------*/ ivas_error ivas_render_config_change_defaults( - RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */ - IVAS_ReverbDefaultSize reverbDefault /* i: IVAS format */ + RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */ + IVAS_DefaultReverbSize defaultReverbSize /* i: Reverb default size */ ) { - switch ( reverbDefault ) + switch ( defaultReverbSize ) { - case REVERB_DEFAULT_SMALL: + 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; @@ -184,7 +184,7 @@ ivas_error ivas_render_config_change_defaults( mvr2r( ivas_reverb_default_small_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_S_N_BANDS ); mvr2r( ivas_reverb_default_small_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_S_N_BANDS ); break; - case REVERB_DEFAULT_MEDIUM: + 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; @@ -197,7 +197,7 @@ ivas_error ivas_render_config_change_defaults( mvr2r( ivas_reverb_default_medium_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_M_N_BANDS ); mvr2r( ivas_reverb_default_medium_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_M_N_BANDS ); break; - case REVERB_DEFAULT_LARGE: + 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; -- GitLab From d20927898c39ed6b1c67debb84912508db470d3e Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Wed, 29 Oct 2025 14:35:38 +0200 Subject: [PATCH 07/18] Add default selection for rest of the spatial formats. --- lib_dec/ivas_init_dec.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 7db484b0db..c89bde525e 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1400,12 +1400,24 @@ ivas_error ivas_init_decoder( switch ( st_ivas->ivas_format ) { + case ISM_FORMAT: + defaultReverbSize = DEFAULT_REVERB_MEDIUM; + break; + case SBA_FORMAT: + defaultReverbSize = DEFAULT_REVERB_SMALL; + break; case MASA_FORMAT: defaultReverbSize = DEFAULT_REVERB_SMALL; break; case MC_FORMAT: defaultReverbSize = DEFAULT_REVERB_MEDIUM; break; + case MASA_ISM_FORMAT: + defaultReverbSize = DEFAULT_REVERB_MEDIUM; + break; + case SBA_ISM_FORMAT: + defaultReverbSize = DEFAULT_REVERB_MEDIUM; + break; default: defaultReverbSize = DEFAULT_REVERB_LARGE; } -- GitLab From a5bbf9738297c3c38ec268abd52274865912391f Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 4 Nov 2025 15:36:22 +0100 Subject: [PATCH 08/18] Command line option for room size selection --- apps/decoder.c | 47 ++++++++++++++++++++++++++++++++++++++ lib_com/common_api_types.h | 10 ++++++++ lib_com/options.h | 2 +- lib_dec/ivas_init_dec.c | 43 ++++++++++++++++++++++++++++++++-- lib_dec/ivas_stat_dec.h | 3 +++ lib_dec/lib_dec.c | 9 ++++++++ lib_dec/lib_dec.h | 3 +++ 7 files changed, 114 insertions(+), 3 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 59689807f6..05584fcb5f 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -152,6 +152,9 @@ typedef struct uint16_t directivityPatternId[IVAS_MAX_NUM_OBJECTS]; bool objEditEnabled; char *objEditFileName; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + IVAS_ROOM_SIZE_T roomSize; +#endif } DecArguments; @@ -452,9 +455,15 @@ int main( #ifdef IVAS_RTPDUMP arg.enableHeadRotation = arg.enableHeadRotation || arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM; #endif +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, + arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.roomSize, arg.non_diegetic_pan_enabled, + arg.non_diegetic_pan_gain, arg.dpidEnabled, aeID, arg.objEditEnabled, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) +#else if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.non_diegetic_pan_enabled, arg.non_diegetic_pan_gain, arg.dpidEnabled, aeID, arg.objEditEnabled, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) +#endif { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; @@ -1033,6 +1042,10 @@ static bool parseCmdlIVAS_dec( arg->objEditEnabled = false; arg->objEditFileName = NULL; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + arg->roomSize = IVAS_ROOM_SIZE_AUTO; +#endif + /*-----------------------------------------------------------------* * Initialization *-----------------------------------------------------------------*/ @@ -1521,6 +1534,36 @@ static bool parseCmdlIVAS_dec( } i++; } +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + else if ( strcmp( argv_to_upper, "-ROOM_SIZE" ) == 0 ) + { + i++; + if ( argc - i <= 3 || argv[i][0] == '-' ) + { + fprintf( stderr, "Error: Room size selector not specified!\n\n" ); + usage_dec(); + return false; + } + + if ( strcmp( argv[i], "S" ) == 0 || strcmp( argv[i], "s" ) == 0 ) + { + arg->roomSize = IVAS_ROOM_SIZE_SMALL; + } + else if ( strcmp( argv[i], "M" ) == 0 || strcmp( argv[i], "m" ) == 0 ) + { + arg->roomSize = IVAS_ROOM_SIZE_MEDIUM; + } + else if ( strcmp( argv[i], "L" ) == 0 || strcmp( argv[i], "l" ) == 0 ) + { + arg->roomSize = IVAS_ROOM_SIZE_LARGE; + } + else + { + fprintf( stderr, "Error: Unsupported room size selector %s!\n\n", argv[i] ); + } + i++; + } +#endif /*-----------------------------------------------------------------* * Option not recognized @@ -1749,6 +1792,10 @@ static void usage_dec( void ) fprintf( stdout, "-obj_edit File : Object editing instructions file or NULL for built-in example\n" ); fprintf( stdout, "-level level : Complexity level, level = (1, 2, 3), will be defined after characterisation. \n" ); fprintf( stdout, " Currently, all values default to level 3 (full functionality).\n" ); +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + fprintf( stdout, "-room_size (S|M|L) : Selects default reverb based on a room size (S - small | M - medium | L - large)\n" ); + fprintf( stdout, " for BINAURAL_ROOM_REVERB output configuration,\n" ); +#endif fprintf( stdout, "-q : Quiet mode, no frame counter\n" ); fprintf( stdout, " default is deactivated\n" ); #ifdef DEBUG_MODE_INFO diff --git a/lib_com/common_api_types.h b/lib_com/common_api_types.h index 80c90d6b31..b8b3c93e3d 100644 --- a/lib_com/common_api_types.h +++ b/lib_com/common_api_types.h @@ -173,6 +173,16 @@ typedef enum } IVAS_RENDER_FRAMESIZE; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE +typedef enum +{ + IVAS_ROOM_SIZE_AUTO = -1, + IVAS_ROOM_SIZE_SMALL, + IVAS_ROOM_SIZE_MEDIUM, + IVAS_ROOM_SIZE_LARGE +} IVAS_ROOM_SIZE_T; +#endif + typedef struct ivas_masa_metadata_frame_struct *IVAS_MASA_METADATA_HANDLE; typedef struct ivas_masa_decoder_ext_out_meta_struct *IVAS_MASA_DECODER_EXT_OUT_META_HANDLE; diff --git a/lib_com/options.h b/lib_com/options.h index b72be74b4f..3d752edfff 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -170,7 +170,7 @@ #define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */ #define FIX_1413_IGF_INIT_PRINTOUT /* FhG: use correct variable for IGF initiliazation */ #define RENDERER_MD_SYNC_DELAY_TO_INTEGER /* FhG: change data type of metadata sync delay in ext renderer to int16_t for better BASOP portability (and nicer code) */ - +#define FIX_1318_ROOM_SIZE_CMD_LINE /* Philips/Nokia: Default room sizes support */ /* #################### End BE switches ################################## */ diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 284aae854d..57d21c5e84 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1397,7 +1397,46 @@ ivas_error ivas_init_decoder( if ( st_ivas->hDecoderConfig->Opt_RendConfigCustom == 0 ) { IVAS_DefaultReverbSize defaultReverbSize; - +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + switch ( st_ivas->hDecoderConfig->Opt_RoomSize ) + { + case IVAS_ROOM_SIZE_AUTO: + switch ( st_ivas->ivas_format ) + { + case ISM_FORMAT: + defaultReverbSize = DEFAULT_REVERB_MEDIUM; + break; + case SBA_FORMAT: + defaultReverbSize = DEFAULT_REVERB_SMALL; + break; + case MASA_FORMAT: + defaultReverbSize = DEFAULT_REVERB_SMALL; + break; + case MC_FORMAT: + defaultReverbSize = DEFAULT_REVERB_MEDIUM; + break; + case MASA_ISM_FORMAT: + defaultReverbSize = DEFAULT_REVERB_MEDIUM; + break; + case SBA_ISM_FORMAT: + defaultReverbSize = DEFAULT_REVERB_MEDIUM; + break; + default: + defaultReverbSize = DEFAULT_REVERB_LARGE; + } + break; + case IVAS_ROOM_SIZE_SMALL: + defaultReverbSize = DEFAULT_REVERB_SMALL; + break; + case IVAS_ROOM_SIZE_MEDIUM: + defaultReverbSize = DEFAULT_REVERB_MEDIUM; + break; + case IVAS_ROOM_SIZE_LARGE: + default: + defaultReverbSize = DEFAULT_REVERB_LARGE; + break; + } +#else switch ( st_ivas->ivas_format ) { case ISM_FORMAT: @@ -1421,7 +1460,7 @@ ivas_error ivas_init_decoder( default: defaultReverbSize = DEFAULT_REVERB_LARGE; } - +#endif if ( ( error = ivas_render_config_change_defaults( st_ivas->hRenderConfig, defaultReverbSize ) ) != IVAS_ERR_OK ) { return error; diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index f1efb32a10..777082e635 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1016,6 +1016,9 @@ typedef struct decoder_config_structure int16_t Opt_HRTF_binary; /* indicates whether HRTF binary file is used */ int16_t Opt_Headrotation; /* indicates whether head-rotation is used */ int16_t Opt_RendConfigCustom; /* indicates whether Renderer configuration custom setup is used */ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + IVAS_ROOM_SIZE_T Opt_RoomSize; /* Selected room size */ +#endif IVAS_HEAD_ORIENT_TRK_T orientation_tracking; /* indicates orientation tracking type */ int16_t Opt_non_diegetic_pan; /* indicates diegetic or not */ float non_diegetic_pan_gain; /* non diegetic panning gain*/ diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index d8a602beb0..9863143c95 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -310,6 +310,9 @@ static void init_decoder_config( hDecoderConfig->Opt_HRTF_binary = 0; hDecoderConfig->Opt_Headrotation = 0; hDecoderConfig->Opt_RendConfigCustom = 0; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + hDecoderConfig->Opt_RoomSize = IVAS_ROOM_SIZE_AUTO; +#endif hDecoderConfig->orientation_tracking = IVAS_HEAD_ORIENT_TRK_NONE; hDecoderConfig->Opt_non_diegetic_pan = 0; hDecoderConfig->non_diegetic_pan_gain = 0; @@ -452,6 +455,9 @@ ivas_error IVAS_DEC_Configure( const bool enableExternalOrientation, /* i : enable external orientations */ const IVAS_HEAD_ORIENT_TRK_T orientation_tracking, /* i : head orientation tracking type */ const bool renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + const IVAS_ROOM_SIZE_T roomSize, /* i : room size selector for reverb */ +#endif const bool non_diegetic_pan_enabled, /* i : enabled diegetic panning */ const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ const bool dpidEnabled, /* i : enable directivity pattern option */ @@ -508,6 +514,9 @@ ivas_error IVAS_DEC_Configure( hDecoderConfig->orientation_tracking = orientation_tracking; hDecoderConfig->Opt_HRTF_binary = (int16_t) hrtfReaderEnabled; hDecoderConfig->Opt_RendConfigCustom = (int16_t) renderConfigEnabled; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + hDecoderConfig->Opt_RoomSize = roomSize; +#endif hDecoderConfig->Opt_non_diegetic_pan = (int16_t) non_diegetic_pan_enabled; hDecoderConfig->non_diegetic_pan_gain = non_diegetic_pan_gain; hDecoderConfig->Opt_delay_comp = (int16_t) delayCompensationEnabled; diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index d0d2b501d8..5aef9034ed 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -119,6 +119,9 @@ ivas_error IVAS_DEC_Configure( const bool enableExternalOrientation, /* i : enable external orientations */ const IVAS_HEAD_ORIENT_TRK_T orientation_tracking, /* i : head orientation tracking type */ const bool renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + const IVAS_ROOM_SIZE_T roomSize, /* i : room size selector for reverb */ +#endif const bool non_diegetic_pan_enabled, /* i : enabled diegetic panning */ const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ const bool dpidEnabled, /* i : enable directivity pattern option */ -- GitLab From 2f3c020d43144833c87b8a5414b933fac0bdae84 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Wed, 5 Nov 2025 20:59:38 +0100 Subject: [PATCH 09/18] Cleanup related to -room_size command line option --- apps/decoder.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 0955f278ef..6e3c6e5fbe 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -1548,21 +1548,30 @@ static bool parseCmdlIVAS_dec( return false; } - if ( strcmp( argv[i], "S" ) == 0 || strcmp( argv[i], "s" ) == 0 ) - { - arg->roomSize = IVAS_ROOM_SIZE_SMALL; - } - else if ( strcmp( argv[i], "M" ) == 0 || strcmp( argv[i], "m" ) == 0 ) - { - arg->roomSize = IVAS_ROOM_SIZE_MEDIUM; - } - else if ( strcmp( argv[i], "L" ) == 0 || strcmp( argv[i], "l" ) == 0 ) - { - arg->roomSize = IVAS_ROOM_SIZE_LARGE; - } - else + if ( strlen( argv[i] ) != 1 ) { fprintf( stderr, "Error: Unsupported room size selector %s!\n\n", argv[i] ); + usage_dec(); + return false; + } + switch ( argv[i][0] ) + { + case 'S': + case 's': + arg->roomSize = IVAS_ROOM_SIZE_SMALL; + break; + case 'M': + case 'm': + arg->roomSize = IVAS_ROOM_SIZE_MEDIUM; + break; + case 'L': + case 'l': + arg->roomSize = IVAS_ROOM_SIZE_LARGE; + break; + default: + fprintf( stderr, "Error: Unsupported room size selector %s!\n\n", argv[i] ); + usage_dec(); + return false; } i++; } -- GitLab From 8b42fbf0a6728b8c3a598379ea7b9b4c6add4183 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Thu, 6 Nov 2025 12:05:15 +0200 Subject: [PATCH 10/18] Add switches to remaining parts. --- lib_com/ivas_cnst.h | 6 ++++++ lib_dec/ivas_init_dec.c | 37 +++++++++-------------------------- lib_rend/ivas_prot_rend.h | 2 ++ lib_rend/ivas_render_config.c | 8 ++++++++ lib_rend/ivas_rom_rend.c | 14 +++++++++++++ lib_rend/ivas_rom_rend.h | 2 ++ 6 files changed, 41 insertions(+), 28 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 10e09dc64e..c38a6fa330 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1587,19 +1587,25 @@ typedef enum #define RV_FILTER_MAX_HISTORY ( 512 - 160 ) /* for longest history */ #define RV_LENGTH_NR_FC ( RV_FILTER_MAX_FFT_SIZE / 2 ) + 1 #define RV_LENGTH_NR_FC_16KHZ ( RV_FILTER_MAX_FFT_SIZE / 4 ) + 1 +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE #define IVAS_REVERB_DEFAULT_L_N_BANDS 31 #define IVAS_REVERB_DEFAULT_M_N_BANDS 31 #define IVAS_REVERB_DEFAULT_S_N_BANDS 60 +#else +#define IVAS_REVERB_DEFAULT_N_BANDS 31 +#endif #define LR_IAC_LENGTH_NR_FC ( RV_LENGTH_NR_FC ) #define LR_IAC_LENGTH_NR_FC_16KHZ ( RV_LENGTH_NR_FC_16KHZ ) +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE typedef enum { DEFAULT_REVERB_SMALL, DEFAULT_REVERB_MEDIUM, DEFAULT_REVERB_LARGE } IVAS_DefaultReverbSize; +#endif /*----------------------------------------------------------------------------------* * FB mixer constants diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 57d21c5e84..66b5c491d5 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1381,9 +1381,15 @@ ivas_error ivas_init_decoder( } } - /*--------------------------------------------------------------------------* + #ifdef FIX_1318_ROOM_SIZE_CMD_LINE + /*--------------------------------------------------------------------------* * Allocate and initialize HRTF Statistics handle, get default reverb values *--------------------------------------------------------------------------*/ +#else + /*--------------------------------------------------------------------* + * Allocate and initialize HRTF Statistics handle + *--------------------------------------------------------------------*/ +#endif if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { @@ -1392,12 +1398,11 @@ ivas_error ivas_init_decoder( { return error; } - +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE /* Get default reverb values based on format, if custom values were not given */ if ( st_ivas->hDecoderConfig->Opt_RendConfigCustom == 0 ) { IVAS_DefaultReverbSize defaultReverbSize; -#ifdef FIX_1318_ROOM_SIZE_CMD_LINE switch ( st_ivas->hDecoderConfig->Opt_RoomSize ) { case IVAS_ROOM_SIZE_AUTO: @@ -1436,36 +1441,12 @@ ivas_error ivas_init_decoder( defaultReverbSize = DEFAULT_REVERB_LARGE; break; } -#else - switch ( st_ivas->ivas_format ) - { - case ISM_FORMAT: - defaultReverbSize = DEFAULT_REVERB_MEDIUM; - break; - case SBA_FORMAT: - defaultReverbSize = DEFAULT_REVERB_SMALL; - break; - case MASA_FORMAT: - defaultReverbSize = DEFAULT_REVERB_SMALL; - break; - case MC_FORMAT: - defaultReverbSize = DEFAULT_REVERB_MEDIUM; - break; - case MASA_ISM_FORMAT: - defaultReverbSize = DEFAULT_REVERB_MEDIUM; - break; - case SBA_ISM_FORMAT: - defaultReverbSize = DEFAULT_REVERB_MEDIUM; - break; - default: - defaultReverbSize = DEFAULT_REVERB_LARGE; - } -#endif if ( ( error = ivas_render_config_change_defaults( st_ivas->hRenderConfig, defaultReverbSize ) ) != IVAS_ERR_OK ) { return error; } } +#endif } /*-----------------------------------------------------------------* diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 9e2e2a55c5..f75a8a24aa 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1343,11 +1343,13 @@ ivas_error ivas_render_config_init_from_rom( RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ ); +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE ivas_error ivas_render_config_change_defaults( RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */ IVAS_DefaultReverbSize reverbDefault /* i: Reverb default size */ ); +#endif /*----------------------------------------------------------------------------------* * Quaternion operations diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index 50094cf79a..e53b2366f3 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -45,6 +45,7 @@ * Local constants *-----------------------------------------------------------------------*/ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE #define IVAS_REVERB_DEFAULT_L_PRE_DELAY 0.016f #define IVAS_REVERB_DEFAULT_L_INPUT_DELAY 0.1f @@ -53,6 +54,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 @@ -119,17 +121,21 @@ ivas_error ivas_render_config_init_from_rom( #ifdef DEBUGGING ( *hRenderConfig )->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_NONE; #endif +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE ( *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; +#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 ); set_zero( &( *hRenderConfig )->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE mvr2r( ivas_reverb_default_large_fc, ( *hRenderConfig )->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_L_N_BANDS ); mvr2r( ivas_reverb_default_large_RT60, ( *hRenderConfig )->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_L_N_BANDS ); mvr2r( ivas_reverb_default_large_DSR, ( *hRenderConfig )->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_L_N_BANDS ); +#endif for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) { @@ -157,6 +163,7 @@ ivas_error ivas_render_config_init_from_rom( return IVAS_ERR_OK; } +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE /*-------------------------------------------------------------------* * ivas_render_config_change_defaults() @@ -216,3 +223,4 @@ ivas_error ivas_render_config_change_defaults( return IVAS_ERR_OK; } +#endif diff --git a/lib_rend/ivas_rom_rend.c b/lib_rend/ivas_rom_rend.c index 726ec105d5..186e1ac1c1 100644 --- a/lib_rend/ivas_rom_rend.c +++ b/lib_rend/ivas_rom_rend.c @@ -346,6 +346,7 @@ const float t_design_11_elevation[70] = * Reverberator ROM tables *-----------------------------------------------------------------------*/ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE const float ivas_reverb_default_small_fc[IVAS_REVERB_DEFAULT_S_N_BANDS] = { 200.0f, 600.0f, 1000.0f, 1400.0f, 1800.0f, 2200.0f, 2600.0f, 3000.0f, 3400.0f, 3800.0f, @@ -411,8 +412,13 @@ const float ivas_reverb_default_medium_DSR[IVAS_REVERB_DEFAULT_M_N_BANDS] = 1.271521e-05f, 6.951610e-06f, 6.154952e-06f, 1.181682e-05f, 7.084896e-06f, 3.571991e-06f, 2.210372e-06f }; +#endif +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE const float ivas_reverb_default_large_fc[IVAS_REVERB_DEFAULT_L_N_BANDS] = +#else +const float ivas_reverb_default_fc[IVAS_REVERB_DEFAULT_N_BANDS] = +#endif { 20.0f, 25.0f, 31.5f, 40.0f, 50.0f, 63.0f, 80.0f, 100.0f, @@ -424,7 +430,11 @@ const float ivas_reverb_default_large_fc[IVAS_REVERB_DEFAULT_L_N_BANDS] = 12500.0f, 16000.0f, 20000.0f }; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE const float ivas_reverb_default_large_RT60[IVAS_REVERB_DEFAULT_L_N_BANDS] = +#else +const float ivas_reverb_default_RT60[IVAS_REVERB_DEFAULT_N_BANDS] = +#endif { 1.3622f, 1.4486f, 1.3168f, 1.5787f, 1.4766f, 1.3954f, 1.2889f, 1.3462f, @@ -436,7 +446,11 @@ const float ivas_reverb_default_large_RT60[IVAS_REVERB_DEFAULT_L_N_BANDS] = 0.71945f, 0.61682f, 0.60031f }; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE const float ivas_reverb_default_large_DSR[IVAS_REVERB_DEFAULT_L_N_BANDS] = +#else +const float ivas_reverb_default_DSR[IVAS_REVERB_DEFAULT_N_BANDS] = +#endif { 1.8811e-08f, 2.1428e-08f, 1.3972e-08f, 1.51e-08f, 1.287e-08f, 1.8747e-08f, 2.413e-08f, 3.9927e-08f, diff --git a/lib_rend/ivas_rom_rend.h b/lib_rend/ivas_rom_rend.h index 880408e69d..9c7fa5c09e 100644 --- a/lib_rend/ivas_rom_rend.h +++ b/lib_rend/ivas_rom_rend.h @@ -113,6 +113,7 @@ extern const float t_design_11_elevation[70]; * Reverberator ROM tables *-----------------------------------------------------------------------*/ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE extern const float ivas_reverb_default_small_fc[]; extern const float ivas_reverb_default_small_RT60[]; extern const float ivas_reverb_default_small_DSR[]; @@ -124,6 +125,7 @@ extern const float ivas_reverb_default_medium_DSR[]; extern const float ivas_reverb_default_large_fc[]; extern const float ivas_reverb_default_large_RT60[]; extern const float ivas_reverb_default_large_DSR[]; +#endif /*----------------------------------------------------------------------------------* -- GitLab From a97b28ec7e18724220ed325a3431711bef21d9b5 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Thu, 6 Nov 2025 13:20:05 +0200 Subject: [PATCH 11/18] Change ISM default reverb to LARGE --- lib_dec/ivas_init_dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 66b5c491d5..a531070a03 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1409,7 +1409,7 @@ ivas_error ivas_init_decoder( switch ( st_ivas->ivas_format ) { case ISM_FORMAT: - defaultReverbSize = DEFAULT_REVERB_MEDIUM; + defaultReverbSize = DEFAULT_REVERB_LARGE; break; case SBA_FORMAT: defaultReverbSize = DEFAULT_REVERB_SMALL; -- GitLab From 96ad345d234f89a069d1f33eaa69695109e7de8d Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Thu, 6 Nov 2025 18:14:03 +0200 Subject: [PATCH 12/18] Fix misplaced switch --- lib_rend/ivas_rom_rend.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib_rend/ivas_rom_rend.h b/lib_rend/ivas_rom_rend.h index 9c7fa5c09e..9d14bf325f 100644 --- a/lib_rend/ivas_rom_rend.h +++ b/lib_rend/ivas_rom_rend.h @@ -125,6 +125,10 @@ extern const float ivas_reverb_default_medium_DSR[]; extern const float ivas_reverb_default_large_fc[]; extern const float ivas_reverb_default_large_RT60[]; extern const float ivas_reverb_default_large_DSR[]; +#else +extern const float ivas_reverb_default_fc[]; +extern const float ivas_reverb_default_RT60[]; +extern const float ivas_reverb_default_DSR[]; #endif -- GitLab From a3b55c8ae9e83ba422711afcf274a42e7104658a Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Thu, 6 Nov 2025 19:44:18 +0200 Subject: [PATCH 13/18] Add more missing else paths. --- lib_rend/ivas_render_config.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index e53b2366f3..6cfacab6d8 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -54,6 +54,9 @@ #define IVAS_REVERB_DEFAULT_M_PRE_DELAY 0.0125f #define IVAS_REVERB_DEFAULT_M_INPUT_DELAY 0.0f +#else +#define IVAS_REVERB_DEFAULT_PRE_DELAY 0.016f +#define IVAS_REVERB_DEFAULT_INPUT_DELAY 0.1f #endif #define IVAS_REVERB_DEFAULT_USE_ER 0 @@ -125,6 +128,10 @@ ivas_error ivas_render_config_init_from_rom( ( *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; +#else + ( *hRenderConfig )->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_N_BANDS; + ( *hRenderConfig )->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_PRE_DELAY; + ( *hRenderConfig )->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_INPUT_DELAY; #endif ( *hRenderConfig )->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; set_zero( &( *hRenderConfig )->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX ); @@ -135,6 +142,10 @@ ivas_error ivas_render_config_init_from_rom( mvr2r( ivas_reverb_default_large_fc, ( *hRenderConfig )->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_L_N_BANDS ); mvr2r( ivas_reverb_default_large_RT60, ( *hRenderConfig )->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_L_N_BANDS ); mvr2r( ivas_reverb_default_large_DSR, ( *hRenderConfig )->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_L_N_BANDS ); +#else + mvr2r( ivas_reverb_default_fc, ( *hRenderConfig )->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_default_RT60, ( *hRenderConfig )->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_N_BANDS ); + mvr2r( ivas_reverb_default_DSR, ( *hRenderConfig )->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_N_BANDS ); #endif for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) -- GitLab From 8697b7abeeb69176579b54cccf8b9112731c4de3 Mon Sep 17 00:00:00 2001 From: Archit Tamarapu Date: Fri, 7 Nov 2025 09:53:41 +0100 Subject: [PATCH 14/18] add default reverb sizes in renderer and initial commandline support --- apps/renderer.c | 68 ++++++++++++++++++++++- lib_rend/lib_rend.c | 128 +++++++++++++++++++++++++++++++++++++++++++- lib_rend/lib_rend.h | 3 ++ 3 files changed, 197 insertions(+), 2 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index e434c0ca2a..951b45961b 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -200,6 +200,9 @@ typedef struct IVAS_RENDER_FRAMESIZE render_framesize; uint16_t directivityPatternId[RENDERER_MAX_ISM_INPUTS]; AcousticEnvironmentSequence aeSequence; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + IVAS_ROOM_SIZE_T reverbRoomSize; +#endif } CmdlnArgs; typedef enum @@ -230,7 +233,12 @@ typedef enum CmdLnOptionId_framing, CmdLnOptionId_syncMdDelay, CmdLnOptionId_directivityPatternId, +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + CmdLnOptionId_acousticEnvironmentId, + CmdLnOptionId_roomSize, +#else CmdLnOptionId_acousticEnvironmentId +#endif } CmdLnOptionId; static const CmdLnParser_Option cliOptions[] = { @@ -396,6 +404,14 @@ static const CmdLnParser_Option cliOptions[] = { .matchShort = "aeid", .description = "Acoustic environment ID (number > 0) alternatively, it can be\na text file where each line contains \"ID duration\" for\nBINAURAL_ROOM_REVERB output.", }, +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + { + .id = CmdLnOptionId_roomSize, + .match = "room_size", + .matchShort = "rsz", + .description = "Selects default reverb based on a room size (S - small | M - medium | L - large)", + } +#endif }; @@ -1079,8 +1095,12 @@ int main( hrtfFileReader_close( &hrtfFileReader ); } - /* === Configure === */ +/* === Configure === */ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + if ( ( error = IVAS_REND_InitConfig( hIvasRend, args.reverbRoomSize, args.outConfig.audioConfig ) ) != IVAS_ERR_OK ) +#else if ( ( error = IVAS_REND_InitConfig( hIvasRend, args.outConfig.audioConfig ) ) != IVAS_ERR_OK ) +#endif { fprintf( stderr, "\nError in Renderer Config Init: %s\n", ivas_error_to_string( error ) ); goto cleanup; @@ -2551,6 +2571,39 @@ static bool parseAcousticEnvironmentIds( return true; } +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + + +static bool parseReverbRoomSize( + char *value, + IVAS_ROOM_SIZE_T *reverbRoomSize ) +{ + if ( strlen( value ) != 1 ) + { + fprintf( stderr, "Error: Unsupported room size selector %s!\n\n", value ); + return false; + } + + to_upper( value ); + switch ( value[0] ) + { + case 'S': + *reverbRoomSize = IVAS_ROOM_SIZE_SMALL; + break; + case 'M': + *reverbRoomSize = IVAS_ROOM_SIZE_MEDIUM; + break; + case 'L': + *reverbRoomSize = IVAS_ROOM_SIZE_LARGE; + break; + default: + fprintf( stderr, "Error: Unsupported room size selector %s!\n\n", value ); + return false; + } + + return true; +} +#endif static bool checkRequiredArgs( @@ -2672,6 +2725,10 @@ static CmdlnArgs defaultArgs( args.aeSequence.pValidity = NULL; args.aeSequence.selected = 0; args.aeSequence.frameCounter = 0; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + + args.reverbRoomSize = IVAS_ROOM_SIZE_AUTO; +#endif return args; } @@ -2857,6 +2914,15 @@ static void parseOption( args->syncMdDelay = strtof( optionValues[0], NULL ); #endif break; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + case CmdLnOptionId_roomSize: + assert( numOptionValues == 1 ); + if ( !parseReverbRoomSize( optionValues[0], &args->reverbRoomSize ) ) + { + fprintf( stderr, "Error: Unsupported room size selector %s!\n\n", optionValues[0] ); + } + break; +#endif default: assert( 0 && "This should be unreachable - all command line options should be explicitly handled." ); break; diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 4bb1024aae..af66932cd6 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -93,6 +93,9 @@ typedef struct const int16_t *pSplitRendBFI; const SPLIT_REND_WRAPPER *pSplitRendWrapper; const COMBINED_ORIENTATION_HANDLE *pCombinedOrientationData; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + const IVAS_DefaultReverbSize *pSelectedRoomReverbSize; +#endif } rendering_context; /* Common base for input structs */ @@ -228,6 +231,9 @@ struct IVAS_REND int8_t rendererConfigEnabled; RENDER_CONFIG_DATA *hRendererConfig; /* Renderer config pointer */ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + IVAS_DefaultReverbSize selectedRoomReverbSize; +#endif int16_t num_subframes; hrtf_handles hHrtfs; @@ -1242,6 +1248,9 @@ static rendering_context getRendCtx( ctx.pSplitRendBFI = &hIvasRend->splitRendBFI; ctx.pSplitRendWrapper = hIvasRend->splitRendWrapper; ctx.pCombinedOrientationData = &hIvasRend->hCombinedOrientationData; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + ctx.pSelectedRoomReverbSize = &hIvasRend->selectedRoomReverbSize; +#endif return ctx; } @@ -3798,6 +3807,85 @@ static ivas_error isar_pre_rend_init( return IVAS_ERR_OK; } +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE +static IVAS_DefaultReverbSize getDefaultReverbSize( + input_ism *ismInputs, + input_masa *masaInputs, + input_mc *mcInputs, + input_sba *sbaInputs ) +{ + bool combinedFormat; + int16_t i; + int16_t nActiveInputsIsm, nActiveInputsMc, nActiveInputsSba, nActiveInputsMasa; + IVAS_DefaultReverbSize selectedReverb; + selectedReverb = DEFAULT_REVERB_MEDIUM; + + combinedFormat = false; + nActiveInputsIsm = 0; + nActiveInputsMc = 0; + nActiveInputsMasa = 0; + nActiveInputsSba = 0; + + for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; i++ ) + { + if ( ismInputs[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) + { + nActiveInputsIsm++; + } + } + for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; i++ ) + { + if ( mcInputs[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) + { + nActiveInputsMasa++; + } + } + for ( i = 0; i < RENDERER_MAX_MC_INPUTS; i++ ) + { + if ( mcInputs[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) + { + nActiveInputsMc++; + } + } + for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; i++ ) + { + if ( mcInputs[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) + { + nActiveInputsSba++; + } + } + + /* ISM present with MASA/SBA inputs; treat as combined format */ + if ( nActiveInputsIsm && ( nActiveInputsMasa || nActiveInputsSba ) ) + { + combinedFormat = true; + } + + if ( combinedFormat ) + { + selectedReverb = DEFAULT_REVERB_MEDIUM; + } + else + { + /* Only set large if ISM is present alone */ + if ( nActiveInputsIsm && !nActiveInputsMc ) + { + selectedReverb = DEFAULT_REVERB_LARGE; + } + /* if only MC is present, medium will not be overridden by the subsequent block */ + else if ( nActiveInputsMc ) + { + selectedReverb = DEFAULT_REVERB_MEDIUM; + } + else if ( nActiveInputsMasa || nActiveInputsSba ) + { + selectedReverb = DEFAULT_REVERB_SMALL; + } + } + + return selectedReverb; +} +#endif /*-------------------------------------------------------------------* @@ -3897,6 +3985,15 @@ ivas_error IVAS_REND_AddInput( /* set global maximum delay after adding an input */ setMaxGlobalDelayNs( hIvasRend ); +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + + /* select default reverb size after adding an input */ + ivas_render_config_change_defaults( hIvasRend->hRendererConfig, + getDefaultReverbSize( hIvasRend->inputsIsm, + hIvasRend->inputsMasa, + hIvasRend->inputsMc, + hIvasRend->inputsSba ) ); +#endif return IVAS_ERR_OK; } @@ -4471,12 +4568,18 @@ ivas_error IVAS_REND_FeedInputMasaMetadata( *-------------------------------------------------------------------*/ ivas_error IVAS_REND_InitConfig( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ + IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + const IVAS_ROOM_SIZE_T roomReverbSize, /* i/o: Reverb room size */ +#endif const AUDIO_CONFIG outAudioConfig /* i : output audioConfig */ ) { ivas_error error; bool rendererConfigEnabled; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + IVAS_DefaultReverbSize selectedRoomReverbSize; +#endif rendererConfigEnabled = ( getAudioConfigType( outAudioConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ); @@ -4499,6 +4602,29 @@ ivas_error IVAS_REND_InitConfig( { return error; } +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + switch ( roomReverbSize ) + { + case IVAS_ROOM_SIZE_SMALL: + selectedRoomReverbSize = DEFAULT_REVERB_SMALL; + break; + case IVAS_ROOM_SIZE_MEDIUM: + selectedRoomReverbSize = DEFAULT_REVERB_MEDIUM; + break; + case IVAS_ROOM_SIZE_LARGE: + selectedRoomReverbSize = DEFAULT_REVERB_LARGE; + break; + case IVAS_ROOM_SIZE_AUTO: + default: + selectedRoomReverbSize = DEFAULT_REVERB_LARGE; + break; /* will be setup in IVAS_REND_AddInput() */ + } + if ( ( error = ivas_render_config_change_defaults( hIvasRend->hRendererConfig, selectedRoomReverbSize ) ) != IVAS_ERR_OK ) + { + return error; + } + +#endif } else { diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index 4d84f194f9..8fc569dbd4 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -249,6 +249,9 @@ ivas_error IVAS_REND_FeedInputMasaMetadata( ivas_error IVAS_REND_InitConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + const IVAS_ROOM_SIZE_T reverbRoomSize, /* i/o: Reverb room size */ +#endif const IVAS_AUDIO_CONFIG outAudioConfig /* i : output audioConfig */ ); -- GitLab From 2966540dbb9538e2aff941216d48b753e4e1b660 Mon Sep 17 00:00:00 2001 From: Archit Tamarapu Date: Mon, 10 Nov 2025 13:45:47 +0100 Subject: [PATCH 15/18] try to persist commandline setting of reverb room size --- apps/renderer.c | 17 +++-- lib_com/ivas_cnst.h | 3 +- lib_rend/lib_rend.c | 148 ++++++++++++++++++++++++++++++-------------- lib_rend/lib_rend.h | 15 ++++- 4 files changed, 128 insertions(+), 55 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index 951b45961b..666f6913b5 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1096,11 +1096,7 @@ int main( } /* === Configure === */ -#ifdef FIX_1318_ROOM_SIZE_CMD_LINE - if ( ( error = IVAS_REND_InitConfig( hIvasRend, args.reverbRoomSize, args.outConfig.audioConfig ) ) != IVAS_ERR_OK ) -#else if ( ( error = IVAS_REND_InitConfig( hIvasRend, args.outConfig.audioConfig ) ) != IVAS_ERR_OK ) -#endif { fprintf( stderr, "\nError in Renderer Config Init: %s\n", ivas_error_to_string( error ) ); goto cleanup; @@ -1180,6 +1176,18 @@ int main( fprintf( stderr, "\nError in IVAS_REND_SetOrientationTrackingMode(): %s\n", ivas_error_to_string( error ) ); goto cleanup; } +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + + /* Set reverb room size if specified */ + if ( args.reverbRoomSize != IVAS_ROOM_SIZE_AUTO ) + { + if ( ( IVAS_REND_SetReverbRoomSize( hIvasRend, args.reverbRoomSize ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError setting reverb room size\n" ); + goto cleanup; + } + } +#endif /* Set up output custom layout configuration */ if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) @@ -2920,6 +2928,7 @@ static void parseOption( if ( !parseReverbRoomSize( optionValues[0], &args->reverbRoomSize ) ) { fprintf( stderr, "Error: Unsupported room size selector %s!\n\n", optionValues[0] ); + exit( -1 ); } break; #endif diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 4c63c5e65c..0f49fd5a0b 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1618,9 +1618,10 @@ typedef enum #ifdef FIX_1318_ROOM_SIZE_CMD_LINE typedef enum { + DEFAULT_REVERB_UNSET = -1, DEFAULT_REVERB_SMALL, DEFAULT_REVERB_MEDIUM, - DEFAULT_REVERB_LARGE + DEFAULT_REVERB_LARGE, } IVAS_DefaultReverbSize; #endif diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 5a37440464..ceff2a2fd0 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -3129,6 +3129,9 @@ ivas_error IVAS_REND_Open( hIvasRend->hLimiter = NULL; hIvasRend->efapOutWrapper.hEfap = NULL; hIvasRend->efapOutWrapper.pCustomLsSetup = NULL; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_UNSET; +#endif #ifdef DEBUGGING hIvasRend->numClipping = 0; #endif @@ -3808,7 +3811,7 @@ static ivas_error isar_pre_rend_init( return IVAS_ERR_OK; } #ifdef FIX_1318_ROOM_SIZE_CMD_LINE -static IVAS_DefaultReverbSize getDefaultReverbSize( +static IVAS_ROOM_SIZE_T getDefaultReverbSize( input_ism *ismInputs, input_masa *masaInputs, input_mc *mcInputs, @@ -3816,14 +3819,14 @@ static IVAS_DefaultReverbSize getDefaultReverbSize( { bool combinedFormat; int16_t i; - int16_t nActiveInputsIsm, nActiveInputsMc, nActiveInputsSba, nActiveInputsMasa; - IVAS_DefaultReverbSize selectedReverb; - selectedReverb = DEFAULT_REVERB_MEDIUM; + int16_t nActiveInputsIsm, nActiveInputsMasa, nActiveInputsSba, nActiveInputsMc; + IVAS_ROOM_SIZE_T selectedReverb; + selectedReverb = IVAS_ROOM_SIZE_MEDIUM; combinedFormat = false; nActiveInputsIsm = 0; - nActiveInputsMc = 0; nActiveInputsMasa = 0; + nActiveInputsMc = 0; nActiveInputsSba = 0; for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; i++ ) @@ -3835,7 +3838,7 @@ static IVAS_DefaultReverbSize getDefaultReverbSize( } for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; i++ ) { - if ( mcInputs[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) + if ( masaInputs[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) { nActiveInputsMasa++; } @@ -3849,7 +3852,7 @@ static IVAS_DefaultReverbSize getDefaultReverbSize( } for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; i++ ) { - if ( mcInputs[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) + if ( sbaInputs[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) { nActiveInputsSba++; } @@ -3863,23 +3866,23 @@ static IVAS_DefaultReverbSize getDefaultReverbSize( if ( combinedFormat ) { - selectedReverb = DEFAULT_REVERB_MEDIUM; + selectedReverb = IVAS_ROOM_SIZE_MEDIUM; } else { /* Only set large if ISM is present alone */ if ( nActiveInputsIsm && !nActiveInputsMc ) { - selectedReverb = DEFAULT_REVERB_LARGE; + selectedReverb = IVAS_ROOM_SIZE_LARGE; } - /* if only MC is present, medium will not be overridden by the subsequent block */ + /* if only MC is present, set medium; Will not be overridden by the subsequent block */ else if ( nActiveInputsMc ) { - selectedReverb = DEFAULT_REVERB_MEDIUM; + selectedReverb = IVAS_ROOM_SIZE_MEDIUM; } else if ( nActiveInputsMasa || nActiveInputsSba ) { - selectedReverb = DEFAULT_REVERB_SMALL; + selectedReverb = IVAS_ROOM_SIZE_SMALL; } } @@ -3988,11 +3991,14 @@ ivas_error IVAS_REND_AddInput( #ifdef FIX_1318_ROOM_SIZE_CMD_LINE /* select default reverb size after adding an input */ - ivas_render_config_change_defaults( hIvasRend->hRendererConfig, - getDefaultReverbSize( hIvasRend->inputsIsm, - hIvasRend->inputsMasa, - hIvasRend->inputsMc, - hIvasRend->inputsSba ) ); + if ( hIvasRend->selectedRoomReverbSize == DEFAULT_REVERB_UNSET ) + { + IVAS_REND_SetReverbRoomSize( hIvasRend, + getDefaultReverbSize( hIvasRend->inputsIsm, + hIvasRend->inputsMasa, + hIvasRend->inputsMc, + hIvasRend->inputsSba ) ); + } #endif return IVAS_ERR_OK; @@ -4568,18 +4574,12 @@ ivas_error IVAS_REND_FeedInputMasaMetadata( *-------------------------------------------------------------------*/ ivas_error IVAS_REND_InitConfig( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ -#ifdef FIX_1318_ROOM_SIZE_CMD_LINE - const IVAS_ROOM_SIZE_T roomReverbSize, /* i/o: Reverb room size */ -#endif + IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const AUDIO_CONFIG outAudioConfig /* i : output audioConfig */ ) { ivas_error error; bool rendererConfigEnabled; -#ifdef FIX_1318_ROOM_SIZE_CMD_LINE - IVAS_DefaultReverbSize selectedRoomReverbSize; -#endif rendererConfigEnabled = ( getAudioConfigType( outAudioConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ); @@ -4602,29 +4602,6 @@ ivas_error IVAS_REND_InitConfig( { return error; } -#ifdef FIX_1318_ROOM_SIZE_CMD_LINE - switch ( roomReverbSize ) - { - case IVAS_ROOM_SIZE_SMALL: - selectedRoomReverbSize = DEFAULT_REVERB_SMALL; - break; - case IVAS_ROOM_SIZE_MEDIUM: - selectedRoomReverbSize = DEFAULT_REVERB_MEDIUM; - break; - case IVAS_ROOM_SIZE_LARGE: - selectedRoomReverbSize = DEFAULT_REVERB_LARGE; - break; - case IVAS_ROOM_SIZE_AUTO: - default: - selectedRoomReverbSize = DEFAULT_REVERB_LARGE; - break; /* will be setup in IVAS_REND_AddInput() */ - } - if ( ( error = ivas_render_config_change_defaults( hIvasRend->hRendererConfig, selectedRoomReverbSize ) ) != IVAS_ERR_OK ) - { - return error; - } - -#endif } else { @@ -5256,6 +5233,83 @@ ivas_error IVAS_REND_GetCombinedOrientation( return IVAS_ERR_OK; } +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + +/*---------------------------------------------------------------------* + * IVAS_REND_GetCombinedOrientation() + * + * + *---------------------------------------------------------------------*/ +ivas_error IVAS_REND_GetReverbRoomSize( + IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ + IVAS_ROOM_SIZE_T *reverbRoomSize /* o : Reverb room size */ +) +{ + switch ( hIvasRend->selectedRoomReverbSize ) + { + case DEFAULT_REVERB_SMALL: + *reverbRoomSize = IVAS_ROOM_SIZE_SMALL; + break; + case DEFAULT_REVERB_MEDIUM: + *reverbRoomSize = IVAS_ROOM_SIZE_MEDIUM; + break; + case DEFAULT_REVERB_LARGE: + *reverbRoomSize = IVAS_ROOM_SIZE_LARGE; + break; + case DEFAULT_REVERB_UNSET: + default: + *reverbRoomSize = IVAS_ROOM_SIZE_AUTO; + break; + } + + return IVAS_ERR_OK; +} + +/*---------------------------------------------------------------------* + * IVAS_REND_GetCombinedOrientation() + * + * + *---------------------------------------------------------------------*/ +ivas_error IVAS_REND_SetReverbRoomSize( + IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ + const IVAS_ROOM_SIZE_T reverbRoomSize /* i : Reverb room size */ +) +{ + ivas_error error; + + switch ( reverbRoomSize ) + { + case IVAS_ROOM_SIZE_SMALL: + hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_SMALL; + break; + case IVAS_ROOM_SIZE_MEDIUM: + hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_MEDIUM; + break; + case IVAS_ROOM_SIZE_LARGE: + hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_LARGE; + break; + case IVAS_ROOM_SIZE_AUTO: + default: + hIvasRend->selectedRoomReverbSize = DEFAULT_REVERB_UNSET; + break; /* will be setup in IVAS_REND_AddInput() */ + } + + if ( hIvasRend->hRendererConfig != NULL ) + { + if ( ( error = ivas_render_config_change_defaults( hIvasRend->hRendererConfig, hIvasRend->selectedRoomReverbSize ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + return IVAS_ERR_UNEXPECTED_NULL_POINTER; + } + + return IVAS_ERR_OK; +} + +#endif /*-------------------------------------------------------------------* diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index 8fc569dbd4..dfed157314 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -249,9 +249,6 @@ ivas_error IVAS_REND_FeedInputMasaMetadata( ivas_error IVAS_REND_InitConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ -#ifdef FIX_1318_ROOM_SIZE_CMD_LINE - const IVAS_ROOM_SIZE_T reverbRoomSize, /* i/o: Reverb room size */ -#endif const IVAS_AUDIO_CONFIG outAudioConfig /* i : output audioConfig */ ); @@ -264,6 +261,18 @@ ivas_error IVAS_REND_FeedRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ ); +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + +ivas_error IVAS_REND_GetReverbRoomSize( + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ + IVAS_ROOM_SIZE_T *reverbRoomSize /* o : Reverb room size */ +); + +ivas_error IVAS_REND_SetReverbRoomSize( + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ + const IVAS_ROOM_SIZE_T reverbRoomSize /* i : Reverb room size */ +); +#endif ivas_error IVAS_REND_FeedSplitBinauralBitstream( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ -- GitLab From da6ec4adf290a6f2820a157233c1790e1a429b94 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Mon, 10 Nov 2025 18:56:48 +0200 Subject: [PATCH 16/18] Clang format --- apps/renderer.c | 2 +- lib_dec/ivas_init_dec.c | 4 ++-- lib_dec/ivas_stat_dec.h | 18 +++++++++--------- lib_dec/lib_dec.c | 12 ++++++------ 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index 666f6913b5..1be3fec6a9 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1095,7 +1095,7 @@ int main( hrtfFileReader_close( &hrtfFileReader ); } -/* === Configure === */ + /* === Configure === */ if ( ( error = IVAS_REND_InitConfig( hIvasRend, args.outConfig.audioConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError in Renderer Config Init: %s\n", ivas_error_to_string( error ) ); diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index eebe2df944..f337611110 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1542,8 +1542,8 @@ ivas_error ivas_init_decoder( } } - #ifdef FIX_1318_ROOM_SIZE_CMD_LINE - /*--------------------------------------------------------------------------* +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + /*--------------------------------------------------------------------------* * Allocate and initialize HRTF Statistics handle, get default reverb values *--------------------------------------------------------------------------*/ #else diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 1048ee3410..6a8fa5d72b 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1007,15 +1007,15 @@ typedef struct jbm_metadata_structure typedef struct decoder_config_structure { - int32_t ivas_total_brate; /* IVAS total bitrate in bps */ - int32_t last_ivas_total_brate; /* last IVAS total bitrate in bps */ - int32_t output_Fs; /* output signal sampling frequency in Hz */ - int16_t nchan_out; /* number of output audio channels */ - AUDIO_CONFIG output_config; /* output audio configuration */ - int16_t Opt_LsCustom; /* indicates whether loudspeaker custom setup is used */ - int16_t Opt_HRTF_binary; /* indicates whether HRTF binary file is used */ - int16_t Opt_Headrotation; /* indicates whether head-rotation is used */ - int16_t Opt_RendConfigCustom; /* indicates whether Renderer configuration custom setup is used */ + int32_t ivas_total_brate; /* IVAS total bitrate in bps */ + int32_t last_ivas_total_brate; /* last IVAS total bitrate in bps */ + int32_t output_Fs; /* output signal sampling frequency in Hz */ + int16_t nchan_out; /* number of output audio channels */ + AUDIO_CONFIG output_config; /* output audio configuration */ + int16_t Opt_LsCustom; /* indicates whether loudspeaker custom setup is used */ + int16_t Opt_HRTF_binary; /* indicates whether HRTF binary file is used */ + int16_t Opt_Headrotation; /* indicates whether head-rotation is used */ + int16_t Opt_RendConfigCustom; /* indicates whether Renderer configuration custom setup is used */ #ifdef FIX_1318_ROOM_SIZE_CMD_LINE IVAS_ROOM_SIZE_T Opt_RoomSize; /* Selected room size */ #endif diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 2caa10acef..c406099328 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -462,12 +462,12 @@ ivas_error IVAS_DEC_Configure( #ifdef FIX_1318_ROOM_SIZE_CMD_LINE const IVAS_ROOM_SIZE_T roomSize, /* i : room size selector for reverb */ #endif - const bool non_diegetic_pan_enabled, /* i : enabled diegetic panning */ - const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ - const bool dpidEnabled, /* i : enable directivity pattern option */ - const uint16_t acousticEnvironmentId, /* i : Acoustic environment ID */ - const bool objEditEnabled, /* i : enable object editing */ - const bool delayCompensationEnabled /* i : enable delay compensation */ + const bool non_diegetic_pan_enabled, /* i : enabled diegetic panning */ + const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ + const bool dpidEnabled, /* i : enable directivity pattern option */ + const uint16_t acousticEnvironmentId, /* i : Acoustic environment ID */ + const bool objEditEnabled, /* i : enable object editing */ + const bool delayCompensationEnabled /* i : enable delay compensation */ ) { Decoder_Struct *st_ivas; -- GitLab From 6eebe6d053dead71b7c9d3e338d08c6c9e9b428b Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Mon, 10 Nov 2025 19:11:12 +0200 Subject: [PATCH 17/18] Fix build error. --- apps/decoder.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/decoder.c b/apps/decoder.c index 21f323b308..3580c8cb4e 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -4688,9 +4688,15 @@ ivas_error restartDecoder( uint16_t aeID = arg->aeSequence.count > 0 ? arg->aeSequence.pID[0] : 65535; IVAS_AUDIO_CONFIG outputConfig = ( codec == IVAS_DEC_MODE_IVAS ) ? arg->outputConfig : IVAS_AUDIO_CONFIG_MONO; +#ifdef FIX_1318_ROOM_SIZE_CMD_LINE + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg->output_Fs, arg->outputConfig, arg->renderFramesize, arg->customLsOutputEnabled, arg->hrtfReaderEnabled, + arg->enableHeadRotation, arg->enableExternalOrientation, arg->orientation_tracking, arg->renderConfigEnabled, arg->roomSize, arg->non_diegetic_pan_enabled, + arg->non_diegetic_pan_gain, arg->dpidEnabled, aeID, arg->objEditEnabled, arg->delayCompensationEnabled ) ) != IVAS_ERR_OK ) +#else if ( ( error = IVAS_DEC_Configure( hIvasDec, arg->output_Fs, outputConfig, arg->renderFramesize, arg->customLsOutputEnabled, arg->hrtfReaderEnabled, arg->enableHeadRotation, arg->enableExternalOrientation, arg->orientation_tracking, arg->renderConfigEnabled, arg->non_diegetic_pan_enabled, arg->non_diegetic_pan_gain, arg->dpidEnabled, aeID, arg->objEditEnabled, arg->delayCompensationEnabled ) ) != IVAS_ERR_OK ) +#endif { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; -- GitLab From a409a2219342306dc881cffd3be1b9c744ceb687 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Mon, 10 Nov 2025 19:18:54 +0200 Subject: [PATCH 18/18] Fix one more build warning. --- apps/decoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/decoder.c b/apps/decoder.c index 3580c8cb4e..889fde4798 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -4689,7 +4689,7 @@ ivas_error restartDecoder( IVAS_AUDIO_CONFIG outputConfig = ( codec == IVAS_DEC_MODE_IVAS ) ? arg->outputConfig : IVAS_AUDIO_CONFIG_MONO; #ifdef FIX_1318_ROOM_SIZE_CMD_LINE - if ( ( error = IVAS_DEC_Configure( hIvasDec, arg->output_Fs, arg->outputConfig, arg->renderFramesize, arg->customLsOutputEnabled, arg->hrtfReaderEnabled, + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg->output_Fs, outputConfig, arg->renderFramesize, arg->customLsOutputEnabled, arg->hrtfReaderEnabled, arg->enableHeadRotation, arg->enableExternalOrientation, arg->orientation_tracking, arg->renderConfigEnabled, arg->roomSize, arg->non_diegetic_pan_enabled, arg->non_diegetic_pan_gain, arg->dpidEnabled, aeID, arg->objEditEnabled, arg->delayCompensationEnabled ) ) != IVAS_ERR_OK ) #else -- GitLab