diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index f2e4ba8620652caa59db0d738ba0b4b76929da21..e07ca8cbcbad57efabb8cab24956ff03ba236706 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1416,7 +1416,9 @@ typedef enum #endif #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 7ee75363c75bd750120fe7661ad6dfe76fd6f8d6..9a2e6fbaf96b3a67f50185db9294af1ee28cf02f 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -153,6 +153,7 @@ #define FIX_301_PLC /* FhG: issue 301 - fix bug of missing update of overlap buffer for DFT-stereo PLC*/ #define FIX_337_TDREND_INTP /* Issue 337: TD renderer interpolation threshold set too low */ +#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 ba5f02da636d5bdd583db631b781f0e3eb1211de..84efa1f13e697915b5dfefb56cbee2b4a4b37509 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 = orange53_rom_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 7c8173e22226eae005002658baf2bd559321f822..c313bf2e7955addc08dcd6be5c3c65f8262a7ed4 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 4ceec1e43f8478f51402c461c9cad8f99d5bf8e1..50de3f253b7ad0a60eca5f6bfb22ca237760b018 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 ce0ffc7408e9bfd9821e8e6bc2ec29147167f066..bbe970869be805c343a66b4bc668de9850944bbe 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 975656dffb1eaf1eb2cb91c98fc89dec0b10aa7b..abb0bb12a77a89206e6dfa7b1b7bf53eb8cbd43c 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 c3b3ef07c285b1d58ffcbc838be71ff5c94172ab..a6fb9c7cd58a02ee913d7f96e2617012ae3990c7 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 42ab5a869bce61d473f6033ef25d70bb477d68f3..21f2a2988de4ed215aa45978f6eec1bb89f40668 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/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin b/scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin index e099563d59c8d1ca05b0131e06ba2c61482b6c6d..b9a35aa26bc7f15ba44e953fa83c2d8187b657bb 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 2137f267a11d8da905480aa3e32e4a3d81cad678..992a1c61fa8ed95135a85384bed269b083e76259 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 1532a923a1c1e3861d1a79c78fe0e5a2346fb21f..eaf5d445febfbea1a8684f56179927b5aaad710b 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 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 17691616db240c96866cc4db3bc2ce48c5b160bc..dd4d32cdcbfcc7047166a06c07ddda14cc3dae6a 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 f6cf12bf4fb3a4bc93e70e839f95d769b8ee5aa3..63ed4ac7fa0647ab05b9ff115e92d91ff09c8249 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 8eeacfc0de6520a63a64270227991575e8583f9a..dceb314b87d91ada9c341a3a425e92d89c8c2d61 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