From 273a9dc6d700830fba2626c8014489fb828efe8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20Toftg=C3=A5rd?= Date: Mon, 6 Feb 2023 21:59:15 +0100 Subject: [PATCH 1/5] Fix for issue 310 under define FIX_310_TD_REND_DELAY. HR filter latency added to ROM tables and binary file for TD renderer. Delay changes compared to main going from 0 to 1 sample delay (at 48 kHz). Changed NS2SA() to roundf() in IVAS_REND_GetDelay(), as done for get_delay() in decoder. --- lib_com/ivas_cnst.h | 2 ++ lib_com/options.h | 1 + lib_rend/ivas_hrtf.c | 3 +++ lib_rend/ivas_objectRenderer.c | 9 ++++++- lib_rend/ivas_rom_TdBinauralRenderer.c | 3 +++ lib_rend/ivas_rom_TdBinauralRenderer.h | 3 +++ lib_rend/ivas_stat_rend.h | 3 +++ lib_rend/lib_rend.c | 26 +++++++++++++++++++ lib_util/hrtf_file_reader.c | 4 +++ .../Orange_53/hrfilter_model_v002_16kHz.bin | 4 +-- .../Orange_53/hrfilter_model_v002_32kHz.bin | 4 +-- .../Orange_53/hrfilter_model_v002_48kHz.bin | 4 +-- 12 files changed, 59 insertions(+), 7 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index fe99d82610..4d6e86be0e 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1412,7 +1412,9 @@ typedef enum #define MAX_ANGULAR_STEP (15.0f) #define MAX_ANGULAR_STEP_INV ( 1.0f / MAX_ANGULAR_STEP ) #define MAX_INTERPOLATION_STEPS 12 +#ifndef FIX_310_TD_REND_DELAY #define BINAURAL_TD_LATENCY_S 0.0f /* ITD fix removes TD renderer delay -- should be cleaned out */ +#endif /* ----- Enums - TD Renderer ----- */ diff --git a/lib_com/options.h b/lib_com/options.h index 35ade80901..52c2ed1a18 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -153,6 +153,7 @@ #define FIX_FOR_TEST /* allows tests to pass using old TD binary file, to be removed after merge*/ #define FIX_301_PLC /* FhG: issue 301 - fix bug of missing update of overlap buffer for DFT-stereo PLC*/ +#define FIX_310_TD_REND_DELAY /* Adding HRTF delay being read from ROM/Binary file, fix rounding for delay compensation in renderer */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index ba5f02da63..082c0f2057 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -211,6 +211,9 @@ void DefaultBSplineModel( HRTF_model_precalc( model ); +#ifdef FIX_310_TD_REND_DELAY + HrFiltSet_p->latency_s = TdRendBin_HRIR_latency_s; +#endif HrFiltSet_p->SampleRate = output_Fs; HrFiltSet_p->FiltLength = HrFiltSet_p->ModelParams.K; BSplineModelEvalAlloc( &HrFiltSet_p->ModelParams, &HrFiltSet_p->ModelEval ); diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index 7c8173e222..c313bf2e79 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -188,8 +188,11 @@ ivas_error ivas_td_binaural_open( } st_ivas->hBinRendererTd = hBinRendererTd; - +#ifdef FIX_310_TD_REND_DELAY + st_ivas->binaural_latency_ns = (int32_t) ( hBinRendererTd->HrFiltSet_p->latency_s * 1000000000.f ); +#else st_ivas->binaural_latency_ns = (int32_t) ( BINAURAL_TD_LATENCY_S * 1000000000.f ); +#endif return error; } @@ -630,7 +633,11 @@ ivas_error ivas_rend_TDObjRendOpen( pTDRend->hBinRendererTd = hBinRendererTd; +#ifdef FIX_310_TD_REND_DELAY + pTDRend->binaural_latency_ns = (int32_t) ( hBinRendererTd->HrFiltSet_p->latency_s * 1000000000.f ); +#else pTDRend->binaural_latency_ns = (int32_t) ( BINAURAL_TD_LATENCY_S * 1000000000.f ); +#endif return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_rom_TdBinauralRenderer.c b/lib_rend/ivas_rom_TdBinauralRenderer.c index 4ceec1e43f..50de3f253b 100644 --- a/lib_rend/ivas_rom_TdBinauralRenderer.c +++ b/lib_rend/ivas_rom_TdBinauralRenderer.c @@ -46,6 +46,9 @@ * TD Binaural rendering related ROM tables *------------------------------------------------------------------------*/ /* TD renderer HRTF default model Orange53 */ +#ifdef FIX_310_TD_REND_DELAY +const float orange53_rom_latency_s = 0.000020834f; +#endif const int16_t orange53_rom_azimDim2[18] = { 1, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 1, }; diff --git a/lib_rend/ivas_rom_TdBinauralRenderer.h b/lib_rend/ivas_rom_TdBinauralRenderer.h index ce0ffc7408..bbe970869b 100644 --- a/lib_rend/ivas_rom_TdBinauralRenderer.h +++ b/lib_rend/ivas_rom_TdBinauralRenderer.h @@ -42,6 +42,9 @@ * TD Binaural rendering related ROM tables *------------------------------------------------------------------------*/ /* TD renderer HRTF default model Orange53 */ +#ifdef FIX_310_TD_REND_DELAY +extern const float orange53_rom_latency_s; +#endif extern const int16_t orange53_rom_azimDim2[18]; extern const int16_t orange53_rom_azimDim3[18]; extern const int16_t orange53_rom_azim_start_idx[18]; diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 975656dffb..abb0bb12a7 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -758,6 +758,9 @@ typedef struct TDREND_HRFILT_FiltSet_struct ModelEval_t ModelEval; ModelParamsITD_t ModelParamsITD; TDREND_HRFILT_Method_t FilterMethod; /* HR filtering method */ +#ifdef FIX_310_TD_REND_DELAY + float latency_s; +#endif } TDREND_HRFILT_FiltSet_t; diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index c3b3ef07c2..a6fb9c7cd5 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -3370,6 +3370,9 @@ ivas_error IVAS_REND_GetDelay( */ int16_t i; int32_t latency_ns; +#ifdef FIX_310_TD_REND_DELAY + int32_t max_latency_ns; +#endif /*-----------------------------------------------------------------* * Validate function arguments @@ -3382,6 +3385,9 @@ ivas_error IVAS_REND_GetDelay( *timeScale = hIvasRend->sampleRateOut; *nSamples = 0; +#ifdef FIX_310_TD_REND_DELAY + max_latency_ns = 0; +#endif /* Compute the maximum delay across all inputs */ for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; i++ ) @@ -3395,7 +3401,11 @@ ivas_error IVAS_REND_GetDelay( latency_ns = max( hIvasRend->inputsIsm[i].crendWrapper.binaural_latency_ns, hIvasRend->inputsIsm[i].tdRendWrapper.binaural_latency_ns ); #endif +#ifdef FIX_310_TD_REND_DELAY + max_latency_ns = max( max_latency_ns, latency_ns ); +#else *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); +#endif } } @@ -3410,7 +3420,11 @@ ivas_error IVAS_REND_GetDelay( latency_ns = max( hIvasRend->inputsMc[i].crendWrapper.binaural_latency_ns, hIvasRend->inputsMc[i].tdRendWrapper.binaural_latency_ns ); #endif +#ifdef FIX_310_TD_REND_DELAY + max_latency_ns = max( max_latency_ns, latency_ns ); +#else *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); +#endif } } @@ -3423,7 +3437,11 @@ ivas_error IVAS_REND_GetDelay( #else latency_ns = hIvasRend->inputsSba[i].crendWrapper.binaural_latency_ns; #endif +#ifdef FIX_310_TD_REND_DELAY + max_latency_ns = max( max_latency_ns, latency_ns ); +#else *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); +#endif } } @@ -3432,10 +3450,18 @@ ivas_error IVAS_REND_GetDelay( if ( hIvasRend->inputsMasa[i].base.inConfig != IVAS_REND_AUDIO_CONFIG_UNKNOWN ) { latency_ns = NS2SA( hIvasRend->sampleRateOut, (int32_t) ( (float) IVAS_FB_DEC_DELAY_NS + 0.5f ) ); +#ifdef FIX_310_TD_REND_DELAY + max_latency_ns = max( max_latency_ns, latency_ns ); +#else *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); +#endif } } +#ifdef FIX_310_TD_REND_DELAY + *nSamples = (int16_t) roundf( (float) max_latency_ns * *timeScale / 1000000000.f ); +#endif + return IVAS_ERR_OK; } diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 97b33b7fd1..3f13ec96a4 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -298,6 +298,10 @@ static ivas_error LoadBSplineBinary( ModelParams_t *model; int16_t i, tmp; +#ifdef FIX_310_TD_REND_DELAY + fread( &HrFiltSet_p->latency_s, sizeof( float ), 1, f_hrtf ); +#endif + model = &( HrFiltSet_p->ModelParams ); /* Set ROM flag for correct deallocation */ diff --git a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_16kHz.bin b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_16kHz.bin index 17691616db..dd4d32cdcb 100644 --- a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_16kHz.bin +++ b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_16kHz.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0950686593146f4d7c7b622d2e52afdc10cc63481824d516ee88f7e2996f0de4 -size 204970 +oid sha256:1fdfc45a9bd54697b85cec44906c6cf2ac76b58440911472ec14ef743c6bcb52 +size 204974 diff --git a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_32kHz.bin b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_32kHz.bin index f6cf12bf4f..63ed4ac7fa 100644 --- a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_32kHz.bin +++ b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_32kHz.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1467d78861387e370ba916a93730961dd2d4abf1eff133740f9b7fafb89b32c4 -size 403802 +oid sha256:8b81a9aa52f64f86fe3abdd50a3c65b6a1ce632db32a30606b7b8bb17f2c3d36 +size 403806 diff --git a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_48kHz.bin b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_48kHz.bin index 8eeacfc0de..dceb314b87 100644 --- a/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_48kHz.bin +++ b/scripts/td_object_renderer/hrtf_data/Orange_53/hrfilter_model_v002_48kHz.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1740802509d5c3076a259b113ffc832e5585da9bc0fdbe851b89d524ccba374e -size 598010 +oid sha256:ac395980e37d1e38f602b7223c401b1c6711912d1a5db71ee668584c30c521b1 +size 598014 -- GitLab From b281eb1c31b06ec0d6265e1f0ffd11866525f564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20Toftg=C3=A5rd?= Date: Mon, 6 Feb 2023 22:12:18 +0100 Subject: [PATCH 2/5] Missing change. --- lib_rend/ivas_hrtf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 082c0f2057..84efa1f13e 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -212,7 +212,7 @@ void DefaultBSplineModel( HRTF_model_precalc( model ); #ifdef FIX_310_TD_REND_DELAY - HrFiltSet_p->latency_s = TdRendBin_HRIR_latency_s; + HrFiltSet_p->latency_s = orange53_rom_latency_s; #endif HrFiltSet_p->SampleRate = output_Fs; HrFiltSet_p->FiltLength = HrFiltSet_p->ModelParams.K; -- GitLab From cc4decf9cf7c066a5d4d285ce4da301aad6a89f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20Toftg=C3=A5rd?= Date: Mon, 6 Feb 2023 23:07:19 +0100 Subject: [PATCH 3/5] Updated binaural files. --- .../binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin | 4 ++-- .../binaural_renderers_hrtf_data/ivas_binaural_32kHz.bin | 4 ++-- .../binaural_renderers_hrtf_data/ivas_binaural_48kHz.bin | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin b/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin index e099563d59..b9a35aa26b 100644 --- a/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin +++ b/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44a59257b01a2f8dde378958c4539e80ccd50157e2766dd08c2f9858275d2f2c -size 2074172 +oid sha256:81d8c14bf10697a0353c15986fde3432df1b6909ea2d122ce3599b3655237d71 +size 2074176 diff --git a/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_32kHz.bin b/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_32kHz.bin index 2137f267a1..992a1c61fa 100644 --- a/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_32kHz.bin +++ b/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_32kHz.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be4a11053ec5f265f33fdc36c6a68762b7e9974b9ff23af85dcca8ffaf62aef0 -size 2578384 +oid sha256:16b993a0af01bf8b8289e554452e6d2c98e7b977bf2a40f0afd3ca7498d39f8b +size 2578388 diff --git a/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_48kHz.bin b/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_48kHz.bin index 1532a923a1..eaf5d445fe 100644 --- a/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_48kHz.bin +++ b/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_48kHz.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcaeb7604af344e2ab4d4bafb9fa05cd06fb0989320ea4343e6a9328233e199d -size 2860960 +oid sha256:1a29e9692bd5be5e93358db63159f55851d12f66c0382ff14afb642090427685 +size 2860964 -- GitLab From b779a5c4e8741f2e419ca2a378ca1c132ffe8b62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20Toftg=C3=A5rd?= Date: Wed, 8 Feb 2023 08:05:00 +0100 Subject: [PATCH 4/5] Temporarily set latency to 0. --- lib_rend/ivas_rom_TdBinauralRenderer.c | 3 ++- lib_util/hrtf_file_reader.c | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib_rend/ivas_rom_TdBinauralRenderer.c b/lib_rend/ivas_rom_TdBinauralRenderer.c index 50de3f253b..7442930b6d 100644 --- a/lib_rend/ivas_rom_TdBinauralRenderer.c +++ b/lib_rend/ivas_rom_TdBinauralRenderer.c @@ -47,7 +47,8 @@ *------------------------------------------------------------------------*/ /* TD renderer HRTF default model Orange53 */ #ifdef FIX_310_TD_REND_DELAY -const float orange53_rom_latency_s = 0.000020834f; +//const float orange53_rom_latency_s = 0.000020834f; +const float orange53_rom_latency_s = 0.0f; // temp #endif const int16_t orange53_rom_azimDim2[18] = { 1, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 1, diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 3f13ec96a4..0e0abfc2ef 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -300,6 +300,7 @@ static ivas_error LoadBSplineBinary( #ifdef FIX_310_TD_REND_DELAY fread( &HrFiltSet_p->latency_s, sizeof( float ), 1, f_hrtf ); + HrFiltSet_p->latency_s = 0.0f; // temp #endif model = &( HrFiltSet_p->ModelParams ); -- GitLab From 50f356de281869999e7ea7dff85f7406dafec9b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20Toftg=C3=A5rd?= Date: Wed, 8 Feb 2023 08:20:57 +0100 Subject: [PATCH 5/5] Added back binaural latency (which was temporarily set to 0). --- lib_rend/ivas_rom_TdBinauralRenderer.c | 3 +-- lib_util/hrtf_file_reader.c | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lib_rend/ivas_rom_TdBinauralRenderer.c b/lib_rend/ivas_rom_TdBinauralRenderer.c index 7442930b6d..50de3f253b 100644 --- a/lib_rend/ivas_rom_TdBinauralRenderer.c +++ b/lib_rend/ivas_rom_TdBinauralRenderer.c @@ -47,8 +47,7 @@ *------------------------------------------------------------------------*/ /* TD renderer HRTF default model Orange53 */ #ifdef FIX_310_TD_REND_DELAY -//const float orange53_rom_latency_s = 0.000020834f; -const float orange53_rom_latency_s = 0.0f; // temp +const float orange53_rom_latency_s = 0.000020834f; #endif const int16_t orange53_rom_azimDim2[18] = { 1, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 1, diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 0e0abfc2ef..3f13ec96a4 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -300,7 +300,6 @@ static ivas_error LoadBSplineBinary( #ifdef FIX_310_TD_REND_DELAY fread( &HrFiltSet_p->latency_s, sizeof( float ), 1, f_hrtf ); - HrFiltSet_p->latency_s = 0.0f; // temp #endif model = &( HrFiltSet_p->ModelParams ); -- GitLab