From dfcbfd4e5b2556b406d17b7c4835848bd198839d Mon Sep 17 00:00:00 2001 From: Jan Brouwer Date: Thu, 30 Nov 2023 17:20:21 +0100 Subject: [PATCH 01/52] added lr_energy_and_iac at decoder and renderers --- lib_dec/ivas_stat_dec.h | 1 + lib_rend/ivas_crend.c | 2 +- lib_rend/ivas_stat_rend.h | 3 +++ lib_rend/lib_rend.c | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index c2c31152f8..06cc564bf8 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1120,6 +1120,7 @@ typedef struct Decoder_Struct HRTFS_CREND_HANDLE hSetOfHRTF; /* Set of HRTFs handle (CRend) */ HRTFS_FASTCONV_HANDLE hHrtfFastConv; /* FASTCONV HRTF tables for binaural rendering */ HRTFS_PARAMBIN_HANDLE hHrtfParambin; /* HRTF tables for parametric binauralizer */ + float *lr_energy_and_iac[3]; LSSETUP_CUSTOM_HANDLE hLsSetupCustom; /* Custom LS configuration handle */ float *hoa_dec_mtx; /* Pointer to decoder matrix for SBA */ HEAD_TRACK_DATA_HANDLE hHeadTrackData; /* Head tracking data structure */ diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index cb48e8706e..d63b04a205 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -1611,7 +1611,7 @@ ivas_error ivas_rend_openCrend( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { - if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, NULL, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, hSetOfHRTF->lr_energy_and_iac, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 69d0691148..0cded243d5 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1294,6 +1294,7 @@ typedef struct ivas_hrtfs_crend_structure HRTFS_DATA *hHRTF_hrir_hoa2; HRTFS_DATA *hHRTF_hrir_foa; HRTFS_DATA *hHRTF_brir_combined; + float *lr_energy_and_iac[3]; } HRTFS_CREND, *HRTFS_CREND_HANDLE; @@ -1332,6 +1333,7 @@ typedef struct ivas_hrtfs_fastconv_struct int16_t allocate_init_flag; /*Memory allocation flag 0: if the hrtf pointers are allocated at application level , 1: of allocated at ivas_binaural_hrtf_open() */ + float *lr_energy_and_iac[3]; float fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX]; float fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; @@ -1342,6 +1344,7 @@ typedef struct ivas_hrtfs_parambin_struct float hrtfShCoeffsRe[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; float hrtfShCoeffsIm[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; + float *lr_energy_and_iac[3]; float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX]; float parametricReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; float parametricEarlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index ad769a5a1d..4637531752 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -277,6 +277,7 @@ struct IVAS_REND int16_t num_subframes; #ifdef NONBE_FIX_BINARY_BINAURAL_READING hrtf_handles hHrtfs; + float *lr_energy_and_iac[3]; #else IVAS_DEC_HRTF_CREND_HANDLE hSetOfHRTF; IVAS_DEC_HRTF_FASTCONV_HANDLE hHrtfFastConv; -- GitLab From 30c67d12dffee98f8e27a8b51803d7c803370f65 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Fri, 1 Dec 2023 10:10:03 +0100 Subject: [PATCH 02/52] Compiler switch for #922 added --- lib_com/options.h | 3 ++- lib_rend/ivas_crend.c | 4 ++++ lib_rend/ivas_stat_rend.h | 6 ++++++ lib_rend/lib_rend.c | 2 ++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 15dca2e06a..1d40b4774f 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -186,7 +186,8 @@ #define NONBE_FIX_862_UBSAN_SPAR_DEC_BR_SW_PLC /* DLB: issue 862 : UBSAN: out-of-bound error in SPAR for OSBA bitrate switching with PLC*/ #define NONBE_FIX_DISCRETE_ISM_NOISE_SEED_HANDLING /* FhG: fix handling of common and differing noise seeds in SCEs for ISM DTX */ #define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA/Nok: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ -#define NONBE_FIX_855_JBM_FLUSH_OFFSET /* FhG: issue #855: add missing switch here for the code in JBM flushing */ +#define NONBE_FIX_855_JBM_FLUSH_OFFSET /* FhG: issue #855: add missing switch here for the code in JBM flushing */ +#define NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /* Philips: Use pre-computed HRTF average L/R energies and IAC in all renderers */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index d63b04a205..e005d49614 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -1611,7 +1611,11 @@ ivas_error ivas_rend_openCrend( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, hSetOfHRTF->lr_energy_and_iac, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) +#else + if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, NULL, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) +#endif { return error; } diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 26ba18afac..932b3d2abf 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1294,7 +1294,9 @@ typedef struct ivas_hrtfs_crend_structure HRTFS_DATA *hHRTF_hrir_hoa2; HRTFS_DATA *hHRTF_hrir_foa; HRTFS_DATA *hHRTF_brir_combined; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES float *lr_energy_and_iac[3]; +#endif } HRTFS_CREND, *HRTFS_CREND_HANDLE; @@ -1333,7 +1335,9 @@ typedef struct ivas_hrtfs_fastconv_struct int16_t allocate_init_flag; /*Memory allocation flag 0: if the hrtf pointers are allocated at application level , 1: of allocated at ivas_binaural_hrtf_open() */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES float *lr_energy_and_iac[3]; +#endif float fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX]; float fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; @@ -1344,7 +1348,9 @@ typedef struct ivas_hrtfs_parambin_struct float hrtfShCoeffsRe[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; float hrtfShCoeffsIm[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES float *lr_energy_and_iac[3]; +#endif float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX]; float parametricReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; float parametricEarlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index eeb3261deb..6ba9c707af 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -277,7 +277,9 @@ struct IVAS_REND int16_t num_subframes; #ifdef NONBE_FIX_BINARY_BINAURAL_READING hrtf_handles hHrtfs; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES float *lr_energy_and_iac[3]; +#endif #else IVAS_DEC_HRTF_CREND_HANDLE hSetOfHRTF; IVAS_DEC_HRTF_FASTCONV_HANDLE hHrtfFastConv; -- GitLab From c66231ed7d4b10d72bd918250051b25736fbcf05 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Mon, 4 Dec 2023 11:18:14 +0100 Subject: [PATCH 03/52] Reverb: average HRTF energies and inter-aural coherence always read from ROM or custom HRTF file [prototype] --- apps/decoder.c | 12 ++ apps/renderer.c | 12 ++ lib_com/common_api_types.h | 3 + lib_dec/ivas_init_dec.c | 9 ++ lib_dec/ivas_ism_dec.c | 8 ++ lib_dec/ivas_mct_dec.c | 4 + lib_dec/ivas_stat_dec.h | 4 + lib_dec/lib_dec.c | 23 ++++ lib_dec/lib_dec.h | 6 + lib_rend/ivas_crend.c | 5 +- lib_rend/ivas_objectRenderer_mix.c | 3 + lib_rend/ivas_prot_rend.h | 7 + lib_rend/ivas_reverb.c | 23 ++++ lib_rend/ivas_stat_rend.h | 23 ++-- lib_rend/lib_rend.c | 83 +++++++++++- lib_rend/lib_rend.h | 14 +- lib_util/hrtf_file_reader.c | 200 +++++++++++++++++++++++------ lib_util/hrtf_file_reader.h | 5 + 18 files changed, 387 insertions(+), 57 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index df501db3ed..910e57dd3b 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -209,6 +209,9 @@ int main( #ifdef NONBE_FIX_BINARY_BINAURAL_READING IVAS_DEC_HRTF_HANDLE *hHrtfTD = NULL; IVAS_DEC_HRTF_CREND_HANDLE *hSetOfHRTF = NULL; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStat = NULL; +#endif #endif #ifdef DEBUGGING int32_t noClipping; @@ -787,7 +790,16 @@ int main( #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfStat ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_GetHrtfHandle failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfStat, arg.output_Fs, hrtfReader ) ) != IVAS_ERR_OK ) +#else if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfReader ) ) != IVAS_ERR_OK ) +#endif { if ( error != IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA ) { diff --git a/apps/renderer.c b/apps/renderer.c index a57d7919b5..6298764cfd 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -765,6 +765,9 @@ int main( IVAS_DEC_HRTF_FASTCONV_HANDLE *hHrtfFastConv = NULL; IVAS_DEC_HRTF_PARAMBIN_HANDLE *hHrtfParambin = NULL; IVAS_DEC_HRTF_HANDLE *hHrtfTD = NULL; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStat = NULL; +#endif #endif IsmPositionProvider *positionProvider; LfeRoutingConfig *lfeRoutingConfigs[RENDERER_MAX_MC_INPUTS]; @@ -1087,7 +1090,16 @@ int main( } #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = IVAS_REND_GetHrtfStatisticsHandle( hIvasRend, &hHrtfStat ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_REND_GetHrtfStatisticsHandle failed\n\n" ); + goto cleanup; + } + if ( ( hHrtfStat != NULL ) && ( error = load_reverb_binary( *hHrtfStat, args.sampleRate, hrtfFileReader ) ) != IVAS_ERR_OK ) +#else if ( ( hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfFileReader ) ) != IVAS_ERR_OK ) +#endif { if ( error != IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA ) { diff --git a/lib_com/common_api_types.h b/lib_com/common_api_types.h index 4f1a452c61..f714c192f3 100644 --- a/lib_com/common_api_types.h +++ b/lib_com/common_api_types.h @@ -165,6 +165,9 @@ typedef struct TDREND_HRFILT_FiltSet_struct *IVAS_DEC_HRTF_HANDLE; typedef struct ivas_hrtfs_crend_structure *IVAS_DEC_HRTF_CREND_HANDLE; typedef struct ivas_hrtfs_fastconv_struct *IVAS_DEC_HRTF_FASTCONV_HANDLE; typedef struct ivas_hrtfs_parambin_struct *IVAS_DEC_HRTF_PARAMBIN_HANDLE; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +typedef struct ivas_hrtfs_statistics_struct *IVAS_DEC_HRTF_STATISTICS_HANDLE; +#endif typedef struct cldfb_filter_bank_struct *IVAS_CLDFB_FILTER_BANK_HANDLE; typedef struct ivas_LS_setup_custom *IVAS_LSSETUP_CUSTOM_HANDLE; diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 541fc0d7d9..16496ec12e 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2022,7 +2022,11 @@ ivas_error ivas_init_decoder( if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hHrtfStatistics, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hDecoderConfig->output_config, NULL, st_ivas->hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -2070,9 +2074,14 @@ ivas_error ivas_init_decoder( #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, + st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#endif #endif { return error; diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index 7d22eb50ba..e56db261d9 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -204,7 +204,11 @@ static ivas_error ivas_ism_bitrate_switching_dec( } if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hHrtfStatistics, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hDecoderConfig->output_config, NULL, st_ivas->hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -234,8 +238,12 @@ static ivas_error ivas_ism_bitrate_switching_dec( /* Open Crend Binaural renderer */ #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#endif #endif { return error; diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 167d8b6727..3e370f8331 100755 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -1281,8 +1281,12 @@ static ivas_error ivas_mc_dec_reconfig( { #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#endif #endif { return error; diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 06cc564bf8..0ee30b49ed 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1120,7 +1120,11 @@ typedef struct Decoder_Struct HRTFS_CREND_HANDLE hSetOfHRTF; /* Set of HRTFs handle (CRend) */ HRTFS_FASTCONV_HANDLE hHrtfFastConv; /* FASTCONV HRTF tables for binaural rendering */ HRTFS_PARAMBIN_HANDLE hHrtfParambin; /* HRTF tables for parametric binauralizer */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + HRTFS_STATISTICS_HANDLE hHrtfStatistics; /* HRTF statistics handle */ +#else float *lr_energy_and_iac[3]; +#endif LSSETUP_CUSTOM_HANDLE hLsSetupCustom; /* Custom LS configuration handle */ float *hoa_dec_mtx; /* Pointer to decoder matrix for SBA */ HEAD_TRACK_DATA_HANDLE hHeadTrackData; /* Head tracking data structure */ diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index b3f0c521ca..1e4aeeb7cd 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -2181,6 +2181,29 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle( return IVAS_ERR_OK; } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +/*---------------------------------------------------------------------* + * IVAS_DEC_GetHrtfStatisticsHandle( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_DEC_GetHrtfStatisticsHandle( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStat /* o : Parametric binauralizer HRTF handle */ +) +{ + if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHrtfStatistics == NULL ) + { + return IVAS_ERR_WRONG_PARAMS; + } + + *hHrtfStat = &hIvasDec->st_ivas->hHrtfStatistics; + + return IVAS_ERR_OK; +} +#endif + /*---------------------------------------------------------------------* * copyRendererConfigStruct( ) * diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index 83230e81b5..a2eb531cd9 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -457,6 +457,12 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle( #endif ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +ivas_error IVAS_DEC_GetHrtfStatisticsHandle( + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStat /* o : HRTF statistics handle */ +); +#endif /*! r: error code*/ ivas_error IVAS_DEC_GetRenderConfig( diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index e005d49614..b0f37572cb 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -1394,6 +1394,9 @@ ivas_error ivas_rend_openCrend( const AUDIO_CONFIG outConfig, RENDER_CONFIG_DATA *hRendCfg, HRTFS_CREND_HANDLE hSetOfHRTF, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + HRTFS_STATISTICS_HANDLE hHrtfStat, +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT const int32_t output_Fs, const int16_t num_poses @@ -1612,7 +1615,7 @@ ivas_error ivas_rend_openCrend( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, hSetOfHRTF->lr_energy_and_iac, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), hHrtfStat, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, NULL, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) #endif diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index f1aa523935..14a5c05909 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -403,6 +403,8 @@ static ivas_error DefaultBSplineModel( model = &( HrFiltSet_p->ModelParams ); modelITD = &( HrFiltSet_p->ModelParamsITD ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#else switch ( output_Fs ) { case 48000: @@ -421,6 +423,7 @@ static ivas_error DefaultBSplineModel( HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz; break; } +#endif /* Set ROM flag for correct deallocation */ model->modelROM = TRUE; diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 0bd5a09f5c..f1dfa79dec 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -903,6 +903,9 @@ ivas_error ivas_rend_openCrend( const AUDIO_CONFIG outConfig, RENDER_CONFIG_DATA *hRendCfg, HRTFS_CREND_HANDLE hSetOfHRTF, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + HRTFS_STATISTICS_HANDLE hHrtfStat, +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT const int32_t output_Fs, const int16_t num_poses @@ -1012,9 +1015,13 @@ void ivas_binaural_reverb_processSubframe( ivas_error ivas_reverb_open( REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const HRTFS_STATISTICS_HANDLE hHrtfStat, /* i : HRTF statistics handle */ +#else const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */ +#endif RENDER_CONFIG_DATA *pConfig, /* i : Reverb configuration */ const int32_t output_Fs /* i : output sampling rate */ ); diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 537ecde2c2..0bfdd638f1 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -939,15 +939,26 @@ static void set_fft_and_datablock_sizes( static void set_reverb_acoustic_data( ivas_reverb_params_t *pParams, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#else const AUDIO_CONFIG input_audio_config, const HRTFS_HANDLE hHrtf, +#endif IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pRoomAcoustics, +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES const int16_t subframe_len, +#endif const int16_t nr_fc_input, const int16_t nr_fc_fft_filter ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + int16_t bin_idx; +#else int16_t nr_out_ch, hrtf_idx, offset, iter_idx, bin_idx; +#endif float ln_1e6_inverted, delay_diff, exp_argument; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#else float *pHrtf_set_l_re[MAX_INTERN_CHANNELS]; float *pHrtf_set_l_im[MAX_INTERN_CHANNELS]; float *pHrtf_set_r_re[MAX_INTERN_CHANNELS]; @@ -990,6 +1001,7 @@ static void set_reverb_acoustic_data( pParams->pHrtf_inter_aural_coherence_const = (const float *) pParams->pHrtf_inter_aural_coherence; } +#endif /* interpolate input table data for T60 and DSR to the FFT filter grid */ ivas_reverb_interpolate_acoustic_data( nr_fc_input, pRoomAcoustics->pFc_input, pRoomAcoustics->pAcoustic_rt60, pRoomAcoustics->pAcoustic_dsr, nr_fc_fft_filter, pParams->pFc, pParams->pRt60, pParams->pDsr ); @@ -1084,9 +1096,13 @@ static ivas_error setup_FDN_branches( ivas_error ivas_reverb_open( REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const HRTFS_STATISTICS_HANDLE hHrtfStat, /* i : HRTF statistics handle */ +#else const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */ +#endif RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ const int32_t output_Fs /* i : output sampling rate */ ) @@ -1160,6 +1176,12 @@ ivas_error ivas_reverb_open( params.pFc[bin_idx] = freq_step * bin_idx; } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + set_reverb_acoustic_data( ¶ms, &hRenderConfig->roomAcoustics, nr_fc_input, nr_fc_fft_filter ); + params.pHrtf_avg_pwr_response_l_const = hHrtfStat->average_energy_l; + params.pHrtf_avg_pwr_response_r_const = hHrtfStat->average_energy_r; + params.pHrtf_inter_aural_coherence_const = hHrtfStat->inter_aural_coherence; +#else if ( hHrtf == NULL && lr_energy_and_iac != NULL ) { params.pHrtf_avg_pwr_response_l_const = lr_energy_and_iac[0]; @@ -1168,6 +1190,7 @@ ivas_error ivas_reverb_open( } /* set up reverb acoustic data on the basis of HRTF data and renderer config */ set_reverb_acoustic_data( ¶ms, input_audio_config, hHrtf, &hRenderConfig->roomAcoustics, subframe_len, nr_fc_input, nr_fc_fft_filter ); +#endif /* set reverb acoustic configuration based on renderer config */ #ifdef DEBUGGING diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 932b3d2abf..aa9ef49a71 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1067,8 +1067,11 @@ typedef struct TDREND_HRFILT_FiltSet_struct ModelParamsITD_t ModelParamsITD; TDREND_HRFILT_Method_t FilterMethod; /* HR filtering method */ float latency_s; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#else const float *lr_energy_and_iac[3]; /* left/right energy and interaural coherence for late reverb */ float *lr_energy_and_iac_dyn[3]; +#endif } TDREND_HRFILT_FiltSet_t; @@ -1294,9 +1297,6 @@ typedef struct ivas_hrtfs_crend_structure HRTFS_DATA *hHRTF_hrir_hoa2; HRTFS_DATA *hHRTF_hrir_foa; HRTFS_DATA *hHRTF_brir_combined; -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - float *lr_energy_and_iac[3]; -#endif } HRTFS_CREND, *HRTFS_CREND_HANDLE; @@ -1335,9 +1335,6 @@ typedef struct ivas_hrtfs_fastconv_struct int16_t allocate_init_flag; /*Memory allocation flag 0: if the hrtf pointers are allocated at application level , 1: of allocated at ivas_binaural_hrtf_open() */ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - float *lr_energy_and_iac[3]; -#endif float fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX]; float fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; @@ -1348,9 +1345,6 @@ typedef struct ivas_hrtfs_parambin_struct float hrtfShCoeffsRe[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; float hrtfShCoeffsIm[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - float *lr_energy_and_iac[3]; -#endif float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX]; float parametricReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; float parametricEarlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; @@ -1361,6 +1355,17 @@ typedef struct ivas_hrtfs_parambin_struct } HRTFS_PARAMBIN, *HRTFS_PARAMBIN_HANDLE; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +typedef struct ivas_hrtfs_statistics_struct +{ + const float *average_energy_l; + const float *average_energy_r; + const float *inter_aural_coherence; + float *average_energy_l_dyn; + float *average_energy_r_dyn; + float *inter_aural_coherence_dyn; +} HRTFS_STATISTICS, *HRTFS_STATISTICS_HANDLE; +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT /*----------------------------------------------------------------------------------* diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 6ba9c707af..ef0aa17ec4 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -234,6 +234,9 @@ typedef struct hrtf_handles IVAS_DEC_HRTF_FASTCONV_HANDLE hHrtfFastConv; IVAS_DEC_HRTF_PARAMBIN_HANDLE hHrtfParambin; IVAS_DEC_HRTF_HANDLE hHrtfTD; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStatistics; +#endif } hrtf_handles; #endif @@ -1440,7 +1443,11 @@ static ivas_error setRendInputActiveIsm( { #ifndef SPLIT_REND_WITH_HEAD_ROT #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hrtfs->hSetOfHRTF, hrtfs->hHrtfStatistics, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hrtfs->hSetOfHRTF, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) +#endif #else if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #endif @@ -1483,7 +1490,11 @@ static ivas_error setRendInputActiveIsm( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), hrtfs->hHrtfStatistics, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, NULL, inputIsm->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -1496,7 +1507,11 @@ static ivas_error setRendInputActiveIsm( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, hHrtfStat, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, NULL, inputIsm->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -2201,6 +2216,9 @@ static ivas_error initMcBinauralRendering( RENDER_CONFIG_DATA *hRendCfg, #ifdef NONBE_FIX_BINARY_BINAURAL_READING IVAS_DEC_HRTF_CREND_HANDLE hMixconv, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + HRTFS_STATISTICS_HANDLE hHrtfStat, +#endif #endif uint8_t reconfigureFlag ) { @@ -2304,7 +2322,11 @@ static ivas_error initMcBinauralRendering( #endif if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && inputMc->hReverb == NULL ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_reverb_open( &( inputMc->hReverb ), hHrtfStat, hRendCfg, outSampleRate ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_reverb_open( &( inputMc->hReverb ), outConfig, NULL, inputMc->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, outSampleRate ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -2322,12 +2344,14 @@ static ivas_error initMcBinauralRendering( #else if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, NULL, outSampleRate, ( ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) || ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ) ? inputMc->base.ctx.pSplitRendWrapper->multiBinPoseData.num_poses : 1 ) ) != IVAS_ERR_OK ) - #endif #else #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv, hHrtfStat, outSampleRate ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv, outSampleRate ) ) != IVAS_ERR_OK ) - +#endif #else if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, NULL, outSampleRate ) ) != IVAS_ERR_OK ) @@ -2545,7 +2569,11 @@ static ivas_error setRendInputActiveMc( #endif { #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = initMcBinauralRendering( inputMc, inConfig, outConfig, hRendCfg, hrtfs->hSetOfHRTF, hrtfs->hHrtfStatistics, FALSE ) ) != IVAS_ERR_OK ) +#else if ( ( error = initMcBinauralRendering( inputMc, inConfig, outConfig, hRendCfg, hrtfs->hSetOfHRTF, FALSE ) ) != IVAS_ERR_OK ) +#endif #else if ( ( error = initMcBinauralRendering( inputMc, inConfig, outConfig, hRendCfg, FALSE ) ) != IVAS_ERR_OK ) #endif @@ -2751,6 +2779,10 @@ static ivas_error updateSbaPanGains( #ifdef NONBE_FIX_BINARY_BINAURAL_READING RENDER_CONFIG_DATA *hRendCfg, IVAS_DEC_HRTF_CREND_HANDLE hMixconv +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + , + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStat +#endif #else RENDER_CONFIG_DATA *hRendCfg #endif @@ -2816,9 +2848,13 @@ static ivas_error updateSbaPanGains( #ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, hHrtfStat, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #endif +#endif #else #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) @@ -2841,9 +2877,13 @@ static ivas_error updateSbaPanGains( #ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, hHrtfStat, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #endif +#endif #else #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) @@ -3007,7 +3047,11 @@ static ivas_error setRendInputActiveSba( } #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = updateSbaPanGains( inputSba, outConfig, hRendCfg, hrtfs->hSetOfHRTF, hrtfs->hHrtfStatistics ) ) != IVAS_ERR_OK ) +#else if ( ( error = updateSbaPanGains( inputSba, outConfig, hRendCfg, hrtfs->hSetOfHRTF ) ) != IVAS_ERR_OK ) +#endif #else if ( ( error = updateSbaPanGains( inputSba, outConfig, hRendCfg ) ) != IVAS_ERR_OK ) #endif @@ -3574,7 +3618,11 @@ ivas_error IVAS_REND_ConfigureCustomOutputLoudspeakerLayout( } #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = updateSbaPanGains( inputSba, hIvasRend->outputConfig, hIvasRend->hRendererConfig, NULL, NULL ) ) != IVAS_ERR_OK ) +#else if ( ( error = updateSbaPanGains( inputSba, hIvasRend->outputConfig, hIvasRend->hRendererConfig, NULL ) ) != IVAS_ERR_OK ) +#endif #else if ( ( error = updateSbaPanGains( inputSba, hIvasRend->outputConfig, hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK ) #endif @@ -4054,6 +4102,9 @@ ivas_error IVAS_REND_ConfigureCustomInputLoudspeakerLayout( hIvasRend->hRendererConfig, #ifdef NONBE_FIX_BINARY_BINAURAL_READING hIvasRend->hHrtfs.hSetOfHRTF, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + hIvasRend->hHrtfs.hHrtfStatistics, +#endif #endif FALSE ) ) != IVAS_ERR_OK ) { @@ -4900,6 +4951,9 @@ ivas_error IVAS_REND_SetHeadRotation( hIvasRend->hRendererConfig, #ifdef NONBE_FIX_BINARY_BINAURAL_READING hIvasRend->hHrtfs.hSetOfHRTF, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + hIvasRend->hHrtfs.hHrtfStatistics, +#endif #endif TRUE ) ) != IVAS_ERR_OK ) { @@ -4967,6 +5021,9 @@ ivas_error IVAS_REND_DisableHeadRotation( hIvasRend->hRendererConfig, #ifdef NONBE_FIX_BINARY_BINAURAL_READING hIvasRend->hHrtfs.hSetOfHRTF, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + hIvasRend->hHrtfs.hHrtfStatistics, +#endif #endif TRUE ) ) != IVAS_ERR_OK ) { @@ -8895,6 +8952,28 @@ ivas_error IVAS_REND_GetHrtfParamBinHandle( } #endif +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +/*---------------------------------------------------------------------* + * IVAS_REND_GetHrtfStatisticsHandle( ) + * + * + *---------------------------------------------------------------------*/ + +ivas_error IVAS_REND_GetHrtfStatisticsHandle( + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStat /* o : HRTF statistics handle */ +) +{ + if ( hIvasRend == NULL || hIvasRend->hHrtfs.hHrtfStatistics == NULL ) + { + return IVAS_ERR_WRONG_PARAMS; + } + + *hHrtfStat = &hIvasRend->hHrtfs.hHrtfStatistics; + + return IVAS_ERR_OK; +} +#endif static ivas_error ivas_masa_ext_rend_dirac_rend_init( input_masa *inputMasa ) diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index 5e30b70dab..415a8cd4c9 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -203,25 +203,31 @@ ivas_error IVAS_REND_GetDelay( #ifdef NONBE_FIX_BINARY_BINAURAL_READING /*! r: error code */ ivas_error IVAS_REND_GetHrtfHandle( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS render handle */ IVAS_DEC_HRTF_HANDLE **hHrtfTD /* o : HRTF handle */ ); /*! r: error code */ ivas_error IVAS_REND_GetHrtfCRendHandle( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ IVAS_DEC_HRTF_CREND_HANDLE **hSetOfHRTF /* o : Set of HRTF handle */ ); ivas_error IVAS_REND_GetHrtfFastConvHandle( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ IVAS_DEC_HRTF_FASTCONV_HANDLE **hHrtfFastConv /* o : FASTCONV HRTF handle */ ); ivas_error IVAS_REND_GetHrtfParamBinHandle( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ IVAS_DEC_HRTF_PARAMBIN_HANDLE **hHrtfParambin /* o : Parametric binauralizer HRTF handle */ ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +ivas_error IVAS_REND_GetHrtfStatisticsHandle( + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStat /* o : HRTF statistics handle */ +); +#endif #endif /* Functions to be called during rendering */ diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 6b284bf356..4d4c832c6a 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -470,88 +470,162 @@ static ivas_error LoadBSplineBinary( --------------------------------------------------------------------*/ static ivas_error set_default_reverb_iac_energy( +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + HRTFS_STATISTICS_HANDLE hHrtfStat, + int32_t sampleRate, + int16_t modelROM +#else IVAS_DEC_HRTF_HANDLE HrFiltSet_p /* i/o: HR filter model parameter structure */ +#endif ) { ivas_error error = IVAS_ERR_OK; +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES int16_t i; +#endif #ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB int16_t lr_iac_len; #endif +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( hHrtfStat == NULL ) +#else if ( HrFiltSet_p == NULL ) +#endif { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } #ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB lr_iac_len = LR_IAC_LENGTH_NR_FC; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( sampleRate == 16000 ) +#else if ( HrFiltSet_p->SampleRate == 16000 ) +#endif { lr_iac_len = LR_IAC_LENGTH_NR_FC_16KHZ; } #endif - if ( HrFiltSet_p->ModelParams.modelROM == 0 ) - { - for ( i = 0; i < 3; i++ ) - { -#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB - HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( lr_iac_len * sizeof( float ) ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( modelROM == 0 ) #else - HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) ); -#endif -#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES - if ( HrFiltSet_p->lr_energy_and_iac_dyn[i] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); - } #endif + { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + /* TODO: check for sample rate dependency if no three sets of data need to be handled in parallel */ + hHrtfStat->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStat->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStat->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + + if ( hHrtfStat->average_energy_l_dyn == NULL || hHrtfStat->average_energy_r_dyn == NULL || hHrtfStat->inter_aural_coherence_dyn == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for HRTF statistics data" ); } - switch ( HrFiltSet_p->SampleRate ) + + switch ( sampleRate ) { case 48000: - mvr2r( defaultHRIR_left_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_right_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_coherence_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_left_avg_power_48kHz, hHrtfStat->average_energy_l_dyn, lr_iac_len ); + mvr2r( defaultHRIR_right_avg_power_48kHz, hHrtfStat->average_energy_r_dyn, lr_iac_len ); + mvr2r( defaultHRIR_coherence_48kHz, hHrtfStat->inter_aural_coherence_dyn, lr_iac_len ); break; case 32000: - mvr2r( defaultHRIR_left_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_right_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_coherence_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_left_avg_power_32kHz, hHrtfStat->average_energy_l_dyn, lr_iac_len ); + mvr2r( defaultHRIR_right_avg_power_32kHz, hHrtfStat->average_energy_r_dyn, lr_iac_len ); + mvr2r( defaultHRIR_coherence_32kHz, hHrtfStat->inter_aural_coherence_dyn, lr_iac_len ); break; case 16000: -#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB - mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], lr_iac_len ); - mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], lr_iac_len ); - mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], lr_iac_len ); -#else - mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); -#endif + mvr2r( defaultHRIR_left_avg_power_16kHz, hHrtfStat->average_energy_l_dyn, lr_iac_len ); + mvr2r( defaultHRIR_right_avg_power_16kHz, hHrtfStat->average_energy_r_dyn, lr_iac_len ); + mvr2r( defaultHRIR_coherence_16kHz, hHrtfStat->inter_aural_coherence_dyn, lr_iac_len ); break; } } else { - switch ( HrFiltSet_p->SampleRate ) + switch ( sampleRate ) { case 48000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_48kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_48kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_48kHz; + hHrtfStat->average_energy_l = defaultHRIR_left_avg_power_48kHz; + hHrtfStat->average_energy_r = defaultHRIR_right_avg_power_48kHz; + hHrtfStat->inter_aural_coherence = defaultHRIR_coherence_48kHz; break; case 32000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_32kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_32kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_32kHz; + hHrtfStat->average_energy_l = defaultHRIR_left_avg_power_32kHz; + hHrtfStat->average_energy_r = defaultHRIR_right_avg_power_32kHz; + hHrtfStat->inter_aural_coherence = defaultHRIR_coherence_32kHz; break; case 16000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_16kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_16kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz; + hHrtfStat->average_energy_l = defaultHRIR_left_avg_power_16kHz; + hHrtfStat->average_energy_r = defaultHRIR_right_avg_power_16kHz; + hHrtfStat->inter_aural_coherence = defaultHRIR_coherence_16kHz; break; } } +#else + if ( HrFiltSet_p->ModelParams.modelROM == 0 ) + { + for ( i = 0; i < 3; i++ ) + { +#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB + HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( lr_iac_len * sizeof( float ) ); +#else + HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) ); +#endif +#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES + if ( HrFiltSet_p->lr_energy_and_iac_dyn[i] == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); + } +#endif + } + switch ( HrFiltSet_p->SampleRate ) + { + case 48000: + mvr2r( defaultHRIR_left_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_right_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_coherence_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); + break; + case 32000: + mvr2r( defaultHRIR_left_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_right_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_coherence_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); + break; + case 16000: +#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB + mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], lr_iac_len ); + mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], lr_iac_len ); + mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], lr_iac_len ); +#else + mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); +#endif + break; + } + } + else + { + switch ( HrFiltSet_p->SampleRate ) + { + case 48000: + HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_48kHz; + HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_48kHz; + HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_48kHz; + break; + case 32000: + HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_32kHz; + HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_32kHz; + HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_32kHz; + break; + case 16000: + HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_16kHz; + HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_16kHz; + HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz; + break; + } + } +#endif return error; } @@ -565,11 +639,18 @@ static ivas_error set_default_reverb_iac_energy( --------------------------------------------------------------------*/ static ivas_error load_reverb_from_binary( +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStat, /* i/o: HRTF statistics handle */ + int32_t sampleRate, /* i : sample rate */ +#else IVAS_DEC_HRTF_HANDLE HrFiltSet_p, /* i/o: HR filter model parameter structure */ - FILE *f_hrtf /* i : HR filter data file handle */ +#endif + FILE *f_hrtf /* i : HR filter data file handle */ ) { +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES int16_t i; +#endif ivas_error error; bool is_reverb; ivas_error header_check_result; @@ -581,13 +662,21 @@ static ivas_error load_reverb_from_binary( #ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB int16_t lr_iac_len; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( hHrtfStat == NULL ) +#else if ( HrFiltSet_p == NULL ) +#endif { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } lr_iac_len = LR_IAC_LENGTH_NR_FC; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( sampleRate == 16000 ) +#else if ( HrFiltSet_p->SampleRate == 16000 ) +#endif { lr_iac_len = LR_IAC_LENGTH_NR_FC_16KHZ; } @@ -643,6 +732,22 @@ static ivas_error load_reverb_from_binary( if ( is_reverb ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + hHrtfStat->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStat->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStat->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + + if ( hHrtfStat->average_energy_l_dyn == NULL || hHrtfStat->average_energy_r_dyn == NULL || hHrtfStat->inter_aural_coherence_dyn == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); + } + fread( hHrtfStat->average_energy_l_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + fread( hHrtfStat->average_energy_r_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + fread( hHrtfStat->inter_aural_coherence_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + hHrtfStat->average_energy_l = (const float *) hHrtfStat->average_energy_l_dyn; + hHrtfStat->average_energy_r = (const float *) hHrtfStat->average_energy_r_dyn; + hHrtfStat->inter_aural_coherence = (const float *) hHrtfStat->inter_aural_coherence_dyn; +#else /* left/right energy and interaural coherence for late reverb */ for ( i = 0; i < 3; i++ ) { @@ -668,10 +773,16 @@ static ivas_error load_reverb_from_binary( HrFiltSet_p->lr_energy_and_iac[i] = (const float *) HrFiltSet_p->lr_energy_and_iac_dyn[i]; #endif } +#endif } else { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + /* TODO: Check for the modelROM correctness */ + set_default_reverb_iac_energy( hHrtfStat, sampleRate, TRUE ); +#else set_default_reverb_iac_energy( HrFiltSet_p ); +#endif #ifdef NONBE_FIX_BINARY_BINAURAL_READING return IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA; #else @@ -690,13 +801,18 @@ static ivas_error load_reverb_from_binary( *---------------------------------------------------------------------*/ ivas_error load_reverb_binary( +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStat, /* i/o: HRTF staistics handle */ + int_fast32_t sampleRate, +#else IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ +#endif const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */ ) { fseek( hrtfReader->file, 0, SEEK_SET ); - return load_reverb_from_binary( hHrtf, hrtfReader->file ); + return load_reverb_from_binary( hHrtfStat, sampleRate, hrtfReader->file ); } #endif @@ -968,10 +1084,12 @@ ivas_error destroy_td_hrtf( free( ( *hHrtf )->ModelEval.hrfModL ); free( ( *hHrtf )->ModelEval.hrfModR ); +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES for ( i = 0; i < 3; i++ ) { free( ( *hHrtf )->lr_energy_and_iac_dyn[i] ); } +#endif } ivas_HRTF_binary_close( hHrtf ); diff --git a/lib_util/hrtf_file_reader.h b/lib_util/hrtf_file_reader.h index 2d3b8e820b..de70d9882b 100644 --- a/lib_util/hrtf_file_reader.h +++ b/lib_util/hrtf_file_reader.h @@ -102,7 +102,12 @@ ivas_error load_HRTF_binary( *---------------------------------------------------------------------*/ ivas_error load_reverb_binary( +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStat, /* i/o: HRTF statistics handle */ + int32_t sampleRate, /* i : sample rate */ +#else IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ +#endif const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */ ); #endif -- GitLab From e6e02be0498e780767cbbf70d032aaef243985a7 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac <31622564+sbsarac@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:35:48 +0100 Subject: [PATCH 04/52] Rename statistics and add ivas_HRTF_statistics_binary_open to decoder --- apps/decoder.c | 6 +-- apps/renderer.c | 6 +-- lib_dec/ivas_init_dec.c | 7 +++ lib_dec/lib_dec.c | 6 +-- lib_dec/lib_dec.h | 2 +- lib_rend/ivas_crend.c | 4 +- lib_rend/ivas_hrtf.c | 43 +++++++++++++++ lib_rend/ivas_objectRenderer_mix.c | 1 + lib_rend/ivas_prot_rend.h | 4 +- lib_rend/ivas_reverb.c | 15 +++--- lib_rend/lib_rend.c | 32 ++++++++---- lib_rend/lib_rend.h | 2 +- lib_util/hrtf_file_reader.c | 84 +++++++++++++++--------------- lib_util/hrtf_file_reader.h | 6 +-- 14 files changed, 142 insertions(+), 76 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 8b52d6983f..8126fe83c9 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -210,7 +210,7 @@ int main( IVAS_DEC_HRTF_HANDLE *hHrtfTD = NULL; IVAS_DEC_HRTF_CREND_HANDLE *hSetOfHRTF = NULL; #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStat = NULL; + IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStatistics = NULL; #endif #endif #ifdef DEBUGGING @@ -809,12 +809,12 @@ int main( #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES #ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfStat ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfStatistics ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_GetHrtfHandle failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } - if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfStat, arg.output_Fs, hrtfReader ) ) != IVAS_ERR_OK ) + if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfStatistics, arg.output_Fs, hrtfReader ) ) != IVAS_ERR_OK ) #else if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfReader ) ) != IVAS_ERR_OK ) #endif diff --git a/apps/renderer.c b/apps/renderer.c index 2a072d0b1e..b178bcc827 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -766,7 +766,7 @@ int main( IVAS_DEC_HRTF_PARAMBIN_HANDLE *hHrtfParambin = NULL; IVAS_DEC_HRTF_HANDLE *hHrtfTD = NULL; #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStat = NULL; + IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStatistics = NULL; #endif #endif IsmPositionProvider *positionProvider; @@ -1113,12 +1113,12 @@ int main( #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = IVAS_REND_GetHrtfStatisticsHandle( hIvasRend, &hHrtfStat ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_REND_GetHrtfStatisticsHandle( hIvasRend, &hHrtfStatistics ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_REND_GetHrtfStatisticsHandle failed\n\n" ); goto cleanup; } - if ( ( hHrtfStat != NULL ) && ( error = load_reverb_binary( *hHrtfStat, args.sampleRate, hrtfFileReader ) ) != IVAS_ERR_OK ) + if ( ( hHrtfStatistics != NULL ) && ( error = load_reverb_binary( *hHrtfStatistics, args.sampleRate, hrtfFileReader ) ) != IVAS_ERR_OK ) #else if ( ( hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfFileReader ) ) != IVAS_ERR_OK ) #endif diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 16496ec12e..ef33c73b6f 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1103,6 +1103,13 @@ ivas_error ivas_init_decoder_front( { return error; } + +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_HRTF_statistics_binary_open( &st_ivas->hHrtfStatistics ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif } /*-------------------------------------------------------------------* diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 1e4aeeb7cd..708b22da3c 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -2189,8 +2189,8 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle( *---------------------------------------------------------------------*/ ivas_error IVAS_DEC_GetHrtfStatisticsHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStat /* o : Parametric binauralizer HRTF handle */ + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : Parametric binauralizer HRTF handle */ ) { if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHrtfStatistics == NULL ) @@ -2198,7 +2198,7 @@ ivas_error IVAS_DEC_GetHrtfStatisticsHandle( return IVAS_ERR_WRONG_PARAMS; } - *hHrtfStat = &hIvasDec->st_ivas->hHrtfStatistics; + *hHrtfStatistics = &hIvasDec->st_ivas->hHrtfStatistics; return IVAS_ERR_OK; } diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index a2eb531cd9..ddd5b10ee1 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -460,7 +460,7 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error IVAS_DEC_GetHrtfStatisticsHandle( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStat /* o : HRTF statistics handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : HRTF statistics handle */ ); #endif diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index b0f37572cb..98e213f884 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -1395,7 +1395,7 @@ ivas_error ivas_rend_openCrend( RENDER_CONFIG_DATA *hRendCfg, HRTFS_CREND_HANDLE hSetOfHRTF, #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - HRTFS_STATISTICS_HANDLE hHrtfStat, + HRTFS_STATISTICS_HANDLE hHrtfStatistics, #endif #ifdef SPLIT_REND_WITH_HEAD_ROT const int32_t output_Fs, @@ -1615,7 +1615,7 @@ ivas_error ivas_rend_openCrend( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), hHrtfStat, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), hHrtfStatistics, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, NULL, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) #endif diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 1003c1dde5..060d28595b 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -235,3 +235,46 @@ void ivas_HRTF_parambin_binary_close( return; } + +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +/*-----------------------------------------------------------------------* + * ivas_HRTF_statistics_binary_open() + * + * Allocate HRTF binary handle for statistics handler + *-----------------------------------------------------------------------*/ + +ivas_error +ivas_HRTF_statistics_binary_open( + HRTFS_STATISTICS **hHrtfStatistics ) +{ + *hHrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ); + if ( *hHrtfStatistics == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); + } + + + return IVAS_ERR_OK; +} + + +/*-----------------------------------------------------------------------* + * ivas_HRTF_statistics_binary_close() + * + * Close HRTF binary handle for statistics handler + *-----------------------------------------------------------------------*/ + +void ivas_HRTF_statistics_binary_close( + HRTFS_STATISTICS **hHrtfStatistics ) +{ + if ( hHrtfStatistics == NULL || *hHrtfStatistics == NULL ) + { + return; + } + + free( *hHrtfStatistics ); + *hHrtfStatistics = NULL; + + return; +} +#endif \ No newline at end of file diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index 14a5c05909..b9116989ac 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -404,6 +404,7 @@ static ivas_error DefaultBSplineModel( modelITD = &( HrFiltSet_p->ModelParamsITD ); #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + /*Todo: Check ModelRom*/ #else switch ( output_Fs ) { diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index f1dfa79dec..f1661a6cac 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -904,7 +904,7 @@ ivas_error ivas_rend_openCrend( RENDER_CONFIG_DATA *hRendCfg, HRTFS_CREND_HANDLE hSetOfHRTF, #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - HRTFS_STATISTICS_HANDLE hHrtfStat, + HRTFS_STATISTICS_HANDLE hHrtfStatistics, #endif #ifdef SPLIT_REND_WITH_HEAD_ROT const int32_t output_Fs, @@ -1016,7 +1016,7 @@ void ivas_binaural_reverb_processSubframe( ivas_error ivas_reverb_open( REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const HRTFS_STATISTICS_HANDLE hHrtfStat, /* i : HRTF statistics handle */ + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ #else const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 0bfdd638f1..a3155eb3d6 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1002,6 +1002,7 @@ static void set_reverb_acoustic_data( } #endif + /* ToDo: Check if interpolation is necessary. */ /* interpolate input table data for T60 and DSR to the FFT filter grid */ ivas_reverb_interpolate_acoustic_data( nr_fc_input, pRoomAcoustics->pFc_input, pRoomAcoustics->pAcoustic_rt60, pRoomAcoustics->pAcoustic_dsr, nr_fc_fft_filter, pParams->pFc, pParams->pRt60, pParams->pDsr ); @@ -1095,16 +1096,16 @@ static ivas_error setup_FDN_branches( *------------------------------------------------------------------------*/ ivas_error ivas_reverb_open( - REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ + REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const HRTFS_STATISTICS_HANDLE hHrtfStat, /* i : HRTF statistics handle */ + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ #else const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */ #endif - RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ - const int32_t output_Fs /* i : output sampling rate */ + RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ + const int32_t output_Fs /* i : output sampling rate */ ) { ivas_error error; @@ -1178,9 +1179,9 @@ ivas_error ivas_reverb_open( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES set_reverb_acoustic_data( ¶ms, &hRenderConfig->roomAcoustics, nr_fc_input, nr_fc_fft_filter ); - params.pHrtf_avg_pwr_response_l_const = hHrtfStat->average_energy_l; - params.pHrtf_avg_pwr_response_r_const = hHrtfStat->average_energy_r; - params.pHrtf_inter_aural_coherence_const = hHrtfStat->inter_aural_coherence; + params.pHrtf_avg_pwr_response_l_const = hHrtfStatistics->average_energy_l; + params.pHrtf_avg_pwr_response_r_const = hHrtfStatistics->average_energy_r; + params.pHrtf_inter_aural_coherence_const = hHrtfStatistics->inter_aural_coherence; #else if ( hHrtf == NULL && lr_energy_and_iac != NULL ) { diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index ef0aa17ec4..472c1ddab2 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -1508,7 +1508,7 @@ static ivas_error setRendInputActiveIsm( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, hHrtfStat, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, hHrtfStatistics, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, NULL, inputIsm->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #endif @@ -2217,7 +2217,7 @@ static ivas_error initMcBinauralRendering( #ifdef NONBE_FIX_BINARY_BINAURAL_READING IVAS_DEC_HRTF_CREND_HANDLE hMixconv, #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - HRTFS_STATISTICS_HANDLE hHrtfStat, + HRTFS_STATISTICS_HANDLE hHrtfStatistics, #endif #endif uint8_t reconfigureFlag ) @@ -2323,7 +2323,7 @@ static ivas_error initMcBinauralRendering( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && inputMc->hReverb == NULL ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_reverb_open( &( inputMc->hReverb ), hHrtfStat, hRendCfg, outSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_reverb_open( &( inputMc->hReverb ), hHrtfStatistics, hRendCfg, outSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_reverb_open( &( inputMc->hReverb ), outConfig, NULL, inputMc->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, outSampleRate ) ) != IVAS_ERR_OK ) #endif @@ -2348,7 +2348,7 @@ static ivas_error initMcBinauralRendering( #else #ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv, hHrtfStat, outSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv, hHrtfStatistics, outSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv, outSampleRate ) ) != IVAS_ERR_OK ) #endif @@ -2781,7 +2781,7 @@ static ivas_error updateSbaPanGains( IVAS_DEC_HRTF_CREND_HANDLE hMixconv #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES , - IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStat + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStatistics #endif #else RENDER_CONFIG_DATA *hRendCfg @@ -2850,7 +2850,7 @@ static ivas_error updateSbaPanGains( if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) #else #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, hHrtfStat, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, hHrtfStatistics, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #endif @@ -2879,7 +2879,7 @@ static ivas_error updateSbaPanGains( if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) #else #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, hHrtfStat, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, hHrtfStatistics, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #endif @@ -3452,6 +3452,9 @@ ivas_error IVAS_REND_Open( hIvasRend->hHrtfs.hHrtfParambin = NULL; hIvasRend->hHrtfs.hHrtfTD = NULL; hIvasRend->hHrtfs.hSetOfHRTF = NULL; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + hIvasRend->hHrtfs.hHrtfStatistics = NULL; +#endif if ( asHrtfBinary ) { if ( ( error = ivas_HRTF_binary_open( &( hIvasRend->hHrtfs.hHrtfTD ) ) ) != IVAS_ERR_OK ) @@ -3470,6 +3473,12 @@ ivas_error IVAS_REND_Open( { return error; } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_HRTF_statistics_binary_open( &( hIvasRend->hHrtfs.hHrtfStatistics ) ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif } #endif @@ -8708,6 +8717,9 @@ void IVAS_REND_Close( ivas_HRTF_CRend_binary_close( &( hIvasRend->hHrtfs.hSetOfHRTF ) ); ivas_HRTF_fastconv_binary_close( &( hIvasRend->hHrtfs.hHrtfFastConv ) ); ivas_HRTF_parambin_binary_close( &( hIvasRend->hHrtfs.hHrtfParambin ) ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + ivas_HRTF_statistics_binary_close( &( hIvasRend->hHrtfs.hHrtfStatistics ) ); +#endif #endif free( hIvasRend ); @@ -8960,8 +8972,8 @@ ivas_error IVAS_REND_GetHrtfParamBinHandle( *---------------------------------------------------------------------*/ ivas_error IVAS_REND_GetHrtfStatisticsHandle( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStat /* o : HRTF statistics handle */ + IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : HRTF statistics handle */ ) { if ( hIvasRend == NULL || hIvasRend->hHrtfs.hHrtfStatistics == NULL ) @@ -8969,7 +8981,7 @@ ivas_error IVAS_REND_GetHrtfStatisticsHandle( return IVAS_ERR_WRONG_PARAMS; } - *hHrtfStat = &hIvasRend->hHrtfs.hHrtfStatistics; + *hHrtfStatistics = &hIvasRend->hHrtfs.hHrtfStatistics; return IVAS_ERR_OK; } diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index 415a8cd4c9..2824ad1fdc 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -225,7 +225,7 @@ ivas_error IVAS_REND_GetHrtfParamBinHandle( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error IVAS_REND_GetHrtfStatisticsHandle( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ - IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStat /* o : HRTF statistics handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : HRTF statistics handle */ ); #endif #endif diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 4d4c832c6a..fe0448f223 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -471,7 +471,7 @@ static ivas_error LoadBSplineBinary( static ivas_error set_default_reverb_iac_energy( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - HRTFS_STATISTICS_HANDLE hHrtfStat, + HRTFS_STATISTICS_HANDLE hHrtfStatistics, int32_t sampleRate, int16_t modelROM #else @@ -487,7 +487,7 @@ static ivas_error set_default_reverb_iac_energy( int16_t lr_iac_len; #endif #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( hHrtfStat == NULL ) + if ( hHrtfStatistics == NULL ) #else if ( HrFiltSet_p == NULL ) #endif @@ -513,11 +513,11 @@ static ivas_error set_default_reverb_iac_energy( { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /* TODO: check for sample rate dependency if no three sets of data need to be handled in parallel */ - hHrtfStat->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - hHrtfStat->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - hHrtfStat->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - if ( hHrtfStat->average_energy_l_dyn == NULL || hHrtfStat->average_energy_r_dyn == NULL || hHrtfStat->inter_aural_coherence_dyn == NULL ) + if ( hHrtfStatistics->average_energy_l_dyn == NULL || hHrtfStatistics->average_energy_r_dyn == NULL || hHrtfStatistics->inter_aural_coherence_dyn == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for HRTF statistics data" ); } @@ -525,19 +525,19 @@ static ivas_error set_default_reverb_iac_energy( switch ( sampleRate ) { case 48000: - mvr2r( defaultHRIR_left_avg_power_48kHz, hHrtfStat->average_energy_l_dyn, lr_iac_len ); - mvr2r( defaultHRIR_right_avg_power_48kHz, hHrtfStat->average_energy_r_dyn, lr_iac_len ); - mvr2r( defaultHRIR_coherence_48kHz, hHrtfStat->inter_aural_coherence_dyn, lr_iac_len ); + mvr2r( defaultHRIR_left_avg_power_48kHz, hHrtfStatistics->average_energy_l_dyn, lr_iac_len ); + mvr2r( defaultHRIR_right_avg_power_48kHz, hHrtfStatistics->average_energy_r_dyn, lr_iac_len ); + mvr2r( defaultHRIR_coherence_48kHz, hHrtfStatistics->inter_aural_coherence_dyn, lr_iac_len ); break; case 32000: - mvr2r( defaultHRIR_left_avg_power_32kHz, hHrtfStat->average_energy_l_dyn, lr_iac_len ); - mvr2r( defaultHRIR_right_avg_power_32kHz, hHrtfStat->average_energy_r_dyn, lr_iac_len ); - mvr2r( defaultHRIR_coherence_32kHz, hHrtfStat->inter_aural_coherence_dyn, lr_iac_len ); + mvr2r( defaultHRIR_left_avg_power_32kHz, hHrtfStatistics->average_energy_l_dyn, lr_iac_len ); + mvr2r( defaultHRIR_right_avg_power_32kHz, hHrtfStatistics->average_energy_r_dyn, lr_iac_len ); + mvr2r( defaultHRIR_coherence_32kHz, hHrtfStatistics->inter_aural_coherence_dyn, lr_iac_len ); break; case 16000: - mvr2r( defaultHRIR_left_avg_power_16kHz, hHrtfStat->average_energy_l_dyn, lr_iac_len ); - mvr2r( defaultHRIR_right_avg_power_16kHz, hHrtfStat->average_energy_r_dyn, lr_iac_len ); - mvr2r( defaultHRIR_coherence_16kHz, hHrtfStat->inter_aural_coherence_dyn, lr_iac_len ); + mvr2r( defaultHRIR_left_avg_power_16kHz, hHrtfStatistics->average_energy_l_dyn, lr_iac_len ); + mvr2r( defaultHRIR_right_avg_power_16kHz, hHrtfStatistics->average_energy_r_dyn, lr_iac_len ); + mvr2r( defaultHRIR_coherence_16kHz, hHrtfStatistics->inter_aural_coherence_dyn, lr_iac_len ); break; } } @@ -546,19 +546,19 @@ static ivas_error set_default_reverb_iac_energy( switch ( sampleRate ) { case 48000: - hHrtfStat->average_energy_l = defaultHRIR_left_avg_power_48kHz; - hHrtfStat->average_energy_r = defaultHRIR_right_avg_power_48kHz; - hHrtfStat->inter_aural_coherence = defaultHRIR_coherence_48kHz; + hHrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_48kHz; + hHrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_48kHz; + hHrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_48kHz; break; case 32000: - hHrtfStat->average_energy_l = defaultHRIR_left_avg_power_32kHz; - hHrtfStat->average_energy_r = defaultHRIR_right_avg_power_32kHz; - hHrtfStat->inter_aural_coherence = defaultHRIR_coherence_32kHz; + hHrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_32kHz; + hHrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_32kHz; + hHrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_32kHz; break; case 16000: - hHrtfStat->average_energy_l = defaultHRIR_left_avg_power_16kHz; - hHrtfStat->average_energy_r = defaultHRIR_right_avg_power_16kHz; - hHrtfStat->inter_aural_coherence = defaultHRIR_coherence_16kHz; + hHrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_16kHz; + hHrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_16kHz; + hHrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_16kHz; break; } } @@ -640,8 +640,8 @@ static ivas_error set_default_reverb_iac_energy( static ivas_error load_reverb_from_binary( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStat, /* i/o: HRTF statistics handle */ - int32_t sampleRate, /* i : sample rate */ + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStatistics, /* i/o: HRTF statistics handle */ + int32_t sampleRate, /* i : sample rate */ #else IVAS_DEC_HRTF_HANDLE HrFiltSet_p, /* i/o: HR filter model parameter structure */ #endif @@ -663,7 +663,7 @@ static ivas_error load_reverb_from_binary( int16_t lr_iac_len; #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( hHrtfStat == NULL ) + if ( hHrtfStatistics == NULL ) #else if ( HrFiltSet_p == NULL ) #endif @@ -733,20 +733,20 @@ static ivas_error load_reverb_from_binary( if ( is_reverb ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - hHrtfStat->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - hHrtfStat->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - hHrtfStat->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - if ( hHrtfStat->average_energy_l_dyn == NULL || hHrtfStat->average_energy_r_dyn == NULL || hHrtfStat->inter_aural_coherence_dyn == NULL ) + if ( hHrtfStatistics->average_energy_l_dyn == NULL || hHrtfStatistics->average_energy_r_dyn == NULL || hHrtfStatistics->inter_aural_coherence_dyn == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } - fread( hHrtfStat->average_energy_l_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - fread( hHrtfStat->average_energy_r_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - fread( hHrtfStat->inter_aural_coherence_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - hHrtfStat->average_energy_l = (const float *) hHrtfStat->average_energy_l_dyn; - hHrtfStat->average_energy_r = (const float *) hHrtfStat->average_energy_r_dyn; - hHrtfStat->inter_aural_coherence = (const float *) hHrtfStat->inter_aural_coherence_dyn; + fread( hHrtfStatistics->average_energy_l_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + fread( hHrtfStatistics->average_energy_r_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + fread( hHrtfStatistics->inter_aural_coherence_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + hHrtfStatistics->average_energy_l = (const float *) hHrtfStatistics->average_energy_l_dyn; + hHrtfStatistics->average_energy_r = (const float *) hHrtfStatistics->average_energy_r_dyn; + hHrtfStatistics->inter_aural_coherence = (const float *) hHrtfStatistics->inter_aural_coherence_dyn; #else /* left/right energy and interaural coherence for late reverb */ for ( i = 0; i < 3; i++ ) @@ -779,7 +779,9 @@ static ivas_error load_reverb_from_binary( { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /* TODO: Check for the modelROM correctness */ - set_default_reverb_iac_energy( hHrtfStat, sampleRate, TRUE ); + + /* TODO: Check should we call this function in other place as well? */ + set_default_reverb_iac_energy( hHrtfStatistics, sampleRate, TRUE ); #else set_default_reverb_iac_energy( HrFiltSet_p ); #endif @@ -802,17 +804,17 @@ static ivas_error load_reverb_from_binary( ivas_error load_reverb_binary( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStat, /* i/o: HRTF staistics handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStatistics, /* i/o: HRTF staistics handle */ int_fast32_t sampleRate, #else - IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ + IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ #endif const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */ ) { fseek( hrtfReader->file, 0, SEEK_SET ); - return load_reverb_from_binary( hHrtfStat, sampleRate, hrtfReader->file ); + return load_reverb_from_binary( hHrtfStatistics, sampleRate, hrtfReader->file ); } #endif diff --git a/lib_util/hrtf_file_reader.h b/lib_util/hrtf_file_reader.h index de70d9882b..a08f9431f4 100644 --- a/lib_util/hrtf_file_reader.h +++ b/lib_util/hrtf_file_reader.h @@ -103,10 +103,10 @@ ivas_error load_HRTF_binary( ivas_error load_reverb_binary( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStat, /* i/o: HRTF statistics handle */ - int32_t sampleRate, /* i : sample rate */ + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStatistics, /* i/o: HRTF statistics handle */ + int32_t sampleRate, /* i : sample rate */ #else - IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ + IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ #endif const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */ ); -- GitLab From 2add7af185009a6c7c825f5e376489169e77bedf Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac <31622564+sbsarac@users.noreply.github.com> Date: Mon, 4 Dec 2023 16:25:34 +0100 Subject: [PATCH 05/52] Some formatting --- lib_dec/ivas_init_dec.c | 3 +++ lib_rend/ivas_hrtf.c | 4 +--- lib_rend/ivas_prot_rend.h | 10 ++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index ef33c73b6f..8a1d21c425 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2557,6 +2557,9 @@ void ivas_initialize_handles_dec( st_ivas->hSetOfHRTF = NULL; st_ivas->hHrtfFastConv = NULL; st_ivas->hHrtfParambin = NULL; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + st_ivas->hHrtfStatistics = NULL; +#endif st_ivas->hoa_dec_mtx = NULL; st_ivas->hMasaIsmData = NULL; st_ivas->hSbaIsmData = NULL; diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 060d28595b..0d2212317f 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -243,8 +243,7 @@ void ivas_HRTF_parambin_binary_close( * Allocate HRTF binary handle for statistics handler *-----------------------------------------------------------------------*/ -ivas_error -ivas_HRTF_statistics_binary_open( +ivas_error ivas_HRTF_statistics_binary_open( HRTFS_STATISTICS **hHrtfStatistics ) { *hHrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ); @@ -253,7 +252,6 @@ ivas_HRTF_statistics_binary_open( return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); } - return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index f1661a6cac..bb0cd8922d 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -617,6 +617,16 @@ void ivas_HRTF_parambin_binary_close( HRTFS_PARAMBIN **hHrtfParambin /* i/o: Parametric binauralizer HRTF structure */ ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +ivas_error ivas_HRTF_statistics_binary_open( + HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */ +); + +void ivas_HRTF_statistics_binary_close( + HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */ +); +#endif + ivas_error ivas_HRTF_CRend_binary_open( HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ ); -- GitLab From 86c9d3a0d7c2707b4413e2bf5837f042bf5cddfc Mon Sep 17 00:00:00 2001 From: Jan Brouwer Date: Tue, 5 Dec 2023 11:20:16 +0100 Subject: [PATCH 06/52] add hrtf statistics initialization to ROM tables --- lib_dec/ivas_init_dec.c | 2 +- lib_dec/ivas_stat_dec.h | 2 -- lib_rend/ivas_hrtf.c | 32 +++++++++++++++++++++++++++++++- lib_rend/ivas_prot_rend.h | 3 ++- lib_rend/lib_rend.c | 2 +- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 8a1d21c425..7206ddb5ed 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1105,7 +1105,7 @@ ivas_error ivas_init_decoder_front( } #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_HRTF_statistics_binary_open( &st_ivas->hHrtfStatistics ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_HRTF_statistics_binary_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 0ee30b49ed..4473601d27 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1122,8 +1122,6 @@ typedef struct Decoder_Struct HRTFS_PARAMBIN_HANDLE hHrtfParambin; /* HRTF tables for parametric binauralizer */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES HRTFS_STATISTICS_HANDLE hHrtfStatistics; /* HRTF statistics handle */ -#else - float *lr_energy_and_iac[3]; #endif LSSETUP_CUSTOM_HANDLE hLsSetupCustom; /* Custom LS configuration handle */ float *hoa_dec_mtx; /* Pointer to decoder matrix for SBA */ diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 0d2212317f..fc54716446 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -37,6 +37,9 @@ #include "ivas_error.h" #include "wmc_auto.h" #include "ivas_prot.h" +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#include "ivas_rom_binaural_crend_head.h" +#endif /*-----------------------------------------------------------------------* * ivas_HRTF_binary_open() @@ -244,7 +247,8 @@ void ivas_HRTF_parambin_binary_close( *-----------------------------------------------------------------------*/ ivas_error ivas_HRTF_statistics_binary_open( - HRTFS_STATISTICS **hHrtfStatistics ) + HRTFS_STATISTICS **hHrtfStatistics, + int32_t sampleRate) { *hHrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ); if ( *hHrtfStatistics == NULL ) @@ -252,6 +256,32 @@ ivas_error ivas_HRTF_statistics_binary_open( return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + switch ( sampleRate ) + { + case 48000: + (*hHrtfStatistics)->average_energy_l = defaultHRIR_left_avg_power_48kHz; + (*hHrtfStatistics)->average_energy_r = defaultHRIR_right_avg_power_48kHz; + (*hHrtfStatistics)->inter_aural_coherence = defaultHRIR_coherence_48kHz; + break; + case 32000: + (*hHrtfStatistics)->average_energy_l = defaultHRIR_left_avg_power_32kHz; + (*hHrtfStatistics)->average_energy_r = defaultHRIR_right_avg_power_32kHz; + (*hHrtfStatistics)->inter_aural_coherence = defaultHRIR_coherence_32kHz; + break; + case 16000: + (*hHrtfStatistics)->average_energy_l = defaultHRIR_left_avg_power_16kHz; + (*hHrtfStatistics)->average_energy_r = defaultHRIR_right_avg_power_16kHz; + (*hHrtfStatistics)->inter_aural_coherence = defaultHRIR_coherence_16kHz; + break; + default: + (*hHrtfStatistics)->average_energy_l = NULL; + (*hHrtfStatistics)->average_energy_r = NULL; + (*hHrtfStatistics)->inter_aural_coherence = NULL; + break; + } +#endif + return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index bb0cd8922d..2fc71ddcf5 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -619,7 +619,8 @@ void ivas_HRTF_parambin_binary_close( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error ivas_HRTF_statistics_binary_open( - HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */ + HRTFS_STATISTICS **hHrtfStatistics, + int32_t sampleRate ); void ivas_HRTF_statistics_binary_close( diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 472c1ddab2..fe05f3a83f 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -3474,7 +3474,7 @@ ivas_error IVAS_REND_Open( return error; } #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_HRTF_statistics_binary_open( &( hIvasRend->hHrtfs.hHrtfStatistics ) ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_HRTF_statistics_binary_open( &( hIvasRend->hHrtfs.hHrtfStatistics ), outputSampleRate ) ) != IVAS_ERR_OK ) { return error; } -- GitLab From 4a6e07f1685e919a3d3ece843727858274334d5e Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac <31622564+sbsarac@users.noreply.github.com> Date: Tue, 5 Dec 2023 15:11:15 +0100 Subject: [PATCH 07/52] Go over ToDo's --- lib_rend/ivas_hrtf.c | 28 +++++++++++++--------------- lib_rend/ivas_objectRenderer_mix.c | 2 +- lib_rend/ivas_reverb.c | 2 +- lib_util/hrtf_file_reader.c | 6 +++--- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index fc54716446..b6d4b5aebf 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -248,7 +248,7 @@ void ivas_HRTF_parambin_binary_close( ivas_error ivas_HRTF_statistics_binary_open( HRTFS_STATISTICS **hHrtfStatistics, - int32_t sampleRate) + int32_t sampleRate ) { *hHrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ); if ( *hHrtfStatistics == NULL ) @@ -256,31 +256,29 @@ ivas_error ivas_HRTF_statistics_binary_open( return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); } -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES switch ( sampleRate ) { case 48000: - (*hHrtfStatistics)->average_energy_l = defaultHRIR_left_avg_power_48kHz; - (*hHrtfStatistics)->average_energy_r = defaultHRIR_right_avg_power_48kHz; - (*hHrtfStatistics)->inter_aural_coherence = defaultHRIR_coherence_48kHz; + ( *hHrtfStatistics )->average_energy_l = defaultHRIR_left_avg_power_48kHz; + ( *hHrtfStatistics )->average_energy_r = defaultHRIR_right_avg_power_48kHz; + ( *hHrtfStatistics )->inter_aural_coherence = defaultHRIR_coherence_48kHz; break; case 32000: - (*hHrtfStatistics)->average_energy_l = defaultHRIR_left_avg_power_32kHz; - (*hHrtfStatistics)->average_energy_r = defaultHRIR_right_avg_power_32kHz; - (*hHrtfStatistics)->inter_aural_coherence = defaultHRIR_coherence_32kHz; + ( *hHrtfStatistics )->average_energy_l = defaultHRIR_left_avg_power_32kHz; + ( *hHrtfStatistics )->average_energy_r = defaultHRIR_right_avg_power_32kHz; + ( *hHrtfStatistics )->inter_aural_coherence = defaultHRIR_coherence_32kHz; break; case 16000: - (*hHrtfStatistics)->average_energy_l = defaultHRIR_left_avg_power_16kHz; - (*hHrtfStatistics)->average_energy_r = defaultHRIR_right_avg_power_16kHz; - (*hHrtfStatistics)->inter_aural_coherence = defaultHRIR_coherence_16kHz; + ( *hHrtfStatistics )->average_energy_l = defaultHRIR_left_avg_power_16kHz; + ( *hHrtfStatistics )->average_energy_r = defaultHRIR_right_avg_power_16kHz; + ( *hHrtfStatistics )->inter_aural_coherence = defaultHRIR_coherence_16kHz; break; default: - (*hHrtfStatistics)->average_energy_l = NULL; - (*hHrtfStatistics)->average_energy_r = NULL; - (*hHrtfStatistics)->inter_aural_coherence = NULL; + ( *hHrtfStatistics )->average_energy_l = NULL; + ( *hHrtfStatistics )->average_energy_r = NULL; + ( *hHrtfStatistics )->inter_aural_coherence = NULL; break; } -#endif return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index b9116989ac..c1354c1c05 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -404,7 +404,7 @@ static ivas_error DefaultBSplineModel( modelITD = &( HrFiltSet_p->ModelParamsITD ); #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /*Todo: Check ModelRom*/ + /*TODO(922): Check ModelRom*/ #else switch ( output_Fs ) { diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index a3155eb3d6..2ee3557157 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1002,7 +1002,7 @@ static void set_reverb_acoustic_data( } #endif - /* ToDo: Check if interpolation is necessary. */ + /* TODO(922): Check if interpolation is necessary. */ /* interpolate input table data for T60 and DSR to the FFT filter grid */ ivas_reverb_interpolate_acoustic_data( nr_fc_input, pRoomAcoustics->pFc_input, pRoomAcoustics->pAcoustic_rt60, pRoomAcoustics->pAcoustic_dsr, nr_fc_fft_filter, pParams->pFc, pParams->pRt60, pParams->pDsr ); diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index fe0448f223..deac05a3e0 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -512,7 +512,7 @@ static ivas_error set_default_reverb_iac_energy( #endif { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /* TODO: check for sample rate dependency if no three sets of data need to be handled in parallel */ + hHrtfStatistics->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); hHrtfStatistics->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); hHrtfStatistics->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); @@ -778,9 +778,9 @@ static ivas_error load_reverb_from_binary( else { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /* TODO: Check for the modelROM correctness */ + /* TODO(922): Check for the modelROM correctness */ - /* TODO: Check should we call this function in other place as well? */ + /* TODO(922): Check should we call this function in other place as well? */ set_default_reverb_iac_energy( hHrtfStatistics, sampleRate, TRUE ); #else set_default_reverb_iac_energy( HrFiltSet_p ); -- GitLab From 6953ba6ca3fac7119aa797535a364e5c9f90fda4 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac <31622564+sbsarac@users.noreply.github.com> Date: Tue, 5 Dec 2023 16:42:16 +0100 Subject: [PATCH 08/52] Delete a ToDo --- lib_rend/ivas_reverb.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 2ee3557157..b0654611a9 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1002,7 +1002,6 @@ static void set_reverb_acoustic_data( } #endif - /* TODO(922): Check if interpolation is necessary. */ /* interpolate input table data for T60 and DSR to the FFT filter grid */ ivas_reverb_interpolate_acoustic_data( nr_fc_input, pRoomAcoustics->pFc_input, pRoomAcoustics->pAcoustic_rt60, pRoomAcoustics->pAcoustic_dsr, nr_fc_fft_filter, pParams->pFc, pParams->pRt60, pParams->pDsr ); -- GitLab From 5a12dcdedfd610153c294bb7a01ca8a47526447a Mon Sep 17 00:00:00 2001 From: Jan Brouwer Date: Tue, 5 Dec 2023 17:32:15 +0100 Subject: [PATCH 09/52] added fromROM flag to HRTFS_STATISTICS; set_default_reverb_iac_energy() not needed anymore, wound back changes --- lib_rend/ivas_hrtf.c | 12 ++- lib_rend/ivas_stat_rend.h | 4 +- lib_util/hrtf_file_reader.c | 183 +++++++++++------------------------- 3 files changed, 64 insertions(+), 135 deletions(-) diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index b6d4b5aebf..81ee12120a 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -256,6 +256,11 @@ ivas_error ivas_HRTF_statistics_binary_open( return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + ( *hHrtfStatistics )->average_energy_l = NULL; + ( *hHrtfStatistics )->average_energy_r = NULL; + ( *hHrtfStatistics )->inter_aural_coherence = NULL; + switch ( sampleRate ) { case 48000: @@ -273,12 +278,9 @@ ivas_error ivas_HRTF_statistics_binary_open( ( *hHrtfStatistics )->average_energy_r = defaultHRIR_right_avg_power_16kHz; ( *hHrtfStatistics )->inter_aural_coherence = defaultHRIR_coherence_16kHz; break; - default: - ( *hHrtfStatistics )->average_energy_l = NULL; - ( *hHrtfStatistics )->average_energy_r = NULL; - ( *hHrtfStatistics )->inter_aural_coherence = NULL; - break; } + ( *hHrtfStatistics )->fromROM = TRUE; +#endif return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index aa9ef49a71..98dd6f3dda 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1361,9 +1361,7 @@ typedef struct ivas_hrtfs_statistics_struct const float *average_energy_l; const float *average_energy_r; const float *inter_aural_coherence; - float *average_energy_l_dyn; - float *average_energy_r_dyn; - float *inter_aural_coherence_dyn; + int16_t fromROM; /* Flag that indicates that the pointers point to tables in ROM (controls init/dealloc).*/ } HRTFS_STATISTICS, *HRTFS_STATISTICS_HANDLE; #endif diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index deac05a3e0..357938f847 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -463,6 +463,7 @@ static ivas_error LoadBSplineBinary( #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /*-------------------------------------------------------------------* * set_default_reverb_iac_energy() * @@ -470,165 +471,92 @@ static ivas_error LoadBSplineBinary( --------------------------------------------------------------------*/ static ivas_error set_default_reverb_iac_energy( -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - HRTFS_STATISTICS_HANDLE hHrtfStatistics, - int32_t sampleRate, - int16_t modelROM -#else IVAS_DEC_HRTF_HANDLE HrFiltSet_p /* i/o: HR filter model parameter structure */ -#endif ) { ivas_error error = IVAS_ERR_OK; -#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES int16_t i; -#endif #ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB int16_t lr_iac_len; #endif -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( hHrtfStatistics == NULL ) -#else if ( HrFiltSet_p == NULL ) -#endif { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } #ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB lr_iac_len = LR_IAC_LENGTH_NR_FC; -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( sampleRate == 16000 ) -#else if ( HrFiltSet_p->SampleRate == 16000 ) -#endif { lr_iac_len = LR_IAC_LENGTH_NR_FC_16KHZ; } #endif -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( modelROM == 0 ) -#else -#endif + if ( HrFiltSet_p->ModelParams.modelROM == 0 ) { -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - - hHrtfStatistics->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - hHrtfStatistics->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - hHrtfStatistics->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - - if ( hHrtfStatistics->average_energy_l_dyn == NULL || hHrtfStatistics->average_energy_r_dyn == NULL || hHrtfStatistics->inter_aural_coherence_dyn == NULL ) + for ( i = 0; i < 3; i++ ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for HRTF statistics data" ); +#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB + HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( lr_iac_len * sizeof( float ) ); +#else + HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) ); +#endif +#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES + if ( HrFiltSet_p->lr_energy_and_iac_dyn[i] == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); + } +#endif } - - switch ( sampleRate ) + switch ( HrFiltSet_p->SampleRate ) { case 48000: - mvr2r( defaultHRIR_left_avg_power_48kHz, hHrtfStatistics->average_energy_l_dyn, lr_iac_len ); - mvr2r( defaultHRIR_right_avg_power_48kHz, hHrtfStatistics->average_energy_r_dyn, lr_iac_len ); - mvr2r( defaultHRIR_coherence_48kHz, hHrtfStatistics->inter_aural_coherence_dyn, lr_iac_len ); + mvr2r( defaultHRIR_left_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_right_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_coherence_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); break; case 32000: - mvr2r( defaultHRIR_left_avg_power_32kHz, hHrtfStatistics->average_energy_l_dyn, lr_iac_len ); - mvr2r( defaultHRIR_right_avg_power_32kHz, hHrtfStatistics->average_energy_r_dyn, lr_iac_len ); - mvr2r( defaultHRIR_coherence_32kHz, hHrtfStatistics->inter_aural_coherence_dyn, lr_iac_len ); + mvr2r( defaultHRIR_left_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_right_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_coherence_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); break; case 16000: - mvr2r( defaultHRIR_left_avg_power_16kHz, hHrtfStatistics->average_energy_l_dyn, lr_iac_len ); - mvr2r( defaultHRIR_right_avg_power_16kHz, hHrtfStatistics->average_energy_r_dyn, lr_iac_len ); - mvr2r( defaultHRIR_coherence_16kHz, hHrtfStatistics->inter_aural_coherence_dyn, lr_iac_len ); +#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB + mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], lr_iac_len ); + mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], lr_iac_len ); + mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], lr_iac_len ); +#else + mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); + mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); +#endif break; } } else { - switch ( sampleRate ) + switch ( HrFiltSet_p->SampleRate ) { case 48000: - hHrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_48kHz; - hHrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_48kHz; - hHrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_48kHz; + HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_48kHz; + HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_48kHz; + HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_48kHz; break; case 32000: - hHrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_32kHz; - hHrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_32kHz; - hHrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_32kHz; + HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_32kHz; + HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_32kHz; + HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_32kHz; break; case 16000: - hHrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_16kHz; - hHrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_16kHz; - hHrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_16kHz; + HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_16kHz; + HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_16kHz; + HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz; break; } } -#else - if ( HrFiltSet_p->ModelParams.modelROM == 0 ) - { - for ( i = 0; i < 3; i++ ) - { -#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB - HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( lr_iac_len * sizeof( float ) ); -#else - HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) ); -#endif -#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES - if ( HrFiltSet_p->lr_energy_and_iac_dyn[i] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); - } -#endif - } - switch ( HrFiltSet_p->SampleRate ) - { - case 48000: - mvr2r( defaultHRIR_left_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_right_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_coherence_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); - break; - case 32000: - mvr2r( defaultHRIR_left_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_right_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_coherence_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); - break; - case 16000: -#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB - mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], lr_iac_len ); - mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], lr_iac_len ); - mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], lr_iac_len ); -#else - mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC ); - mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC ); -#endif - break; - } - } - else - { - switch ( HrFiltSet_p->SampleRate ) - { - case 48000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_48kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_48kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_48kHz; - break; - case 32000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_32kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_32kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_32kHz; - break; - case 16000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_16kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_16kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz; - break; - } - } -#endif return error; } +#endif #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES @@ -663,6 +591,10 @@ static ivas_error load_reverb_from_binary( int16_t lr_iac_len; #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + float *average_energy_l_dyn; + float *average_energy_r_dyn; + float *inter_aural_coherence_dyn; + if ( hHrtfStatistics == NULL ) #else if ( HrFiltSet_p == NULL ) @@ -733,20 +665,21 @@ static ivas_error load_reverb_from_binary( if ( is_reverb ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - hHrtfStatistics->average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - hHrtfStatistics->average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - hHrtfStatistics->inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - if ( hHrtfStatistics->average_energy_l_dyn == NULL || hHrtfStatistics->average_energy_r_dyn == NULL || hHrtfStatistics->inter_aural_coherence_dyn == NULL ) + if ( average_energy_l_dyn == NULL || average_energy_r_dyn == NULL || inter_aural_coherence_dyn == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } - fread( hHrtfStatistics->average_energy_l_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - fread( hHrtfStatistics->average_energy_r_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - fread( hHrtfStatistics->inter_aural_coherence_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - hHrtfStatistics->average_energy_l = (const float *) hHrtfStatistics->average_energy_l_dyn; - hHrtfStatistics->average_energy_r = (const float *) hHrtfStatistics->average_energy_r_dyn; - hHrtfStatistics->inter_aural_coherence = (const float *) hHrtfStatistics->inter_aural_coherence_dyn; + fread( average_energy_l_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + fread( average_energy_r_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + fread( inter_aural_coherence_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); + hHrtfStatistics->average_energy_l = (const float *) average_energy_l_dyn; + hHrtfStatistics->average_energy_r = (const float *) average_energy_r_dyn; + hHrtfStatistics->inter_aural_coherence = (const float *) inter_aural_coherence_dyn; + hHrtfStatistics->fromROM = FALSE; #else /* left/right energy and interaural coherence for late reverb */ for ( i = 0; i < 3; i++ ) @@ -778,10 +711,6 @@ static ivas_error load_reverb_from_binary( else { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /* TODO(922): Check for the modelROM correctness */ - - /* TODO(922): Check should we call this function in other place as well? */ - set_default_reverb_iac_energy( hHrtfStatistics, sampleRate, TRUE ); #else set_default_reverb_iac_energy( HrFiltSet_p ); #endif -- GitLab From d30fd0516bcb3f66643f6c7e7dce340258c5b1b0 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Wed, 6 Dec 2023 11:26:45 +0100 Subject: [PATCH 10/52] HRTF statistics handling update --- lib_dec/lib_dec.c | 4 ++-- lib_dec/lib_dec.h | 4 ++-- lib_rend/ivas_hrtf.c | 2 -- lib_rend/ivas_stat_rend.h | 6 ++--- lib_util/hrtf_file_reader.c | 45 ++++++++++++++++++++++++------------- lib_util/hrtf_file_reader.h | 11 +++++++++ 6 files changed, 48 insertions(+), 24 deletions(-) diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 708b22da3c..43cf6d0cf0 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -2189,8 +2189,8 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle( *---------------------------------------------------------------------*/ ivas_error IVAS_DEC_GetHrtfStatisticsHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : Parametric binauralizer HRTF handle */ + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : HRTF statistics handle */ ) { if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHrtfStatistics == NULL ) diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index ddd5b10ee1..fccd4f2236 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -459,8 +459,8 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error IVAS_DEC_GetHrtfStatisticsHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : HRTF statistics handle */ + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : HRTF statistics handle */ ); #endif diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 81ee12120a..477ef74d64 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -256,7 +256,6 @@ ivas_error ivas_HRTF_statistics_binary_open( return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); } -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ( *hHrtfStatistics )->average_energy_l = NULL; ( *hHrtfStatistics )->average_energy_r = NULL; ( *hHrtfStatistics )->inter_aural_coherence = NULL; @@ -280,7 +279,6 @@ ivas_error ivas_HRTF_statistics_binary_open( break; } ( *hHrtfStatistics )->fromROM = TRUE; -#endif return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 98dd6f3dda..544c23d5f0 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1358,9 +1358,9 @@ typedef struct ivas_hrtfs_parambin_struct #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES typedef struct ivas_hrtfs_statistics_struct { - const float *average_energy_l; - const float *average_energy_r; - const float *inter_aural_coherence; + float *average_energy_l; + float *average_energy_r; + float *inter_aural_coherence; int16_t fromROM; /* Flag that indicates that the pointers point to tables in ROM (controls init/dealloc).*/ } HRTFS_STATISTICS, *HRTFS_STATISTICS_HANDLE; #endif diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 357938f847..b37a93ffc7 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -591,10 +591,6 @@ static ivas_error load_reverb_from_binary( int16_t lr_iac_len; #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - float *average_energy_l_dyn; - float *average_energy_r_dyn; - float *inter_aural_coherence_dyn; - if ( hHrtfStatistics == NULL ) #else if ( HrFiltSet_p == NULL ) @@ -665,20 +661,18 @@ static ivas_error load_reverb_from_binary( if ( is_reverb ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - average_energy_l_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - average_energy_r_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); - inter_aural_coherence_dyn = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->average_energy_l = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->average_energy_r = (float *) malloc( lr_iac_len * sizeof( float ) ); + hHrtfStatistics->inter_aural_coherence = (float *) malloc( lr_iac_len * sizeof( float ) ); - if ( average_energy_l_dyn == NULL || average_energy_r_dyn == NULL || inter_aural_coherence_dyn == NULL ) + if ( hHrtfStatistics->average_energy_l == NULL || hHrtfStatistics->average_energy_r == NULL || hHrtfStatistics->inter_aural_coherence == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } - fread( average_energy_l_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - fread( average_energy_r_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - fread( inter_aural_coherence_dyn, sizeof( const float ), lr_iac_len, f_hrtf ); - hHrtfStatistics->average_energy_l = (const float *) average_energy_l_dyn; - hHrtfStatistics->average_energy_r = (const float *) average_energy_r_dyn; - hHrtfStatistics->inter_aural_coherence = (const float *) inter_aural_coherence_dyn; + fread( hHrtfStatistics->average_energy_l, sizeof( const float ), lr_iac_len, f_hrtf ); + fread( hHrtfStatistics->average_energy_r, sizeof( const float ), lr_iac_len, f_hrtf ); + fread( hHrtfStatistics->inter_aural_coherence, sizeof( const float ), lr_iac_len, f_hrtf ); + hHrtfStatistics->fromROM = FALSE; #else /* left/right energy and interaural coherence for late reverb */ @@ -736,7 +730,7 @@ ivas_error load_reverb_binary( IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStatistics, /* i/o: HRTF staistics handle */ int_fast32_t sampleRate, #else - IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ + IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ #endif const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */ ) @@ -2249,4 +2243,25 @@ ivas_error destroy_parambin_hrtf( return IVAS_ERR_OK; } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +/*---------------------------------------------------------------------* + * destroy_hrtf_statistics() + * + * Destroy the HRTF statistics set. + *---------------------------------------------------------------------*/ + +ivas_error destroy_hrtf_statistics( + IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStatistics /* i/o: HRTF statistics handle */ +) +{ + if ( hHrtfStatistics != NULL && ( *hHrtfStatistics )->fromROM == TRUE ) + { + free( ( *hHrtfStatistics )->average_energy_l ); + free( ( *hHrtfStatistics )->average_energy_r ); + free( ( *hHrtfStatistics )->inter_aural_coherence ); + } + return IVAS_ERR_OK; +} +#endif + #endif diff --git a/lib_util/hrtf_file_reader.h b/lib_util/hrtf_file_reader.h index a08f9431f4..02bc0b572f 100644 --- a/lib_util/hrtf_file_reader.h +++ b/lib_util/hrtf_file_reader.h @@ -198,6 +198,17 @@ ivas_error destroy_parambin_hrtf( ivas_error destroy_td_hrtf( IVAS_DEC_HRTF_HANDLE *hHRTF /* i/o: HRTF handle */ ); + +/*---------------------------------------------------------------------* + * destroy_hrtf_statistics() + * + * free memory allocated for HRTF statistics binary data + *---------------------------------------------------------------------*/ + +ivas_error destroy_hrtf_statistics( + IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStatistics /* i/o: HRTF statistics handle */ +); + #else /*---------------------------------------------------------------------* * dealloc_HRTF_binary() -- GitLab From 0eb861f00368ce417cbe4ecb7225f55553928058 Mon Sep 17 00:00:00 2001 From: Jan Brouwer Date: Wed, 6 Dec 2023 14:56:03 +0100 Subject: [PATCH 11/52] moved load hrtf statistics from binary to after load hrtfs for all renderers in decoder.c and renderer.c; added calls to destroy_hrtf_statistics() --- apps/decoder.c | 41 +++++++++++++++++++++++++++++-------- apps/renderer.c | 33 +++++++++++++++++++++-------- lib_util/hrtf_file_reader.c | 3 ++- 3 files changed, 58 insertions(+), 19 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 8126fe83c9..7c63f9045d 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -806,18 +806,10 @@ int main( } #endif +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES #ifdef NONBE_FIX_BINARY_BINAURAL_READING -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfStatistics ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nIVAS_DEC_GetHrtfHandle failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); - goto cleanup; - } - if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfStatistics, arg.output_Fs, hrtfReader ) ) != IVAS_ERR_OK ) -#else if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfReader ) ) != IVAS_ERR_OK ) -#endif { if ( error != IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA ) { @@ -833,6 +825,7 @@ int main( } #endif #endif +#endif #ifndef NONBE_FIX_BINARY_BINAURAL_READING IVAS_DEC_HRTF_CREND_HANDLE *hSetOfHRTF = NULL; @@ -926,6 +919,36 @@ int main( fprintf( stderr, "\nError in loading HRTF binary file %s for parametric binauralizer \n\n", arg.hrtfFileName ); goto cleanup; } +#endif + +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES +#ifdef NONBE_FIX_BINARY_BINAURAL_READING + if ( ( error = IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfStatistics ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_GetHrtfHandle failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + if ( ( error = load_reverb_binary( *hHrtfStatistics, arg.output_Fs, hrtfReader ) ) != IVAS_ERR_OK ) + { + if ( error != IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA ) + { + fprintf( stderr, "\nError in loading HRTF binary file %s \n\n", arg.hrtfFileName ); + goto cleanup; + } + else + { + destroy_hrtf_statistics( hHrtfStatistics ); + } + } +#else + if ( ( hHrtfTD != NULL ) && ( error = load_reverb_binary( hHrtfTD, hrtfReader ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError in loading HRTF binary file %s \n\n", arg.hrtfFileName ); + goto cleanup; + } +#endif +#endif #endif } diff --git a/apps/renderer.c b/apps/renderer.c index b178bcc827..e36b7ce74c 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1111,17 +1111,9 @@ int main( } } +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = IVAS_REND_GetHrtfStatisticsHandle( hIvasRend, &hHrtfStatistics ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nIVAS_REND_GetHrtfStatisticsHandle failed\n\n" ); - goto cleanup; - } - if ( ( hHrtfStatistics != NULL ) && ( error = load_reverb_binary( *hHrtfStatistics, args.sampleRate, hrtfFileReader ) ) != IVAS_ERR_OK ) -#else if ( ( hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfFileReader ) ) != IVAS_ERR_OK ) -#endif { if ( error != IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA ) { @@ -1129,6 +1121,7 @@ int main( goto cleanup; } } +#endif #endif if ( ( error = IVAS_REND_GetHrtfCRendHandle( hIvasRend, &hSetOfHRTF ) ) != IVAS_ERR_OK ) @@ -1187,6 +1180,28 @@ int main( destroy_parambin_hrtf( hHrtfParambin ); } } + +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES + if ( ( error = IVAS_REND_GetHrtfStatisticsHandle( hIvasRend, &hHrtfStatistics ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_REND_GetHrtfStatisticsHandle failed\n\n" ); + goto cleanup; + } + if ( ( error = load_reverb_binary( *hHrtfStatistics, args.sampleRate, hrtfFileReader ) ) != IVAS_ERR_OK ) + { + if ( error != IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA ) + { + fprintf( stderr, "\nError in loading HRTF binary file %s \n\n", args.customHrtfFilePath ); + goto cleanup; + } + else + { + destroy_hrtf_statistics( hHrtfStatistics ); + } + } +#endif +#endif } hrtfFileReader_close( &hrtfFileReader ); diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 71d3e1f749..2121081baf 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -2262,12 +2262,13 @@ ivas_error destroy_hrtf_statistics( IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStatistics /* i/o: HRTF statistics handle */ ) { - if ( hHrtfStatistics != NULL && ( *hHrtfStatistics )->fromROM == TRUE ) + if ( hHrtfStatistics != NULL && ( *hHrtfStatistics )->fromROM == FALSE ) { free( ( *hHrtfStatistics )->average_energy_l ); free( ( *hHrtfStatistics )->average_energy_r ); free( ( *hHrtfStatistics )->inter_aural_coherence ); } + ivas_HRTF_statistics_binary_close( hHrtfStatistics ); return IVAS_ERR_OK; } #endif -- GitLab From 7dd47044b91e97d6dccd0017bcd30c7dd5035ee8 Mon Sep 17 00:00:00 2001 From: Jan Brouwer Date: Wed, 6 Dec 2023 17:09:03 +0100 Subject: [PATCH 12/52] added destroy_hrtf_statistics() in cleanup sections of decoder.c and renderer.c --- apps/decoder.c | 4 ++++ apps/renderer.c | 3 +++ 2 files changed, 7 insertions(+) diff --git a/apps/decoder.c b/apps/decoder.c index 7c63f9045d..f0c08db074 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -1048,6 +1048,10 @@ cleanup: destroy_SetOfHRTF( hSetOfHRTF ); #else destroy_SetOfHRTF( *hSetOfHRTF ); +#endif +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfStatistics ); + destroy_hrtf_statistics( hHrtfStatistics ); #endif } diff --git a/apps/renderer.c b/apps/renderer.c index e36b7ce74c..49f588fe35 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -2332,6 +2332,9 @@ cleanup: #ifdef NONBE_FIX_BINARY_BINAURAL_READING destroy_td_hrtf( hHrtfTD ); destroy_SetOfHRTF( hSetOfHRTF ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + destroy_hrtf_statistics( hHrtfStatistics ); +#endif #endif IVAS_REND_Close( &hIvasRend ); IsmPositionProvider_close( positionProvider ); -- GitLab From 917a3390d8523a2443f88341e385e91436979d68 Mon Sep 17 00:00:00 2001 From: Jan Brouwer Date: Thu, 7 Dec 2023 11:37:06 +0100 Subject: [PATCH 13/52] pass hrtf statistics to ivas_binaural_reverb_open*() functions --- lib_dec/ivas_binRenderer_internal.c | 4 +++ lib_rend/ivas_dirac_dec_binaural_functions.c | 4 +++ lib_rend/ivas_prot_rend.h | 8 +++++ lib_rend/ivas_reverb.c | 32 ++++++++++++++++---- lib_rend/lib_rend.c | 13 ++++++++ 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index ae8ea8cd8c..5ed0a7735b 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1231,7 +1231,11 @@ ivas_error ivas_binRenderer_open( /* Allocate memories needed for reverb module */ if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_binaural_reverb_open_fastconv( &( hBinRenderer->hReverb ), st_ivas->hHrtfStatistics, hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hIntSetup.output_config, st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_binaural_reverb_open_fastconv( &( hBinRenderer->hReverb ), hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hIntSetup.output_config, st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) +#endif { return error; } diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index d98c9fa3d0..c76ed646d3 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -240,7 +240,11 @@ ivas_error ivas_dirac_dec_init_binaural_data( #endif { /* Todo Philips: Room acoustics should be passed here once the underlying part works. Probably enough to pick it from st_ivas but you know best. */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, st_ivas->hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) +#endif { return error; } diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 2fc71ddcf5..67b48f50b9 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -993,6 +993,10 @@ ivas_error ivas_rend_crendProcessSubframe( ivas_error ivas_binaural_reverb_open_fastconv( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ +#else +#endif const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ @@ -1003,6 +1007,10 @@ ivas_error ivas_binaural_reverb_open_fastconv( ivas_error ivas_binaural_reverb_open_parambin( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ +#else +#endif const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index b0654611a9..1a151061f6 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1803,12 +1803,16 @@ void ivas_binaural_reverb_processSubframe( static ivas_error ivas_binaural_reverb_open( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ - const int16_t numBins, /* i : number of CLDFB bins */ - const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ - const int32_t sampling_rate, /* i : sampling rate */ - const float *revTimes, /* i : reverberation times T60 for each CLDFB bin in seconds */ - const float *revEnes, /* i : spectrum for reverberated sound at each CLDFB bin */ - const int16_t preDelay /* i : reverb pre-delay in CLDFB slots */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ +#else +#endif + const int16_t numBins, /* i : number of CLDFB bins */ + const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ + const int32_t sampling_rate, /* i : sampling rate */ + const float *revTimes, /* i : reverberation times T60 for each CLDFB bin in seconds */ + const float *revEnes, /* i : spectrum for reverberated sound at each CLDFB bin */ + const int16_t preDelay /* i : reverb pre-delay in CLDFB slots */ ) { int16_t bin, chIdx, k, len; @@ -1912,6 +1916,10 @@ static ivas_error ivas_binaural_reverb_open( ivas_error ivas_binaural_reverb_open_fastconv( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ +#else +#endif const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ @@ -1946,7 +1954,11 @@ ivas_error ivas_binaural_reverb_open_fastconv( preDelay = 10; } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + error = ivas_binaural_reverb_open( hReverbPr, hHrtfStatistics, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); +#else error = ivas_binaural_reverb_open( hReverbPr, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); +#endif return error; } @@ -1960,6 +1972,10 @@ ivas_error ivas_binaural_reverb_open_fastconv( ivas_error ivas_binaural_reverb_open_parambin( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ +#else +#endif const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ @@ -1994,7 +2010,11 @@ ivas_error ivas_binaural_reverb_open_parambin( preDelay = 10; } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + error = ivas_binaural_reverb_open( hReverbPr, hHrtfStatistics, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); +#else error = ivas_binaural_reverb_open( hReverbPr, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); +#endif return error; } diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index fe05f3a83f..6428a222ba 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -9348,7 +9348,12 @@ static ivas_error ivas_masa_ext_rend_dirac_rend_init( } static ivas_error ivas_masa_ext_rend_parambin_init( +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + input_masa *inputMasa, /* i/o: MASA external renderer structure */ + HRTFS_STATISTICS_HANDLE hHrtfStatistics /* i: HRTF statistics */ +#else input_masa *inputMasa /* i/o: MASA external renderer structure */ +#endif ) { DIRAC_DEC_BIN_HANDLE hDiracDecBin; @@ -9449,7 +9454,11 @@ static ivas_error ivas_masa_ext_rend_parambin_init( #endif { /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -9641,7 +9650,11 @@ static ivas_error initMasaExtRenderer( } } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_masa_ext_rend_parambin_init( inputMasa, hrtfs->hHrtfStatistics ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_masa_ext_rend_parambin_init( inputMasa ) ) != IVAS_ERR_OK ) +#endif { return error; } -- GitLab From 56448d0c6f25011a7cc5da437af08ffb0d3ef8fd Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac <31622564+sbsarac@users.noreply.github.com> Date: Fri, 8 Dec 2023 14:17:59 +0100 Subject: [PATCH 14/52] Add ivas_hrtf_statistics_open() --- lib_dec/ivas_init_dec.c | 7 ++++ lib_rend/ivas_hrtf.c | 79 +++++++++++++++++++++++++++------------ lib_rend/ivas_prot_rend.h | 4 ++ 3 files changed, 66 insertions(+), 24 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 7206ddb5ed..db9dba27cc 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1995,6 +1995,13 @@ ivas_error ivas_init_decoder( * Allocate and initialize rendering handles *--------------------------------------------------------------------*/ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 477ef74d64..71aa69954d 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -256,30 +256,6 @@ ivas_error ivas_HRTF_statistics_binary_open( return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); } - ( *hHrtfStatistics )->average_energy_l = NULL; - ( *hHrtfStatistics )->average_energy_r = NULL; - ( *hHrtfStatistics )->inter_aural_coherence = NULL; - - switch ( sampleRate ) - { - case 48000: - ( *hHrtfStatistics )->average_energy_l = defaultHRIR_left_avg_power_48kHz; - ( *hHrtfStatistics )->average_energy_r = defaultHRIR_right_avg_power_48kHz; - ( *hHrtfStatistics )->inter_aural_coherence = defaultHRIR_coherence_48kHz; - break; - case 32000: - ( *hHrtfStatistics )->average_energy_l = defaultHRIR_left_avg_power_32kHz; - ( *hHrtfStatistics )->average_energy_r = defaultHRIR_right_avg_power_32kHz; - ( *hHrtfStatistics )->inter_aural_coherence = defaultHRIR_coherence_32kHz; - break; - case 16000: - ( *hHrtfStatistics )->average_energy_l = defaultHRIR_left_avg_power_16kHz; - ( *hHrtfStatistics )->average_energy_r = defaultHRIR_right_avg_power_16kHz; - ( *hHrtfStatistics )->inter_aural_coherence = defaultHRIR_coherence_16kHz; - break; - } - ( *hHrtfStatistics )->fromROM = TRUE; - return IVAS_ERR_OK; } @@ -303,4 +279,59 @@ void ivas_HRTF_statistics_binary_close( return; } + +/*-----------------------------------------------------------------------* + * ivas_hrtf_statistics_open() + * + * Allocate HRTF handle for statistics handler + *-----------------------------------------------------------------------*/ + +ivas_error ivas_hrtf_statistics_open( + HRTFS_STATISTICS_HANDLE *hHrtfStatistics, + int32_t sampleRate ) +{ + if ( hHrtfStatistics != NULL && *hHrtfStatistics != NULL ) + { + /* Tables already loaded from file */ + return IVAS_ERR_OK; + } + else + { + /* Initialise tables from ROM */ + HRTFS_STATISTICS *HrtfStatistics; + + if ( ( HrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); + } + + HrtfStatistics->average_energy_l = NULL; + HrtfStatistics->average_energy_r = NULL; + HrtfStatistics->inter_aural_coherence = NULL; + + switch ( sampleRate ) + { + case 48000: + HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_48kHz; + HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_48kHz; + HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_48kHz; + break; + case 32000: + HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_32kHz; + HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_32kHz; + HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_32kHz; + break; + case 16000: + HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_16kHz; + HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_16kHz; + HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_16kHz; + break; + } + HrtfStatistics->fromROM = TRUE; + + *hHrtfStatistics = HrtfStatistics; + } + + return IVAS_ERR_OK; +} #endif \ No newline at end of file diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 67b48f50b9..0d7f4fca49 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -626,6 +626,10 @@ ivas_error ivas_HRTF_statistics_binary_open( void ivas_HRTF_statistics_binary_close( HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */ ); + +ivas_error ivas_hrtf_statistics_open( + HRTFS_STATISTICS_HANDLE *hHrtfStatistics, /* i/o: HRTF statistics structure */ + int32_t sampleRate ); /* i : Sample rate */ #endif ivas_error ivas_HRTF_CRend_binary_open( -- GitLab From f2efa3c5fd55714f8a8226bd0612fca50d36a4b0 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac <31622564+sbsarac@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:31:53 +0100 Subject: [PATCH 15/52] Update ivas_hrtf_statistics_open function and its call --- lib_dec/ivas_init_dec.c | 17 ++++++----- lib_rend/ivas_hrtf.c | 67 ++++++++++++++++++++--------------------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index db9dba27cc..c2e4bdc5d2 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1995,13 +1995,6 @@ ivas_error ivas_init_decoder( * Allocate and initialize rendering handles *--------------------------------------------------------------------*/ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { @@ -2191,6 +2184,16 @@ ivas_error ivas_init_decoder( } } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + { + if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } +#endif + /*-----------------------------------------------------------------* * LFE handles for rendering after rendering to adjust LFE delay to binaural filter delay *-----------------------------------------------------------------*/ diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 71aa69954d..9c19c97786 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -295,43 +295,42 @@ ivas_error ivas_hrtf_statistics_open( /* Tables already loaded from file */ return IVAS_ERR_OK; } - else + + /* Initialise tables from ROM */ + HRTFS_STATISTICS *HrtfStatistics; + + if ( ( HrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ) ) == NULL ) { - /* Initialise tables from ROM */ - HRTFS_STATISTICS *HrtfStatistics; - - if ( ( HrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); - } - - HrtfStatistics->average_energy_l = NULL; - HrtfStatistics->average_energy_r = NULL; - HrtfStatistics->inter_aural_coherence = NULL; - - switch ( sampleRate ) - { - case 48000: - HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_48kHz; - HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_48kHz; - HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_48kHz; - break; - case 32000: - HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_32kHz; - HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_32kHz; - HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_32kHz; - break; - case 16000: - HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_16kHz; - HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_16kHz; - HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_16kHz; - break; - } - HrtfStatistics->fromROM = TRUE; - - *hHrtfStatistics = HrtfStatistics; + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); } + HrtfStatistics->average_energy_l = NULL; + HrtfStatistics->average_energy_r = NULL; + HrtfStatistics->inter_aural_coherence = NULL; + + switch ( sampleRate ) + { + case 48000: + HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_48kHz; + HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_48kHz; + HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_48kHz; + break; + case 32000: + HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_32kHz; + HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_32kHz; + HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_32kHz; + break; + case 16000: + HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_16kHz; + HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_16kHz; + HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_16kHz; + break; + } + HrtfStatistics->fromROM = TRUE; + + *hHrtfStatistics = HrtfStatistics; + + return IVAS_ERR_OK; } #endif \ No newline at end of file -- GitLab From f5982e62c8b6faed5335f24717ebc19b2677704c Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Fri, 8 Dec 2023 16:51:39 +0100 Subject: [PATCH 16/52] HRTF statistics call moved in the decoder initialization --- lib_dec/ivas_init_dec.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index c2e4bdc5d2..6edf796fd1 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2030,6 +2030,11 @@ ivas_error ivas_init_decoder( if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hHrtfStatistics, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hDecoderConfig->output_config, NULL, st_ivas->hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) @@ -2184,16 +2189,6 @@ ivas_error ivas_init_decoder( } } -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } -#endif - /*-----------------------------------------------------------------* * LFE handles for rendering after rendering to adjust LFE delay to binaural filter delay *-----------------------------------------------------------------*/ -- GitLab From 84c28927232396580fa6e11a722e5ea1071aba49 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Fri, 8 Dec 2023 16:53:23 +0100 Subject: [PATCH 17/52] Minor cleanup --- lib_rend/ivas_hrtf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 9c19c97786..fbd002f742 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -290,6 +290,8 @@ ivas_error ivas_hrtf_statistics_open( HRTFS_STATISTICS_HANDLE *hHrtfStatistics, int32_t sampleRate ) { + HRTFS_STATISTICS *HrtfStatistics; + if ( hHrtfStatistics != NULL && *hHrtfStatistics != NULL ) { /* Tables already loaded from file */ @@ -297,8 +299,6 @@ ivas_error ivas_hrtf_statistics_open( } /* Initialise tables from ROM */ - HRTFS_STATISTICS *HrtfStatistics; - if ( ( HrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for statistics HRTF tables!" ); -- GitLab From 6116fa814d4452a8aac4aa93fafc468d838c2ae0 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Fri, 8 Dec 2023 17:05:13 +0100 Subject: [PATCH 18/52] Reverting to call HRTF statistics initialization before any other HRTF initialization calls --- lib_dec/ivas_init_dec.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 6edf796fd1..6596772c6d 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1995,6 +1995,16 @@ ivas_error ivas_init_decoder( * Allocate and initialize rendering handles *--------------------------------------------------------------------*/ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + { + if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } +#endif + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { @@ -2030,11 +2040,6 @@ ivas_error ivas_init_decoder( if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hHrtfStatistics, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hDecoderConfig->output_config, NULL, st_ivas->hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) -- GitLab From 3f0deb7c4dccb6ef73dbc180877a9638f2b651f7 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac <31622564+sbsarac@users.noreply.github.com> Date: Fri, 8 Dec 2023 17:23:27 +0100 Subject: [PATCH 19/52] Remove sampleRate from ivas_HRTF_statistics_binary_open --- lib_dec/ivas_init_dec.c | 2 +- lib_rend/ivas_hrtf.c | 3 +-- lib_rend/ivas_prot_rend.h | 3 +-- lib_rend/lib_rend.c | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 6596772c6d..713f87b47e 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1105,7 +1105,7 @@ ivas_error ivas_init_decoder_front( } #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_HRTF_statistics_binary_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_HRTF_statistics_binary_open( &st_ivas->hHrtfStatistics ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index fbd002f742..4e32a12806 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -247,8 +247,7 @@ void ivas_HRTF_parambin_binary_close( *-----------------------------------------------------------------------*/ ivas_error ivas_HRTF_statistics_binary_open( - HRTFS_STATISTICS **hHrtfStatistics, - int32_t sampleRate ) + HRTFS_STATISTICS **hHrtfStatistics ) { *hHrtfStatistics = (HRTFS_STATISTICS *) malloc( sizeof( HRTFS_STATISTICS ) ); if ( *hHrtfStatistics == NULL ) diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 0d7f4fca49..28a1afa693 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -619,8 +619,7 @@ void ivas_HRTF_parambin_binary_close( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error ivas_HRTF_statistics_binary_open( - HRTFS_STATISTICS **hHrtfStatistics, - int32_t sampleRate + HRTFS_STATISTICS **hHrtfStatistics ); void ivas_HRTF_statistics_binary_close( diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 6428a222ba..80e07f8249 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -3474,7 +3474,7 @@ ivas_error IVAS_REND_Open( return error; } #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_HRTF_statistics_binary_open( &( hIvasRend->hHrtfs.hHrtfStatistics ), outputSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_HRTF_statistics_binary_open( &( hIvasRend->hHrtfs.hHrtfStatistics ) ) ) != IVAS_ERR_OK ) { return error; } -- GitLab From 376fd163c5a4d24f29307d02db42e5fa42415f2a Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Fri, 8 Dec 2023 17:39:27 +0100 Subject: [PATCH 20/52] HRTF statistics initialization condition update --- 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 6596772c6d..350fa2ae21 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1996,7 +1996,7 @@ ivas_error ivas_init_decoder( *--------------------------------------------------------------------*/ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) { -- GitLab From 35e4df9f9e9ebfac5b6790107967046eab06d12b Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac <31622564+sbsarac@users.noreply.github.com> Date: Mon, 11 Dec 2023 11:16:36 +0100 Subject: [PATCH 21/52] Add ivas_hrtf_statistics_open() call into renderer --- apps/renderer.c | 7 +++++++ lib_rend/lib_rend.c | 19 ++++++++++++++++++- lib_rend/lib_rend.h | 4 ++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/apps/renderer.c b/apps/renderer.c index 49f588fe35..4f116b3d3f 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1059,6 +1059,13 @@ int main( exit( -1 ); } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = IVAS_REND_InitHRTFStatisticsHandle( hIvasRend ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + #ifdef NONBE_FIX_BINARY_BINAURAL_READING if ( !isEmptyString( args.customHrtfFilePath ) ) { diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 80e07f8249..cd5fbb38e0 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -8985,6 +8985,23 @@ ivas_error IVAS_REND_GetHrtfStatisticsHandle( return IVAS_ERR_OK; } + +/*---------------------------------------------------------------------* + * IVAS_REND_InitHRTFStatisticsHandle( ) + * + * + *---------------------------------------------------------------------*/ +ivas_error IVAS_REND_InitHRTFStatisticsHandle( IVAS_REND_HANDLE hIvasRend ) +{ + ivas_error error; + + if ( ( error = ivas_hrtf_statistics_open( &( hIvasRend->hHrtfs.hHrtfStatistics ), hIvasRend->sampleRateOut ) ) != IVAS_ERR_OK ) + { + return error; + } + + return IVAS_ERR_OK; +} #endif static ivas_error ivas_masa_ext_rend_dirac_rend_init( @@ -9457,7 +9474,7 @@ static ivas_error ivas_masa_ext_rend_parambin_init( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) #else - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) #endif { return error; diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index 2824ad1fdc..6277fae082 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -227,6 +227,10 @@ ivas_error IVAS_REND_GetHrtfStatisticsHandle( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : HRTF statistics handle */ ); + +ivas_error IVAS_REND_InitHRTFStatisticsHandle( + IVAS_REND_HANDLE hIvasRend /* i/o: IVAS renderer handle */ +); #endif #endif -- GitLab From 0df3b3bbf0e0f7bccc7217eb2faff3fa91b8357f Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Mon, 11 Dec 2023 13:42:16 +0100 Subject: [PATCH 22/52] Cleanup --- apps/renderer.c | 7 ------- lib_dec/ivas_init_dec.c | 2 +- lib_rend/ivas_hrtf.c | 6 +++--- lib_rend/ivas_prot_rend.h | 2 +- lib_rend/lib_rend.c | 23 ++++++----------------- lib_rend/lib_rend.h | 5 +---- 6 files changed, 12 insertions(+), 33 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index 4f116b3d3f..49f588fe35 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1059,13 +1059,6 @@ int main( exit( -1 ); } -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = IVAS_REND_InitHRTFStatisticsHandle( hIvasRend ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - #ifdef NONBE_FIX_BINARY_BINAURAL_READING if ( !isEmptyString( args.customHrtfFilePath ) ) { diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 32be7ebd38..3d3cd61c7c 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1998,7 +1998,7 @@ ivas_error ivas_init_decoder( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { - if ( ( error = ivas_hrtf_statistics_open( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_HRTF_statistics_init( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 4e32a12806..5d921e65db 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -280,12 +280,12 @@ void ivas_HRTF_statistics_binary_close( } /*-----------------------------------------------------------------------* - * ivas_hrtf_statistics_open() + * ivas_HRTF_statistics_init() * - * Allocate HRTF handle for statistics handler + * Allocates HRTF statistics handle and initializes from ROM *-----------------------------------------------------------------------*/ -ivas_error ivas_hrtf_statistics_open( +ivas_error ivas_HRTF_statistics_init( HRTFS_STATISTICS_HANDLE *hHrtfStatistics, int32_t sampleRate ) { diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 28a1afa693..a8e37b8675 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -626,7 +626,7 @@ void ivas_HRTF_statistics_binary_close( HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */ ); -ivas_error ivas_hrtf_statistics_open( +ivas_error ivas_HRTF_statistics_init( HRTFS_STATISTICS_HANDLE *hHrtfStatistics, /* i/o: HRTF statistics structure */ int32_t sampleRate ); /* i : Sample rate */ #endif diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index cd5fbb38e0..e25e32e717 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -3480,6 +3480,12 @@ ivas_error IVAS_REND_Open( } #endif } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_HRTF_statistics_init( &( hIvasRend->hHrtfs.hHrtfStatistics ), hIvasRend->sampleRateOut ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif #endif return IVAS_ERR_OK; @@ -8985,23 +8991,6 @@ ivas_error IVAS_REND_GetHrtfStatisticsHandle( return IVAS_ERR_OK; } - -/*---------------------------------------------------------------------* - * IVAS_REND_InitHRTFStatisticsHandle( ) - * - * - *---------------------------------------------------------------------*/ -ivas_error IVAS_REND_InitHRTFStatisticsHandle( IVAS_REND_HANDLE hIvasRend ) -{ - ivas_error error; - - if ( ( error = ivas_hrtf_statistics_open( &( hIvasRend->hHrtfs.hHrtfStatistics ), hIvasRend->sampleRateOut ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} #endif static ivas_error ivas_masa_ext_rend_dirac_rend_init( diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index 6277fae082..1a4a6abc08 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -222,15 +222,12 @@ ivas_error IVAS_REND_GetHrtfParamBinHandle( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ IVAS_DEC_HRTF_PARAMBIN_HANDLE **hHrtfParambin /* o : Parametric binauralizer HRTF handle */ ); + #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error IVAS_REND_GetHrtfStatisticsHandle( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ IVAS_DEC_HRTF_STATISTICS_HANDLE **hHrtfStatistics /* o : HRTF statistics handle */ ); - -ivas_error IVAS_REND_InitHRTFStatisticsHandle( - IVAS_REND_HANDLE hIvasRend /* i/o: IVAS renderer handle */ -); #endif #endif -- GitLab From d91367bda596a804d628a9a71fc23edf0f149d91 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Mon, 11 Dec 2023 14:31:13 +0100 Subject: [PATCH 23/52] Use precomputed energy tables in FastConv --- lib_dec/ivas_binRenderer_internal.c | 2 +- lib_rend/ivas_prot_rend.h | 11 ++++ lib_rend/ivas_reverb.c | 36 ++++++------- lib_rend/ivas_reverb_utils.c | 83 +++++++++++++++++++++++++++++ 4 files changed, 110 insertions(+), 22 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 5ed0a7735b..6cd26148b5 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1232,7 +1232,7 @@ ivas_error ivas_binRenderer_open( if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_binaural_reverb_open_fastconv( &( hBinRenderer->hReverb ), st_ivas->hHrtfStatistics, hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hIntSetup.output_config, st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binaural_reverb_open_fastconv( &( hBinRenderer->hReverb ), st_ivas->hHrtfStatistics, hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_binaural_reverb_open_fastconv( &( hBinRenderer->hReverb ), hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hIntSetup.output_config, st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) #endif diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 28a1afa693..b7e872069f 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1003,7 +1003,9 @@ ivas_error ivas_binaural_reverb_open_fastconv( const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ +#endif const int32_t sampling_rate, /* i : sampling rate */ const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ ); @@ -1200,6 +1202,14 @@ void ivas_reverb_calc_color_levels( float *pTarget_color_R ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +ivas_error ivas_reverb_prepare_cldfb_params( + IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, + const int32_t output_Fs, + float *pOutput_t60, + float *pOutput_ene ); +#else ivas_error ivas_reverb_prepare_cldfb_params( IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, const HRTFS_FASTCONV_HANDLE hHrtfFastConv, @@ -1208,6 +1218,7 @@ ivas_error ivas_reverb_prepare_cldfb_params( const int32_t output_Fs, float *pOutput_t60, float *pOutput_ene ); +#endif void ivas_reverb_interpolate_acoustic_data( const int16_t input_table_size, diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 1a151061f6..a62d59d735 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1803,16 +1803,12 @@ void ivas_binaural_reverb_processSubframe( static ivas_error ivas_binaural_reverb_open( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ -#else -#endif - const int16_t numBins, /* i : number of CLDFB bins */ - const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ - const int32_t sampling_rate, /* i : sampling rate */ - const float *revTimes, /* i : reverberation times T60 for each CLDFB bin in seconds */ - const float *revEnes, /* i : spectrum for reverberated sound at each CLDFB bin */ - const int16_t preDelay /* i : reverb pre-delay in CLDFB slots */ + const int16_t numBins, /* i : number of CLDFB bins */ + const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ + const int32_t sampling_rate, /* i : sampling rate */ + const float *revTimes, /* i : reverberation times T60 for each CLDFB bin in seconds */ + const float *revEnes, /* i : spectrum for reverberated sound at each CLDFB bin */ + const int16_t preDelay /* i : reverb pre-delay in CLDFB slots */ ) { int16_t bin, chIdx, k, len; @@ -1923,9 +1919,11 @@ ivas_error ivas_binaural_reverb_open_fastconv( const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ - const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ - const int32_t sampling_rate, /* i : sampling rate */ - const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ +#endif + const int32_t sampling_rate, /* i : sampling rate */ + const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ ) { ivas_error error; @@ -1941,7 +1939,11 @@ ivas_error ivas_binaural_reverb_open_fastconv( { revTimes = t60; revEne = ene; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_reverb_prepare_cldfb_params( roomAcoustics, hHrtfStatistics, sampling_rate, t60, ene ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_reverb_prepare_cldfb_params( roomAcoustics, hHrtfFastConv, internal_config, false, sampling_rate, t60, ene ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -1954,11 +1956,7 @@ ivas_error ivas_binaural_reverb_open_fastconv( preDelay = 10; } -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - error = ivas_binaural_reverb_open( hReverbPr, hHrtfStatistics, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); -#else error = ivas_binaural_reverb_open( hReverbPr, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); -#endif return error; } @@ -2010,11 +2008,7 @@ ivas_error ivas_binaural_reverb_open_parambin( preDelay = 10; } -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - error = ivas_binaural_reverb_open( hReverbPr, hHrtfStatistics, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); -#else error = ivas_binaural_reverb_open( hReverbPr, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); -#endif return error; } diff --git a/lib_rend/ivas_reverb_utils.c b/lib_rend/ivas_reverb_utils.c index 23d7592ce6..395873124d 100644 --- a/lib_rend/ivas_reverb_utils.c +++ b/lib_rend/ivas_reverb_utils.c @@ -67,9 +67,63 @@ typedef struct cldfb_convolver_state float filter_states_im[BINAURAL_CONVBANDS][CLDFB_CONVOLVER_NTAPS_MAX]; } cldfb_convolver_state; +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +static void ivas_reverb_set_energies( const float *avg_pwr_l, const float *avg_pwr_r, const int32_t sampling_rate, float *avg_pwr_l_out, float *avg_pwr_r_out ); +#else static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const AUDIO_CONFIG input_audio_config, const int16_t use_brir, const int32_t sampling_rate, float *avg_pwr_left, float *avg_pwr_right ); +#endif + +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_prepare_cldfb_params() + * + * Prepares reverb parameters for CLDFB-based reverberator + *-----------------------------------------------------------------------------------------*/ + +ivas_error ivas_reverb_prepare_cldfb_params( + IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, + const int32_t output_Fs, + float *pOutput_t60, + float *pOutput_ene ) +{ + int16_t idx; + float fc[CLDFB_NO_CHANNELS_MAX]; + float avg_pwr_left[CLDFB_NO_CHANNELS_MAX]; + float avg_pwr_right[CLDFB_NO_CHANNELS_MAX]; + float delay_diff, ln_1e6_inverted, exp_argument; + const float dist = DEFAULT_SRC_DIST; + const float dmx_gain_2 = 4.0f * EVS_PI * dist * dist / 0.001f; + + for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + fc[idx] = ( (float) idx + 0.5f ) * ( (float) MAX_SAMPLING_RATE / (float) ( 2 * CLDFB_NO_CHANNELS_MAX ) ); + } + + ivas_reverb_interpolate_acoustic_data( pInput_params->nBands, pInput_params->pFc_input, pInput_params->pAcoustic_rt60, pInput_params->pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX, fc, pOutput_t60, pOutput_ene ); + + /* adjust DSR for the delay difference */ + delay_diff = pInput_params->inputPreDelay - pInput_params->acousticPreDelay; + ln_1e6_inverted = 1.0f / logf( 1e06f ); + for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + exp_argument = delay_diff / ( pOutput_t60[idx] * ln_1e6_inverted ); + /* Limit exponent to approx +/-100 dB in case of incoherent value of delay_diff, to prevent overflow */ + exp_argument = min( exp_argument, 23.0f ); + exp_argument = max( exp_argument, -23.0f ); + pOutput_ene[idx] *= expf( exp_argument ); + } + ivas_reverb_set_energies( hHrtfStatistics->average_energy_l, hHrtfStatistics->average_energy_r, output_Fs, avg_pwr_left, avg_pwr_right ); + for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) + { + pOutput_ene[idx] *= 0.5f * ( avg_pwr_left[idx] + avg_pwr_right[idx] ) * dmx_gain_2; + } + + return IVAS_ERR_OK; +} +#else /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_prepare_cldfb_params() * @@ -470,8 +524,36 @@ static ivas_error ivas_reverb_get_cldfb_hrtf_set_properties( return IVAS_ERR_OK; } +#endif + +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +/*-----------------------------------------------------------------------------------------* + * Function ivas_reverb_set_energies() + * + * Function gets the precalculated left/right energies and computes average + * left/right energies to CLDFB bin center frequencies. + *-----------------------------------------------------------------------------------------*/ +static void ivas_reverb_set_energies( const float *avg_pwr_l, const float *avg_pwr_r, const int32_t sampling_rate, float *avg_pwr_l_out, float *avg_pwr_r_out ) +{ + int16_t freq_idx; + const int16_t cldfb_freq_halfstep = MAX_SAMPLING_RATE / ( 4 * CLDFB_NO_CHANNELS_MAX ); + float input_fc[FFT_SPECTRUM_SIZE]; + float output_fc[CLDFB_NO_CHANNELS_MAX]; + for ( freq_idx = 0; freq_idx < FFT_SPECTRUM_SIZE; freq_idx++ ) + { + input_fc[freq_idx] = freq_idx * ( 0.5f * sampling_rate / (float) ( FFT_SPECTRUM_SIZE - 1 ) ); + } + + for ( freq_idx = 0; freq_idx < CLDFB_NO_CHANNELS_MAX; freq_idx++ ) + { + output_fc[freq_idx] = (float) ( ( 2 * freq_idx + 1 ) * cldfb_freq_halfstep ); + } + + ivas_reverb_interpolate_acoustic_data( FFT_SPECTRUM_SIZE, input_fc, avg_pwr_l, avg_pwr_r, CLDFB_NO_CHANNELS_MAX, output_fc, avg_pwr_l_out, avg_pwr_r_out ); +} +#else /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_get_fastconv_hrtf_set_energies() * @@ -515,3 +597,4 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( return IVAS_ERR_OK; } +#endif \ No newline at end of file -- GitLab From b82eafdcebc171c38050ebb69d4da563c497ade3 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Mon, 11 Dec 2023 14:45:40 +0100 Subject: [PATCH 24/52] Replace #ifndef with #ifdef --- lib_rend/ivas_prot_rend.h | 3 ++- lib_rend/ivas_reverb.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 97a7cbd3f7..527d88c2ba 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1003,7 +1003,8 @@ ivas_error ivas_binaural_reverb_open_fastconv( const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ -#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#else const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ #endif const int32_t sampling_rate, /* i : sampling rate */ diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index a62d59d735..e07735775b 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1919,7 +1919,8 @@ ivas_error ivas_binaural_reverb_open_fastconv( const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ -#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +#else const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ #endif const int32_t sampling_rate, /* i : sampling rate */ -- GitLab From 7ba8dec49b36d245d0d56602cdf7b5b7fb44ef38 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Mon, 11 Dec 2023 15:41:11 +0100 Subject: [PATCH 25/52] Setting HRTF energies and preparation of CLDFB reverb parameters based on ROM/HRTF file data --- lib_rend/ivas_reverb_utils.c | 100 ++++++++++------------------------- 1 file changed, 29 insertions(+), 71 deletions(-) diff --git a/lib_rend/ivas_reverb_utils.c b/lib_rend/ivas_reverb_utils.c index 395873124d..5bc0474ff6 100644 --- a/lib_rend/ivas_reverb_utils.c +++ b/lib_rend/ivas_reverb_utils.c @@ -73,7 +73,6 @@ static void ivas_reverb_set_energies( const float *avg_pwr_l, const float *avg_p static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const AUDIO_CONFIG input_audio_config, const int16_t use_brir, const int32_t sampling_rate, float *avg_pwr_left, float *avg_pwr_right ); #endif -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_prepare_cldfb_params() * @@ -82,59 +81,13 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( const HRTFS_FASTCO ivas_error ivas_reverb_prepare_cldfb_params( IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES const HRTFS_STATISTICS_HANDLE hHrtfStatistics, - const int32_t output_Fs, - float *pOutput_t60, - float *pOutput_ene ) -{ - int16_t idx; - float fc[CLDFB_NO_CHANNELS_MAX]; - float avg_pwr_left[CLDFB_NO_CHANNELS_MAX]; - float avg_pwr_right[CLDFB_NO_CHANNELS_MAX]; - float delay_diff, ln_1e6_inverted, exp_argument; - const float dist = DEFAULT_SRC_DIST; - const float dmx_gain_2 = 4.0f * EVS_PI * dist * dist / 0.001f; - - for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) - { - fc[idx] = ( (float) idx + 0.5f ) * ( (float) MAX_SAMPLING_RATE / (float) ( 2 * CLDFB_NO_CHANNELS_MAX ) ); - } - - ivas_reverb_interpolate_acoustic_data( pInput_params->nBands, pInput_params->pFc_input, pInput_params->pAcoustic_rt60, pInput_params->pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX, fc, pOutput_t60, pOutput_ene ); - - /* adjust DSR for the delay difference */ - delay_diff = pInput_params->inputPreDelay - pInput_params->acousticPreDelay; - ln_1e6_inverted = 1.0f / logf( 1e06f ); - for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) - { - exp_argument = delay_diff / ( pOutput_t60[idx] * ln_1e6_inverted ); - /* Limit exponent to approx +/-100 dB in case of incoherent value of delay_diff, to prevent overflow */ - exp_argument = min( exp_argument, 23.0f ); - exp_argument = max( exp_argument, -23.0f ); - pOutput_ene[idx] *= expf( exp_argument ); - } - - ivas_reverb_set_energies( hHrtfStatistics->average_energy_l, hHrtfStatistics->average_energy_r, output_Fs, avg_pwr_left, avg_pwr_right ); - - for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) - { - pOutput_ene[idx] *= 0.5f * ( avg_pwr_left[idx] + avg_pwr_right[idx] ) * dmx_gain_2; - } - - return IVAS_ERR_OK; -} #else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_prepare_cldfb_params() - * - * Prepares reverb parameters for CLDFB-based reverberator - *-----------------------------------------------------------------------------------------*/ - -ivas_error ivas_reverb_prepare_cldfb_params( - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const AUDIO_CONFIG input_audio_config, const int16_t use_brir, +#endif const int32_t output_Fs, float *pOutput_t60, float *pOutput_ene ) @@ -146,7 +99,9 @@ ivas_error ivas_reverb_prepare_cldfb_params( float delay_diff, ln_1e6_inverted, exp_argument; const float dist = DEFAULT_SRC_DIST; const float dmx_gain_2 = 4.0f * EVS_PI * dist * dist / 0.001f; +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error error; +#endif for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) { @@ -167,10 +122,14 @@ ivas_error ivas_reverb_prepare_cldfb_params( pOutput_ene[idx] *= expf( exp_argument ); } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + ivas_reverb_set_energies( hHrtfStatistics->average_energy_l, hHrtfStatistics->average_energy_r, output_Fs, avg_pwr_left, avg_pwr_right ); +#else if ( ( error = ivas_reverb_get_fastconv_hrtf_set_energies( hHrtfFastConv, input_audio_config, use_brir, output_Fs, avg_pwr_left, avg_pwr_right ) ) != IVAS_ERR_OK ) { return error; } +#endif for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) { @@ -180,7 +139,7 @@ ivas_error ivas_reverb_prepare_cldfb_params( return IVAS_ERR_OK; } - +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /*-----------------------------------------------------------------------------------------* * Function ivas_cldfb_convolver() * @@ -534,25 +493,9 @@ static ivas_error ivas_reverb_get_cldfb_hrtf_set_properties( * left/right energies to CLDFB bin center frequencies. *-----------------------------------------------------------------------------------------*/ -static void ivas_reverb_set_energies( const float *avg_pwr_l, const float *avg_pwr_r, const int32_t sampling_rate, float *avg_pwr_l_out, float *avg_pwr_r_out ) -{ - int16_t freq_idx; - const int16_t cldfb_freq_halfstep = MAX_SAMPLING_RATE / ( 4 * CLDFB_NO_CHANNELS_MAX ); - float input_fc[FFT_SPECTRUM_SIZE]; - float output_fc[CLDFB_NO_CHANNELS_MAX]; - - for ( freq_idx = 0; freq_idx < FFT_SPECTRUM_SIZE; freq_idx++ ) - { - input_fc[freq_idx] = freq_idx * ( 0.5f * sampling_rate / (float) ( FFT_SPECTRUM_SIZE - 1 ) ); - } - - for ( freq_idx = 0; freq_idx < CLDFB_NO_CHANNELS_MAX; freq_idx++ ) - { - output_fc[freq_idx] = (float) ( ( 2 * freq_idx + 1 ) * cldfb_freq_halfstep ); - } - - ivas_reverb_interpolate_acoustic_data( FFT_SPECTRUM_SIZE, input_fc, avg_pwr_l, avg_pwr_r, CLDFB_NO_CHANNELS_MAX, output_fc, avg_pwr_l_out, avg_pwr_r_out ); -} +static void ivas_reverb_set_energies( + const float *avg_pwr_l, + const float *avg_pwr_r, #else /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_get_fastconv_hrtf_set_energies() @@ -566,35 +509,50 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const AUDIO_CONFIG input_audio_config, const int16_t use_brir, +#endif const int32_t sampling_rate, float *avg_pwr_left, float *avg_pwr_right ) { int16_t freq_idx; const int16_t cldfb_freq_halfstep = MAX_SAMPLING_RATE / ( 4 * CLDFB_NO_CHANNELS_MAX ); +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES float avg_pwr_left_fft[FFT_SPECTRUM_SIZE]; float avg_pwr_right_fft[FFT_SPECTRUM_SIZE]; +#endif float input_fc[FFT_SPECTRUM_SIZE]; float output_fc[CLDFB_NO_CHANNELS_MAX]; +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error error; +#endif +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const int16_t avg_pwr_len = sampling_rate == 16000 ? LR_IAC_LENGTH_NR_FC_16KHZ : LR_IAC_LENGTH_NR_FC; + for ( freq_idx = 0; freq_idx < avg_pwr_len; freq_idx++ ) + { + input_fc[freq_idx] = freq_idx * ( 0.5f * sampling_rate / (float) ( avg_pwr_len - 1 ) ); + } +#else for ( freq_idx = 0; freq_idx < FFT_SPECTRUM_SIZE; freq_idx++ ) { input_fc[freq_idx] = freq_idx * ( 0.5f * sampling_rate / (float) ( FFT_SPECTRUM_SIZE - 1 ) ); } +#endif for ( freq_idx = 0; freq_idx < CLDFB_NO_CHANNELS_MAX; freq_idx++ ) { output_fc[freq_idx] = (float) ( ( 2 * freq_idx + 1 ) * cldfb_freq_halfstep ); } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + ivas_reverb_interpolate_acoustic_data( avg_pwr_len, input_fc, avg_pwr_l, avg_pwr_r, CLDFB_NO_CHANNELS_MAX, output_fc, avg_pwr_left, avg_pwr_right ); +#else if ( ( error = ivas_reverb_get_cldfb_hrtf_set_properties( input_audio_config, hHrtfFastConv, use_brir, sampling_rate, avg_pwr_left_fft, avg_pwr_right_fft ) ) != IVAS_ERR_OK ) { return error; } ivas_reverb_interpolate_acoustic_data( FFT_SPECTRUM_SIZE, input_fc, avg_pwr_left_fft, avg_pwr_right_fft, CLDFB_NO_CHANNELS_MAX, output_fc, avg_pwr_left, avg_pwr_right ); - return IVAS_ERR_OK; +#endif } -#endif \ No newline at end of file -- GitLab From 579f7dd572243e2d5b09c0fee2e1defb4055f80c Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Mon, 11 Dec 2023 16:54:53 +0100 Subject: [PATCH 26/52] Merging reverb open functions for FastConv and ParamBin --- lib_dec/ivas_binRenderer_internal.c | 2 +- lib_rend/ivas_dirac_dec_binaural_functions.c | 2 +- lib_rend/ivas_prot_rend.h | 21 ++++++++---- lib_rend/ivas_reverb.c | 35 ++++++++++++++------ lib_rend/ivas_reverb_utils.c | 3 +- lib_rend/lib_rend.c | 22 +++++++++--- 6 files changed, 61 insertions(+), 24 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 6cd26148b5..47ceff6887 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1232,7 +1232,7 @@ ivas_error ivas_binRenderer_open( if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_binaural_reverb_open_fastconv( &( hBinRenderer->hReverb ), st_ivas->hHrtfStatistics, hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binaural_reverb_init( &( hBinRenderer->hReverb ), st_ivas->hHrtfStatistics, hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv->fastconvReverberationTimes, st_ivas->hHrtfFastConv->fastconvReverberationEneCorrections ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_binaural_reverb_open_fastconv( &( hBinRenderer->hReverb ), hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hIntSetup.output_config, st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) #endif diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index c76ed646d3..d37de12966 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -241,7 +241,7 @@ ivas_error ivas_dirac_dec_init_binaural_data( { /* Todo Philips: Room acoustics should be passed here once the underlying part works. Probably enough to pick it from st_ivas but you know best. */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, st_ivas->hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, st_ivas->hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( st_ivas->hRenderConfig->roomAcoustics ), output_Fs, st_ivas->hHrtfParambin->parametricReverberationTimes, st_ivas->hHrtfParambin->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) #endif diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 527d88c2ba..836e872d7f 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -994,7 +994,11 @@ ivas_error ivas_rend_crendProcessSubframe( * Reverberator *----------------------------------------------------------------------------------*/ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +ivas_error ivas_binaural_reverb_init( +#else ivas_error ivas_binaural_reverb_open_fastconv( +#endif REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ @@ -1002,27 +1006,31 @@ ivas_error ivas_binaural_reverb_open_fastconv( #endif const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ #else + IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ #endif const int32_t sampling_rate, /* i : sampling rate */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const float *defaultTimes, /* i : default reverberation times */ + const float *defaultEne /* i : default reverberation energies */ +#else const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ +#endif ); +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error ivas_binaural_reverb_open_parambin( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ -#else -#endif const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ const int32_t sampling_rate, /* i : sampling rate */ const HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : Parametric binauralizer HRTF handle */ ); +#endif void ivas_binaural_reverb_close( REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */ @@ -1205,13 +1213,14 @@ void ivas_reverb_calc_color_levels( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error ivas_reverb_prepare_cldfb_params( - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, + const IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, const HRTFS_STATISTICS_HANDLE hHrtfStatistics, const int32_t output_Fs, float *pOutput_t60, float *pOutput_ene ); #else ivas_error ivas_reverb_prepare_cldfb_params( + IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const AUDIO_CONFIG input_audio_config, diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index e07735775b..9dbd60d643 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1903,14 +1903,22 @@ static ivas_error ivas_binaural_reverb_open( return IVAS_ERR_OK; } - +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +/*------------------------------------------------------------------------- + * ivas_binaural_reverb_init() + * + * Allocate and initialize binaural room reverberator handle + * for CLDFB renderers + *------------------------------------------------------------------------*/ +ivas_error ivas_binaural_reverb_init( +#else /*------------------------------------------------------------------------- * ivas_binaural_reverb_open_fastconv() * * Allocate and initialize binaural room reverberator handle for FastConv *------------------------------------------------------------------------*/ - ivas_error ivas_binaural_reverb_open_fastconv( +#endif REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ @@ -1918,13 +1926,19 @@ ivas_error ivas_binaural_reverb_open_fastconv( #endif const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ #else - const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ + IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ + const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ #endif const int32_t sampling_rate, /* i : sampling rate */ +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const float *defaultTimes, /* i : default reverberation times */ + const float *defaultEne /* i : default reverberation energies */ +#else const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ +#endif ) { ivas_error error; @@ -1952,8 +1966,13 @@ ivas_error ivas_binaural_reverb_open_fastconv( } else { +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + revTimes = defaultTimes; + revEne = defaultEne; +#else revTimes = hHrtfFastConv->fastconvReverberationTimes; revEne = hHrtfFastConv->fastconvReverberationEneCorrections; +#endif preDelay = 10; } @@ -1962,7 +1981,7 @@ ivas_error ivas_binaural_reverb_open_fastconv( return error; } - +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /*------------------------------------------------------------------------- * ivas_binaural_reverb_open_parambin() * @@ -1971,10 +1990,6 @@ ivas_error ivas_binaural_reverb_open_fastconv( ivas_error ivas_binaural_reverb_open_parambin( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ -#else -#endif const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ @@ -2013,7 +2028,7 @@ ivas_error ivas_binaural_reverb_open_parambin( return error; } - +#endif /*------------------------------------------------------------------------- * ivas_binaural_reverb_close() diff --git a/lib_rend/ivas_reverb_utils.c b/lib_rend/ivas_reverb_utils.c index 5bc0474ff6..f62bf4eab4 100644 --- a/lib_rend/ivas_reverb_utils.c +++ b/lib_rend/ivas_reverb_utils.c @@ -80,10 +80,11 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( const HRTFS_FASTCO *-----------------------------------------------------------------------------------------*/ ivas_error ivas_reverb_prepare_cldfb_params( - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, const HRTFS_STATISTICS_HANDLE hHrtfStatistics, #else + IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const AUDIO_CONFIG input_audio_config, const int16_t use_brir, diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index e25e32e717..a0659cc260 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -297,7 +297,11 @@ struct IVAS_REND *-------------------------------------------------------------------*/ #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +static ivas_error initMasaExtRenderer( input_masa *inputMasa, const AUDIO_CONFIG outConfig, const RENDER_CONFIG_DATA *hRendCfg, hrtf_handles *hHrtfs ); +#else static ivas_error initMasaExtRenderer( input_masa *inputMasa, const AUDIO_CONFIG outConfig, hrtf_handles *hHrtfs ); +#endif #else static ivas_error initMasaExtRenderer( input_masa *inputMasa, const AUDIO_CONFIG outConfig ); #endif @@ -3175,7 +3179,11 @@ static ivas_error setRendInputActiveMasa( else { #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = initMasaExtRenderer( inputMasa, outConfig, hRendCfg, hrtfs ) ) != IVAS_ERR_OK ) +#else if ( ( error = initMasaExtRenderer( inputMasa, outConfig, hrtfs ) ) != IVAS_ERR_OK ) +#endif #else if ( ( error = initMasaExtRenderer( inputMasa, outConfig ) ) != IVAS_ERR_OK ) #endif @@ -9356,7 +9364,8 @@ static ivas_error ivas_masa_ext_rend_dirac_rend_init( static ivas_error ivas_masa_ext_rend_parambin_init( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES input_masa *inputMasa, /* i/o: MASA external renderer structure */ - HRTFS_STATISTICS_HANDLE hHrtfStatistics /* i: HRTF statistics */ + const RENDER_CONFIG_DATA *hRendCfg, /* i : Renderer configuration data handle */ + HRTFS_STATISTICS_HANDLE hHrtfStatistics /* i : HRTF statistics */ #else input_masa *inputMasa /* i/o: MASA external renderer structure */ #endif @@ -9459,11 +9468,11 @@ static ivas_error ivas_masa_ext_rend_parambin_init( if ( hDiracDecBin->hReverb == NULL ) #endif { - /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) + /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ + if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( hRendCfg->roomAcoustics ), output_Fs, hHrtfParambin->parametricReverberationTimes, hHrtfParambin->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK ) #else - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) #endif { return error; @@ -9519,6 +9528,9 @@ static ivas_error initMasaExtRenderer( input_masa *inputMasa, #ifdef NONBE_FIX_BINARY_BINAURAL_READING const AUDIO_CONFIG outConfig, +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + const RENDER_CONFIG_DATA *hRendCfg, +#endif hrtf_handles *hrtfs #else const AUDIO_CONFIG outConfig @@ -9657,7 +9669,7 @@ static ivas_error initMasaExtRenderer( } #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_masa_ext_rend_parambin_init( inputMasa, hrtfs->hHrtfStatistics ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_masa_ext_rend_parambin_init( inputMasa, hRendCfg, hrtfs->hHrtfStatistics ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_masa_ext_rend_parambin_init( inputMasa ) ) != IVAS_ERR_OK ) #endif -- GitLab From fe5da4bb014ada1a2c8779d648c8a1d13dae55d3 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 12 Dec 2023 08:14:50 +0100 Subject: [PATCH 27/52] Fix for wrong type in load_reverb_binary() --- lib_util/hrtf_file_reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 0fa71036d1..5514ca6b5d 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -726,8 +726,8 @@ static ivas_error load_reverb_from_binary( ivas_error load_reverb_binary( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStatistics, /* i/o: HRTF staistics handle */ - int_fast32_t sampleRate, + IVAS_DEC_HRTF_STATISTICS_HANDLE hHrtfStatistics, /* i/o: HRTF statistics handle */ + int32_t sampleRate, /* i : sample rate */ #else IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */ #endif -- GitLab From cc6316b1f0f22f4b8b8692e7c24a422cb8b3067c Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 12 Dec 2023 08:32:36 +0100 Subject: [PATCH 28/52] Fix for openCrend interface update in split-rendering --- lib_dec/ivas_init_dec.c | 5 +++++ lib_dec/ivas_ism_dec.c | 4 ++++ lib_dec/ivas_mct_dec.c | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index e9cf9a6b8b..e896612424 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2032,8 +2032,13 @@ ivas_error ivas_init_decoder( } #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, + st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#endif #else #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index a2191e8ece..b2bcf783da 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -234,7 +234,11 @@ static ivas_error ivas_ism_bitrate_switching_dec( /* Open Crend Binaural renderer */ #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#endif #else #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 66159d65ca..db147b9e7f 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -1273,7 +1273,11 @@ static ivas_error ivas_mc_dec_reconfig( else if ( st_ivas->hCrendWrapper == NULL && ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) { #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#endif #else #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) -- GitLab From 35ffff1f8e98066aa63fa71e71762799f49fc6b7 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 12 Dec 2023 09:11:00 +0100 Subject: [PATCH 29/52] Fix for openCrend interface update in split-rendering --- lib_rend/ivas_crend.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 32851753d5..a758804d74 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -1369,7 +1369,11 @@ ivas_error ivas_rend_openMultiBinCrend( ivas_error error; #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, NULL /* hHrtfStatistics */,output_Fs, pMultiBinPoseData->num_poses ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, output_Fs, pMultiBinPoseData->num_poses ) ) != IVAS_ERR_OK ) +#endif #else if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, output_Fs ) ) != IVAS_ERR_OK ) #endif -- GitLab From cb26f646280f181649943079eee1af2b106fc323 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 12 Dec 2023 09:49:02 +0100 Subject: [PATCH 30/52] Fix for openCrend interface update in split-rendering --- lib_rend/lib_rend.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index d8b21e215d..2f4d196a1c 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -1512,7 +1512,7 @@ static ivas_error setRendInputActiveIsm( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, hHrtfStatistics, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, hrtfs->hHrtfStatistics, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, NULL, inputIsm->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #endif -- GitLab From a4f57ba04fde9261834647245dbf67a24a346dd7 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 12 Dec 2023 09:50:42 +0100 Subject: [PATCH 31/52] Fix for openCrend interface update in split-rendering --- lib_rend/lib_rend.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 2f4d196a1c..816c2a29d1 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -1512,7 +1512,7 @@ static ivas_error setRendInputActiveIsm( if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, hrtfs->hHrtfStatistics, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), hrtfs->hHrtfStatistics, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, NULL, inputIsm->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) #endif -- GitLab From ea31c37e68fc3af259360df31340a5e831e35383 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 12 Dec 2023 10:02:01 +0100 Subject: [PATCH 32/52] Fix for openCrend interface update in split-rendering --- lib_rend/lib_rend.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 816c2a29d1..ddc7717b53 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -1523,7 +1523,11 @@ static ivas_error setRendInputActiveIsm( else if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) { #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hrtfs->hSetOfHRTF, hrtfs->hHrtfStatistics, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hrtfs->hSetOfHRTF, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#endif #else if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) #endif @@ -2341,9 +2345,13 @@ static ivas_error initMcBinauralRendering( /* open CREND */ #ifdef SPLIT_REND_WITH_HEAD_ROT #ifdef NONBE_FIX_BINARY_BINAURAL_READING +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv, hHrtfStatistics, + outSampleRate, ( ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) || ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ) ? inputMc->base.ctx.pSplitRendWrapper->multiBinPoseData.num_poses : 1 ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv, outSampleRate, ( ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) || ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ) ? inputMc->base.ctx.pSplitRendWrapper->multiBinPoseData.num_poses : 1 ) ) != IVAS_ERR_OK ) - +#endif #else if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, NULL, outSampleRate, ( ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) || ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ) ? inputMc->base.ctx.pSplitRendWrapper->multiBinPoseData.num_poses : 1 ) ) != IVAS_ERR_OK ) @@ -2849,7 +2857,11 @@ static ivas_error updateSbaPanGains( { #ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, hHrtfStatistics, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#endif #else #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, hHrtfStatistics, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) @@ -2878,7 +2890,11 @@ static ivas_error updateSbaPanGains( #ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, hHrtfStatistics, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK ) +#endif #else #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, hHrtfStatistics, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) @@ -9458,7 +9474,7 @@ static ivas_error ivas_masa_ext_rend_parambin_init( /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( hRendCfg->roomAcoustics ), output_Fs, hHrtfParambin->parametricReverberationTimes, hHrtfParambin->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK ) #else - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) #endif { return error; -- GitLab From 95a279d3fee1400e924adc3d650dcfd850916838 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Tue, 12 Dec 2023 13:25:07 +0100 Subject: [PATCH 33/52] Cleaning --- lib_rend/ivas_hrtf.c | 4 ++-- lib_rend/ivas_objectRenderer_mix.c | 1 - lib_rend/lib_rend.c | 3 --- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 5d921e65db..c91dcbafb3 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -282,7 +282,7 @@ void ivas_HRTF_statistics_binary_close( /*-----------------------------------------------------------------------* * ivas_HRTF_statistics_init() * - * Allocates HRTF statistics handle and initializes from ROM + * Allocates HRTF statistics handle and initializes from ROM *-----------------------------------------------------------------------*/ ivas_error ivas_HRTF_statistics_init( @@ -332,4 +332,4 @@ ivas_error ivas_HRTF_statistics_init( return IVAS_ERR_OK; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index c1354c1c05..14a5c05909 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -404,7 +404,6 @@ static ivas_error DefaultBSplineModel( modelITD = &( HrFiltSet_p->ModelParamsITD ); #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /*TODO(922): Check ModelRom*/ #else switch ( output_Fs ) { diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index ddc7717b53..80a552ab37 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -280,9 +280,6 @@ struct IVAS_REND int16_t num_subframes; #ifdef NONBE_FIX_BINARY_BINAURAL_READING hrtf_handles hHrtfs; -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - float *lr_energy_and_iac[3]; -#endif #else IVAS_DEC_HRTF_CREND_HANDLE hSetOfHRTF; IVAS_DEC_HRTF_FASTCONV_HANDLE hHrtfFastConv; -- GitLab From 1dfbd32b5e1e45aca99b01d628a2e41487102e3e Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Tue, 12 Dec 2023 14:09:09 +0100 Subject: [PATCH 34/52] Add missing flag --- lib_rend/ivas_prot_rend.h | 1 - lib_util/hrtf_file_reader.c | 4 ++++ lib_util/hrtf_file_reader.h | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 2e581dc2c0..d5e14bf817 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1203,7 +1203,6 @@ ivas_error ivas_reverb_prepare_cldfb_params( float *pOutput_ene ); #else ivas_error ivas_reverb_prepare_cldfb_params( - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const AUDIO_CONFIG input_audio_config, diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 27a710a755..edfd83dd2a 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -736,7 +736,11 @@ ivas_error load_reverb_binary( { fseek( hrtfReader->file, 0, SEEK_SET ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES return load_reverb_from_binary( hHrtfStatistics, sampleRate, hrtfReader->file ); +#else + return load_reverb_from_binary( hHrtf, hrtfReader->file ); +#endif } #endif diff --git a/lib_util/hrtf_file_reader.h b/lib_util/hrtf_file_reader.h index 5cab6fca1d..29470c9171 100644 --- a/lib_util/hrtf_file_reader.h +++ b/lib_util/hrtf_file_reader.h @@ -198,6 +198,7 @@ ivas_error destroy_td_hrtf( IVAS_DEC_HRTF_HANDLE *hHRTF /* i/o: HRTF handle */ ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /*---------------------------------------------------------------------* * destroy_hrtf_statistics() * @@ -207,6 +208,7 @@ ivas_error destroy_td_hrtf( ivas_error destroy_hrtf_statistics( IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStatistics /* i/o: HRTF statistics handle */ ); +#endif #else /*---------------------------------------------------------------------* -- GitLab From d4d8db92063c631e72abb5b56c0f434fcdf94aa9 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 12 Dec 2023 15:06:21 +0100 Subject: [PATCH 35/52] Removed unused function ivas_reverb_get_fastconv_hrtf_set_energies --- lib_rend/ivas_prot_rend.h | 3 ++- lib_rend/ivas_reverb_filter_design.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 2e581dc2c0..21affd7831 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1224,6 +1224,7 @@ void ivas_reverb_interpolate_acoustic_data( float *pOutput_dsr ); +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES void ivas_reverb_get_hrtf_set_properties( float **ppHrtf_set_L_re, float **ppHrtf_set_L_im, @@ -1237,7 +1238,7 @@ void ivas_reverb_get_hrtf_set_properties( float *pOut_avg_pwr_R, float *pOut_i_a_coherence ); - +#endif /*---------------------------------------------------------------------------------* * Shoebox Prototypes diff --git a/lib_rend/ivas_reverb_filter_design.c b/lib_rend/ivas_reverb_filter_design.c index bbd82278bf..b2829a3201 100644 --- a/lib_rend/ivas_reverb_filter_design.c +++ b/lib_rend/ivas_reverb_filter_design.c @@ -654,7 +654,7 @@ void ivas_reverb_interpolate_acoustic_data( return; } - +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /*-------------------------------------------------------------------* * ivas_reverb_get_hrtf_set_properties() * @@ -840,3 +840,4 @@ void ivas_reverb_get_hrtf_set_properties( return; } +#endif -- GitLab From 3b3eeaa9da9823c149b8d385305d99f77d8655a5 Mon Sep 17 00:00:00 2001 From: muxe6256 Date: Tue, 12 Dec 2023 17:30:12 +0100 Subject: [PATCH 36/52] fix warnings --- apps/renderer.c | 2 +- lib_rend/lib_rend.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/renderer.c b/apps/renderer.c index 708c6bea14..2ca9c5af2c 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -775,7 +775,7 @@ int main( int16_t *outInt16Buffer; float *outFloatBuffer; #ifdef SPLIT_REND_WITH_HEAD_ROT - uint8_t *bitsBufferData; + uint8_t *bitsBufferData = NULL; #endif IVAS_REND_AudioBuffer inBuffer; IVAS_REND_AudioBuffer outBuffer; diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 80a552ab37..d3a0a63494 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -2939,7 +2939,11 @@ static ivas_error setRendInputActiveSplitPostRend( RENDER_CONFIG_DATA *hRendCfg #ifdef NONBE_FIX_BINARY_BINAURAL_READING , +#if defined _MSC_VER && !defined __clang__ hrtf_handles *hrtfs +#else + hrtf_handles *hrtfs __attribute__( ( unused ) ) /* avoid unused parameter warning when compiling with clang */ +#endif #endif ) { -- GitLab From 7804bc21d6a41e0ea15b1512c5d15090809cec10 Mon Sep 17 00:00:00 2001 From: muxe6256 Date: Tue, 12 Dec 2023 17:30:28 +0100 Subject: [PATCH 37/52] fix matlab script --- .../matlab_hrir_generation_scripts/SOFA_save_to_mat.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/binauralRenderer_interface/matlab_hrir_generation_scripts/SOFA_save_to_mat.m b/scripts/binauralRenderer_interface/matlab_hrir_generation_scripts/SOFA_save_to_mat.m index 113345bfda..ac75bb8de2 100644 --- a/scripts/binauralRenderer_interface/matlab_hrir_generation_scripts/SOFA_save_to_mat.m +++ b/scripts/binauralRenderer_interface/matlab_hrir_generation_scripts/SOFA_save_to_mat.m @@ -97,7 +97,7 @@ if isfile(Lib_Name) if sampleRates(ind) == Sofa.Data.SamplingRate Sofa.DataResampled(ind).IR = Sofa.Data.IR; else - Sofa.DataResampled(ind).IR = resample(Sofa.Data.IR, sampleRates(ind),Sofa.Data.SamplingRate, Dimension=1); + Sofa.DataResampled(ind).IR = resample(Sofa.Data.IR, sampleRates(ind),Sofa.Data.SamplingRate, 'Dimension',1); end Sofa.DataResampled(ind).SamplingRate = sampleRates(ind); end -- GitLab From da0ca5334f2d7df962feb585526e406f5865e307 Mon Sep 17 00:00:00 2001 From: muxe6256 Date: Tue, 12 Dec 2023 17:52:11 +0100 Subject: [PATCH 38/52] add missing file --- .../binauralRenderer_interface/fastconv/cldfb_prototype.mat | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 scripts/binauralRenderer_interface/fastconv/cldfb_prototype.mat diff --git a/scripts/binauralRenderer_interface/fastconv/cldfb_prototype.mat b/scripts/binauralRenderer_interface/fastconv/cldfb_prototype.mat new file mode 100644 index 0000000000..6e9e08fb0e --- /dev/null +++ b/scripts/binauralRenderer_interface/fastconv/cldfb_prototype.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:386bbd3a02c3b95280fff7bd8f5240ee60f8858889cad0f6147e930f5f2aa7e2 +size 1246 -- GitLab From 4a49fd318f287e7bc42cf06dfdc5a458261755fd Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Mon, 18 Dec 2023 10:06:54 +0100 Subject: [PATCH 39/52] Do HRTF Statistics initialization earlier --- lib_dec/ivas_init_dec.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index e896612424..5a0fb27fb0 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1226,6 +1226,20 @@ ivas_error ivas_init_decoder( } } +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + /*-------------------------------------------------------------------* + * Allocate and initialize HRTF Statistics handle + *--------------------------------------------------------------------*/ + + if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + { + if ( ( error = ivas_HRTF_statistics_init( &st_ivas->hHrtfStatistics, output_Fs ) ) != IVAS_ERR_OK ) + { + return error; + } + } +#endif + #ifdef SPLIT_REND_WITH_HEAD_ROT /*-----------------------------------------------------------------* * Initialize binuaral split rendering @@ -1945,16 +1959,6 @@ ivas_error ivas_init_decoder( * Allocate and initialize rendering handles *--------------------------------------------------------------------*/ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = ivas_HRTF_statistics_init( &st_ivas->hHrtfStatistics, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } -#endif - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { -- GitLab From 82056cbbe42f058ca28a15f16f8884da7cde26d9 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Mon, 18 Dec 2023 15:47:25 +0100 Subject: [PATCH 40/52] Move ToDo comments under compile switch --- lib_rend/ivas_dirac_dec_binaural_functions.c | 2 +- lib_rend/lib_rend.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index c3fb61337d..6aa7e62a10 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -239,10 +239,10 @@ ivas_error ivas_dirac_dec_init_binaural_data( if ( hDiracDecBin->hReverb == NULL ) #endif { - /* Todo Philips: Room acoustics should be passed here once the underlying part works. Probably enough to pick it from st_ivas but you know best. */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, st_ivas->hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( st_ivas->hRenderConfig->roomAcoustics ), output_Fs, st_ivas->hHrtfParambin->parametricReverberationTimes, st_ivas->hHrtfParambin->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK ) #else + /* Todo Philips: Room acoustics should be passed here once the underlying part works. Probably enough to pick it from st_ivas but you know best. */ if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) #endif { diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index d3a0a63494..bccd0e695c 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -9472,10 +9472,10 @@ static ivas_error ivas_masa_ext_rend_parambin_init( #endif { #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( hRendCfg->roomAcoustics ), output_Fs, hHrtfParambin->parametricReverberationTimes, hHrtfParambin->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK ) #else - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) + /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ + if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) #endif { return error; -- GitLab From 0ac384286922c012f16aa5196e464e2b5ee15675 Mon Sep 17 00:00:00 2001 From: Jan Brouwer Date: Tue, 19 Dec 2023 14:56:31 +0100 Subject: [PATCH 41/52] restore NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES define which was accidentally removed --- lib_com/options.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_com/options.h b/lib_com/options.h index 83c0a28392..086ee2bdca 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -171,6 +171,7 @@ #define NONBE_FIX_BINARY_BINAURAL_READING /* Orange: Add support for reading binaural binary file */ #define NONBE_FIX_AVG_IAC_CLDFB_REVERB /* Orange: Add computation avg energy and iac tables for rom and binaural binary file */ #define NONBE_FIX_856_TCX_LTP_SYNTH_FILTER /* FhG: issue 856: correct filtering length for tcx-ltp synth filtering*/ +#define NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /* Philips: Use pre-computed HRTF average L/R energies and IAC in all renderers */ #define NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING /* Dlb: issue 907: fix for band mapping at VLBR */ #define NONBE_FIX_869_MASA_PREREND_MERGE /* Nokia: issue: #869: MASA pre-rend not updating energy */ #define NONBE_FIX_931_IGF_STEREO_DEC_NOISE /* FhG: issue #931: fix noise substitution in the stereo IGF decoder */ -- GitLab From 2f01d8b5670f4469f7d550371eacf8f9cb879342 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 2 Jan 2024 15:11:26 +0100 Subject: [PATCH 42/52] Fix for memory leak in HRTF statistics. Minor HRTF statistics functions refactoring --- apps/decoder.c | 4 ---- lib_dec/ivas_init_dec.c | 5 +++++ lib_rend/ivas_hrtf.c | 4 ++-- lib_rend/ivas_prot_rend.h | 23 ++++++++++++----------- lib_rend/lib_rend.c | 2 +- lib_util/hrtf_file_reader.c | 2 +- 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index ba114e9294..41448705eb 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -1004,10 +1004,6 @@ cleanup: #endif IVAS_DEC_GetHrtfCRendHandle( hIvasDec, &hSetOfHRTF ); destroy_SetOfHRTF( hSetOfHRTF ); -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfStatistics ); - destroy_hrtf_statistics( hHrtfStatistics ); -#endif } IVAS_DEC_Close( &hIvasDec ); diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index ea227e874e..a29702b479 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2747,6 +2747,11 @@ void ivas_destroy_dec( /* Parametric binauralizer HRTF filters */ ivas_HRTF_parambin_binary_close( &st_ivas->hHrtfParambin ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + /* HRTF statistics */ + ivas_HRTF_statistics_close( &st_ivas->hHrtfStatistics ); +#endif + /* Config. Renderer */ ivas_render_config_close( &( st_ivas->hRenderConfig ) ); diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 010b0f4ff4..1f943595be 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -239,12 +239,12 @@ ivas_error ivas_HRTF_statistics_binary_open( /*-----------------------------------------------------------------------* - * ivas_HRTF_statistics_binary_close() + * ivas_HRTF_statistics_close() * * Close HRTF binary handle for statistics handler *-----------------------------------------------------------------------*/ -void ivas_HRTF_statistics_binary_close( +void ivas_HRTF_statistics_close( HRTFS_STATISTICS **hHrtfStatistics ) { if ( hHrtfStatistics == NULL || *hHrtfStatistics == NULL ) diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 92e06b72f1..14d2adb5e1 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -608,28 +608,29 @@ void ivas_HRTF_parambin_binary_close( HRTFS_PARAMBIN **hHrtfParambin /* i/o: Parametric binauralizer HRTF structure */ ); -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES -ivas_error ivas_HRTF_statistics_binary_open( - HRTFS_STATISTICS **hHrtfStatistics +ivas_error ivas_HRTF_CRend_binary_open( + HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ ); -void ivas_HRTF_statistics_binary_close( - HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */ +void ivas_HRTF_CRend_binary_close( + HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ ); +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES ivas_error ivas_HRTF_statistics_init( HRTFS_STATISTICS_HANDLE *hHrtfStatistics, /* i/o: HRTF statistics structure */ - int32_t sampleRate ); /* i : Sample rate */ -#endif + int32_t sampleRate /* i : Sample rate */ +); -ivas_error ivas_HRTF_CRend_binary_open( - HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ +void ivas_HRTF_statistics_close( + HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */ ); -void ivas_HRTF_CRend_binary_close( - HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ +ivas_error ivas_HRTF_statistics_binary_open( + HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */ ); +#endif /*----------------------------------------------------------------------------------* * TD object renderer diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 50a0457102..4cf437b1f0 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -8795,7 +8795,7 @@ void IVAS_REND_Close( ivas_HRTF_fastconv_binary_close( &( hIvasRend->hHrtfs.hHrtfFastConv ) ); ivas_HRTF_parambin_binary_close( &( hIvasRend->hHrtfs.hHrtfParambin ) ); #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - ivas_HRTF_statistics_binary_close( &( hIvasRend->hHrtfs.hHrtfStatistics ) ); + ivas_HRTF_statistics_close( &( hIvasRend->hHrtfs.hHrtfStatistics ) ); #endif #endif diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 229e974dea..20c900e557 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -2297,7 +2297,7 @@ ivas_error destroy_hrtf_statistics( free( ( *hHrtfStatistics )->average_energy_r ); free( ( *hHrtfStatistics )->inter_aural_coherence ); } - ivas_HRTF_statistics_binary_close( hHrtfStatistics ); + ivas_HRTF_statistics_close( hHrtfStatistics ); return IVAS_ERR_OK; } #endif -- GitLab From 826422100a4dee011b235e8e72c9612a1f4b76a6 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 9 Jan 2024 12:59:17 +0100 Subject: [PATCH 43/52] Minor update (to trigger git push) --- 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 a29702b479..24ba618a3c 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1227,7 +1227,7 @@ ivas_error ivas_init_decoder( } #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /*-------------------------------------------------------------------* + /*--------------------------------------------------------------------* * Allocate and initialize HRTF Statistics handle *--------------------------------------------------------------------*/ -- GitLab From 6948822471a790c1d656604233312d0ff6dc8da9 Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 9 Jan 2024 13:14:42 +0100 Subject: [PATCH 44/52] Minor update (to trigger git push) --- 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 24ba618a3c..a29702b479 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1227,7 +1227,7 @@ ivas_error ivas_init_decoder( } #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /*--------------------------------------------------------------------* + /*-------------------------------------------------------------------* * Allocate and initialize HRTF Statistics handle *--------------------------------------------------------------------*/ -- GitLab From 7daf2c6245dd8e01c2ab1dbbc375a1dbbc146a7f Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 9 Jan 2024 14:27:38 +0100 Subject: [PATCH 45/52] Minor update (to trigger git push) --- 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 a29702b479..24ba618a3c 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1227,7 +1227,7 @@ ivas_error ivas_init_decoder( } #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - /*-------------------------------------------------------------------* + /*--------------------------------------------------------------------* * Allocate and initialize HRTF Statistics handle *--------------------------------------------------------------------*/ -- GitLab From 57a1d33f19f4a53ae439c8144de01d6b9ca6d9ff Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Tue, 9 Jan 2024 15:43:28 +0100 Subject: [PATCH 46/52] Remove a change outside of a macro. --- apps/decoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/decoder.c b/apps/decoder.c index 41448705eb..3098e393a3 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -996,7 +996,7 @@ cleanup: #ifdef NONBE_FIX_BINARY_BINAURAL_READING destroy_td_hrtf( hHrtfTD ); #else - dealloc_HRTF_binary( *hHrtfTD ); + dealloc_HRTF_binary( hHrtfTD ); #endif #ifndef NONBE_FIX_BINARY_BINAURAL_READING -- GitLab From bdcf10e87bbbd8bdee20a5d3dd3fe866935f2eca Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 16 Jan 2024 11:03:18 +0100 Subject: [PATCH 47/52] Formatting (clang) --- lib_rend/ivas_crend.c | 2 +- lib_rend/ivas_dirac_dec_binaural_functions.c | 4 ++-- lib_rend/ivas_reverb.c | 14 +++++++------- lib_rend/ivas_stat_rend.h | 2 +- lib_rend/lib_rend.c | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 1b1fd07aff..fedb722b4e 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -1370,7 +1370,7 @@ ivas_error ivas_rend_openMultiBinCrend( #ifdef SPLIT_REND_WITH_HEAD_ROT #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, NULL /* hHrtfStatistics */,output_Fs, pMultiBinPoseData->num_poses ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, NULL /* hHrtfStatistics */, output_Fs, pMultiBinPoseData->num_poses ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, output_Fs, pMultiBinPoseData->num_poses ) ) != IVAS_ERR_OK ) #endif diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index cf4e671420..6909945ff6 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -242,8 +242,8 @@ ivas_error ivas_dirac_dec_init_binaural_data( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, st_ivas->hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( st_ivas->hRenderConfig->roomAcoustics ), output_Fs, st_ivas->hHrtfParambin->parametricReverberationTimes, st_ivas->hHrtfParambin->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK ) #else - /* Todo Philips: Room acoustics should be passed here once the underlying part works. Probably enough to pick it from st_ivas but you know best. */ - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) + /* Todo Philips: Room acoustics should be passed here once the underlying part works. Probably enough to pick it from st_ivas but you know best. */ + if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) #endif { return error; diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 9dbd60d643..c550004794 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1919,23 +1919,23 @@ ivas_error ivas_binaural_reverb_init( *------------------------------------------------------------------------*/ ivas_error ivas_binaural_reverb_open_fastconv( #endif - REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ + REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ #else #endif - const int16_t numBins, /* i : number of CLDFB bins */ - const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ + const int16_t numBins, /* i : number of CLDFB bins */ + const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES const IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ #else IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ #endif - const int32_t sampling_rate, /* i : sampling rate */ + const int32_t sampling_rate, /* i : sampling rate */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const float *defaultTimes, /* i : default reverberation times */ - const float *defaultEne /* i : default reverberation energies */ + const float *defaultTimes, /* i : default reverberation times */ + const float *defaultEne /* i : default reverberation energies */ #else const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ #endif diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 435dfbbfae..aa37b22ae7 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1353,7 +1353,7 @@ typedef struct ivas_hrtfs_statistics_struct float *average_energy_l; float *average_energy_r; float *inter_aural_coherence; - int16_t fromROM; /* Flag that indicates that the pointers point to tables in ROM (controls init/dealloc).*/ + int16_t fromROM; /* Flag that indicates that the pointers point to tables in ROM (controls init/dealloc).*/ } HRTFS_STATISTICS, *HRTFS_STATISTICS_HANDLE; #endif diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index be6ffdeb7e..ec60deb9ff 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -9507,8 +9507,8 @@ static ivas_error ivas_masa_ext_rend_parambin_init( #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( hRendCfg->roomAcoustics ), output_Fs, hHrtfParambin->parametricReverberationTimes, hHrtfParambin->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK ) #else - /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) + /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ + if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) #endif { return error; -- GitLab From 34fcf84fdbad7dde1cb47163817236c2ce66860b Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 16 Jan 2024 11:05:38 +0100 Subject: [PATCH 48/52] Formatting (clang) --- lib_rend/ivas_reverb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index c550004794..252a2c918f 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1937,7 +1937,7 @@ ivas_error ivas_binaural_reverb_open_fastconv( const float *defaultTimes, /* i : default reverberation times */ const float *defaultEne /* i : default reverberation energies */ #else - const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ + const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ #endif ) { -- GitLab From 03a29c04bcec37090ab57959ff38805a86b3b63b Mon Sep 17 00:00:00 2001 From: Marek Szczerba Date: Tue, 16 Jan 2024 11:07:31 +0100 Subject: [PATCH 49/52] Formatting (clang) --- lib_rend/ivas_reverb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 252a2c918f..a9021a7700 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1928,7 +1928,7 @@ ivas_error ivas_binaural_reverb_open_fastconv( const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ #ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES const IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ -#else +#else IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ #endif -- GitLab From a4e12759512678e04d98d1b4eae2bed309d3aadf Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Tue, 16 Jan 2024 22:47:04 +0100 Subject: [PATCH 50/52] Fix memory leak of HrtfStatistics (average_energy_l, average_energy_r, inter_aural_coherence) --- apps/decoder.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/decoder.c b/apps/decoder.c index 22ede32460..c4494e9d6c 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -1028,6 +1028,11 @@ cleanup: #endif IVAS_DEC_GetHrtfCRendHandle( hIvasDec, &hSetOfHRTF ); destroy_SetOfHRTF( hSetOfHRTF ); + +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfStatistics ); + destroy_hrtf_statistics( hHrtfStatistics ); +#endif } IVAS_DEC_Close( &hIvasDec ); -- GitLab From aacd59032035cd5e49763fa4c92a342bd6662f69 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Mon, 22 Jan 2024 11:21:57 +0100 Subject: [PATCH 51/52] Add macros from 744_step3_code_changes --- lib_com/options.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 71ae04cf1a..dd8920648f 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -155,6 +155,9 @@ #define FIX_638_ENERGIE_IAC_ROM_TABLES /* Orange: Missing left/right and coherence late reverb tables in binary format*/ #define FIX_OLD_BINARY_FORMAT /* Orange: temporary to maintain bitexactness */ #define FIX_WARNING_RENDER_CONFIG /* Orange: fix warning on windows build */ +#define FIX_WARNING_SPLIT_RENDER /* Orange: fix warning on windows build vscode */ +#define FIX_INV_DIFFUSE_WEIGHT /* Orange : Fix error in energy compensation in late binaural reverb*/ +#define FIX_20_MS_FRAME_LEN_TABLES_CONVERTER /* Orange : generate_tables_converter tools can generate rom for 5 and 20 ms frame length */ #define FIX_958_667_DISABLE_INITIAL_PLC_SUPPRESSION /* Ericsson: Fix related to issue 667 in IVAS BASOP. Handling of initial lost frame in IVAS causes non-BE on EVS BASOP 26.444 */ #define FIX_957_REMOVE_PANNING_DEAD_CODE /* VA: Remove obsolete non-diegetic panning related code. */ #define FIX_956_DECODER_COMMAND_LINE_FIX /* VA: Output correct error message when the decoder command-line has too many mandatory arguments. */ -- GitLab From 41161ee39c67658eaad02f62e33f37a33a069396 Mon Sep 17 00:00:00 2001 From: Serdar Buyuksarac Date: Mon, 29 Jan 2024 16:43:59 +0100 Subject: [PATCH 52/52] Review comments --- lib_rend/ivas_reverb.c | 75 ++++++++++++++++++++++++++---------------- lib_rend/lib_rend.c | 7 +++- 2 files changed, 53 insertions(+), 29 deletions(-) diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index a9021a7700..d85506bdbb 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -1911,34 +1911,62 @@ static ivas_error ivas_binaural_reverb_open( * for CLDFB renderers *------------------------------------------------------------------------*/ ivas_error ivas_binaural_reverb_init( + REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ + const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ + const int16_t numBins, /* i : number of CLDFB bins */ + const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ + const IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ + const int32_t sampling_rate, /* i : sampling rate */ + const float *defaultTimes, /* i : default reverberation times */ + const float *defaultEne /* i : default reverberation energies */ +) +{ + ivas_error error; + const float *revTimes; + const float *revEne; + float t60[CLDFB_NO_CHANNELS_MAX]; + float ene[CLDFB_NO_CHANNELS_MAX]; + int16_t preDelay; + + error = IVAS_ERR_OK; + + if ( ( roomAcoustics != NULL ) && roomAcoustics->override ) + { + revTimes = t60; + revEne = ene; + + if ( ( error = ivas_reverb_prepare_cldfb_params( roomAcoustics, hHrtfStatistics, sampling_rate, t60, ene ) ) != IVAS_ERR_OK ) + { + return error; + } + preDelay = (int16_t) roundf( 48000.0f * roomAcoustics->acousticPreDelay / CLDFB_NO_CHANNELS_MAX ); + } + else + { + revTimes = defaultTimes; + revEne = defaultEne; + preDelay = 10; + } + + error = ivas_binaural_reverb_open( hReverbPr, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); + + return error; +} #else /*------------------------------------------------------------------------- * ivas_binaural_reverb_open_fastconv() * * Allocate and initialize binaural room reverberator handle for FastConv *------------------------------------------------------------------------*/ + ivas_error ivas_binaural_reverb_open_fastconv( -#endif - REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const HRTFS_STATISTICS_HANDLE hHrtfStatistics, /* i : HRTF statistics handle */ -#else -#endif - const int16_t numBins, /* i : number of CLDFB bins */ - const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ -#else + REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ + const int16_t numBins, /* i : number of CLDFB bins */ + const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ -#endif - const int32_t sampling_rate, /* i : sampling rate */ -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - const float *defaultTimes, /* i : default reverberation times */ - const float *defaultEne /* i : default reverberation energies */ -#else + const int32_t sampling_rate, /* i : sampling rate */ const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ -#endif ) { ivas_error error; @@ -1954,11 +1982,7 @@ ivas_error ivas_binaural_reverb_open_fastconv( { revTimes = t60; revEne = ene; -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - if ( ( error = ivas_reverb_prepare_cldfb_params( roomAcoustics, hHrtfStatistics, sampling_rate, t60, ene ) ) != IVAS_ERR_OK ) -#else if ( ( error = ivas_reverb_prepare_cldfb_params( roomAcoustics, hHrtfFastConv, internal_config, false, sampling_rate, t60, ene ) ) != IVAS_ERR_OK ) -#endif { return error; } @@ -1966,13 +1990,8 @@ ivas_error ivas_binaural_reverb_open_fastconv( } else { -#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES - revTimes = defaultTimes; - revEne = defaultEne; -#else revTimes = hHrtfFastConv->fastconvReverberationTimes; revEne = hHrtfFastConv->fastconvReverberationEneCorrections; -#endif preDelay = 10; } @@ -1981,7 +2000,7 @@ ivas_error ivas_binaural_reverb_open_fastconv( return error; } -#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES + /*------------------------------------------------------------------------- * ivas_binaural_reverb_open_parambin() * diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 065ea6ca59..b1961a5143 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -3159,8 +3159,11 @@ static ivas_error setRendInputActiveMasa( #else RENDER_CONFIG_DATA *hRendCfg #endif - +#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES +) +#else ) /* Todo: This is not used at all within MASA. Support might be better to do after refactoring. */ +#endif { ivas_error error; rendering_context rendCtx; @@ -3171,7 +3174,9 @@ static ivas_error setRendInputActiveMasa( inputMasa = (input_masa *) input; rendCtx = inputMasa->base.ctx; outConfig = *rendCtx.pOutConfig; +#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES (void) hRendCfg; /* Suppress warning */ +#endif if ( !isIoConfigPairSupported( inConfig, outConfig ) ) { -- GitLab