Skip to content
Commits on Source (88)
...@@ -199,6 +199,9 @@ int main( ...@@ -199,6 +199,9 @@ int main(
#ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef NONBE_FIX_BINARY_BINAURAL_READING
IVAS_DEC_HRTF_HANDLE *hHrtfTD = NULL; IVAS_DEC_HRTF_HANDLE *hHrtfTD = NULL;
IVAS_DEC_HRTF_CREND_HANDLE *hSetOfHRTF = NULL; IVAS_DEC_HRTF_CREND_HANDLE *hSetOfHRTF = NULL;
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStatistics = NULL;
#endif
#endif #endif
#ifdef DEBUGGING #ifdef DEBUGGING
int32_t noClipping; int32_t noClipping;
...@@ -742,6 +745,7 @@ int main( ...@@ -742,6 +745,7 @@ int main(
} }
#endif #endif
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
#ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfReader ) ) != IVAS_ERR_OK ) if ( ( *hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfReader ) ) != IVAS_ERR_OK )
...@@ -760,6 +764,7 @@ int main( ...@@ -760,6 +764,7 @@ int main(
} }
#endif #endif
#endif #endif
#endif
#ifndef NONBE_FIX_BINARY_BINAURAL_READING #ifndef NONBE_FIX_BINARY_BINAURAL_READING
IVAS_DEC_HRTF_CREND_HANDLE hSetOfHRTF = NULL; IVAS_DEC_HRTF_CREND_HANDLE hSetOfHRTF = NULL;
...@@ -847,6 +852,36 @@ int main( ...@@ -847,6 +852,36 @@ int main(
fprintf( stderr, "\nError in loading HRTF binary file %s for parametric binauralizer \n\n", arg.hrtfFileName ); fprintf( stderr, "\nError in loading HRTF binary file %s for parametric binauralizer \n\n", arg.hrtfFileName );
goto cleanup; 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 #endif
} }
...@@ -939,6 +974,11 @@ cleanup: ...@@ -939,6 +974,11 @@ cleanup:
#endif #endif
IVAS_DEC_GetHrtfCRendHandle( hIvasDec, &hSetOfHRTF ); IVAS_DEC_GetHrtfCRendHandle( hIvasDec, &hSetOfHRTF );
destroy_SetOfHRTF( 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 ); IVAS_DEC_Close( &hIvasDec );
......
...@@ -748,6 +748,9 @@ int main( ...@@ -748,6 +748,9 @@ int main(
IVAS_DEC_HRTF_FASTCONV_HANDLE *hHrtfFastConv = NULL; IVAS_DEC_HRTF_FASTCONV_HANDLE *hHrtfFastConv = NULL;
IVAS_DEC_HRTF_PARAMBIN_HANDLE *hHrtfParambin = NULL; IVAS_DEC_HRTF_PARAMBIN_HANDLE *hHrtfParambin = NULL;
IVAS_DEC_HRTF_HANDLE *hHrtfTD = NULL; IVAS_DEC_HRTF_HANDLE *hHrtfTD = NULL;
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
IVAS_DEC_HRTF_STATISTICS_HANDLE *hHrtfStatistics = NULL;
#endif
#endif #endif
IsmPositionProvider *positionProvider; IsmPositionProvider *positionProvider;
LfeRoutingConfig *lfeRoutingConfigs[RENDERER_MAX_MC_INPUTS]; LfeRoutingConfig *lfeRoutingConfigs[RENDERER_MAX_MC_INPUTS];
...@@ -1053,6 +1056,7 @@ int main( ...@@ -1053,6 +1056,7 @@ int main(
} }
} }
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES #ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( ( hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfFileReader ) ) != IVAS_ERR_OK ) if ( ( hHrtfTD != NULL ) && ( error = load_reverb_binary( *hHrtfTD, hrtfFileReader ) ) != IVAS_ERR_OK )
{ {
...@@ -1062,6 +1066,7 @@ int main( ...@@ -1062,6 +1066,7 @@ int main(
goto cleanup; goto cleanup;
} }
} }
#endif
#endif #endif
if ( ( error = IVAS_REND_GetHrtfCRendHandle( hIvasRend, &hSetOfHRTF ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_GetHrtfCRendHandle( hIvasRend, &hSetOfHRTF ) ) != IVAS_ERR_OK )
...@@ -1120,6 +1125,28 @@ int main( ...@@ -1120,6 +1125,28 @@ int main(
destroy_parambin_hrtf( hHrtfParambin ); 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 ); hrtfFileReader_close( &hrtfFileReader );
...@@ -2241,6 +2268,9 @@ cleanup: ...@@ -2241,6 +2268,9 @@ cleanup:
#ifdef NONBE_FIX_BINARY_BINAURAL_READING #ifdef NONBE_FIX_BINARY_BINAURAL_READING
destroy_td_hrtf( hHrtfTD ); destroy_td_hrtf( hHrtfTD );
destroy_SetOfHRTF( hSetOfHRTF ); destroy_SetOfHRTF( hSetOfHRTF );
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
destroy_hrtf_statistics( hHrtfStatistics );
#endif
#endif #endif
IVAS_REND_Close( &hIvasRend ); IVAS_REND_Close( &hIvasRend );
IsmPositionProvider_close( positionProvider ); IsmPositionProvider_close( positionProvider );
......
...@@ -163,6 +163,9 @@ typedef struct TDREND_HRFILT_FiltSet_struct *IVAS_DEC_HRTF_HANDLE; ...@@ -163,6 +163,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_crend_structure *IVAS_DEC_HRTF_CREND_HANDLE;
typedef struct ivas_hrtfs_fastconv_struct *IVAS_DEC_HRTF_FASTCONV_HANDLE; typedef struct ivas_hrtfs_fastconv_struct *IVAS_DEC_HRTF_FASTCONV_HANDLE;
typedef struct ivas_hrtfs_parambin_struct *IVAS_DEC_HRTF_PARAMBIN_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 cldfb_filter_bank_struct *IVAS_CLDFB_FILTER_BANK_HANDLE;
typedef struct ivas_LS_setup_custom *IVAS_LSSETUP_CUSTOM_HANDLE; typedef struct ivas_LS_setup_custom *IVAS_LSSETUP_CUSTOM_HANDLE;
......
...@@ -167,6 +167,7 @@ ...@@ -167,6 +167,7 @@
#define NONBE_FIX_BINARY_BINAURAL_READING /* Orange: Add support for reading binaural binary file */ #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_AVG_IAC_CLDFB_REVERB /* Orange: Add computation avg energy and iac tables for rom and binaural binary file */
#define NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /* Philips: Use pre-computed HRTF average L/R energies and IAC in all renderers */
#define NONBE_FIX_935_EARLY_REFLECTIONS_WRONG_ORDER /* Qualcomm: issue 953: fix order or ER channels in LC mode*/ #define NONBE_FIX_935_EARLY_REFLECTIONS_WRONG_ORDER /* Qualcomm: issue 953: fix order or ER channels in LC mode*/
#define NONBE_FIX_935_SBA_REVERB /* FhG: issue 935: fix MSAN error for SBA related to BINAURAL_ROOM_REVERB */ #define NONBE_FIX_935_SBA_REVERB /* FhG: issue 935: fix MSAN error for SBA related to BINAURAL_ROOM_REVERB */
#define NONBE_FIX_952_MC_PARAMUPMIX_5MS /* Dlb : issue 952 : Differences between 5ms and 20ms rendering for ParamUpmix*/ #define NONBE_FIX_952_MC_PARAMUPMIX_5MS /* Dlb : issue 952 : Differences between 5ms and 20ms rendering for ParamUpmix*/
......
...@@ -1231,7 +1231,11 @@ ivas_error ivas_binRenderer_open( ...@@ -1231,7 +1231,11 @@ ivas_error ivas_binRenderer_open(
/* Allocate memories needed for reverb module */ /* Allocate memories needed for reverb module */
if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) )
{ {
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
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 ) 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; return error;
} }
......
...@@ -1066,6 +1066,13 @@ ivas_error ivas_init_decoder_front( ...@@ -1066,6 +1066,13 @@ ivas_error ivas_init_decoder_front(
{ {
return error; 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
} }
/*-------------------------------------------------------------------* /*-------------------------------------------------------------------*
...@@ -1219,6 +1226,20 @@ ivas_error ivas_init_decoder( ...@@ -1219,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 #ifdef SPLIT_REND_WITH_HEAD_ROT
/*-----------------------------------------------------------------* /*-----------------------------------------------------------------*
* Initialize binuaral split rendering * Initialize binuaral split rendering
...@@ -1972,7 +1993,11 @@ ivas_error ivas_init_decoder( ...@@ -1972,7 +1993,11 @@ ivas_error ivas_init_decoder(
if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) 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 ) 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; return error;
} }
...@@ -2011,11 +2036,21 @@ ivas_error ivas_init_decoder( ...@@ -2011,11 +2036,21 @@ ivas_error ivas_init_decoder(
} }
#ifdef SPLIT_REND_WITH_HEAD_ROT #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, 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 ) 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 )
#else #else
if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, 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 ) st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK )
#endif
#endif #endif
{ {
return error; return error;
...@@ -2462,6 +2497,9 @@ void ivas_initialize_handles_dec( ...@@ -2462,6 +2497,9 @@ void ivas_initialize_handles_dec(
st_ivas->hSetOfHRTF = NULL; st_ivas->hSetOfHRTF = NULL;
st_ivas->hHrtfFastConv = NULL; st_ivas->hHrtfFastConv = NULL;
st_ivas->hHrtfParambin = 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->hoa_dec_mtx = NULL;
st_ivas->hMasaIsmData = NULL; st_ivas->hMasaIsmData = NULL;
st_ivas->hSbaIsmData = NULL; st_ivas->hSbaIsmData = NULL;
...@@ -2709,6 +2747,11 @@ void ivas_destroy_dec( ...@@ -2709,6 +2747,11 @@ void ivas_destroy_dec(
/* Parametric binauralizer HRTF filters */ /* Parametric binauralizer HRTF filters */
ivas_HRTF_parambin_binary_close( &st_ivas->hHrtfParambin ); 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 */ /* Config. Renderer */
ivas_render_config_close( &( st_ivas->hRenderConfig ) ); ivas_render_config_close( &( st_ivas->hRenderConfig ) );
......
...@@ -201,7 +201,11 @@ static ivas_error ivas_ism_bitrate_switching_dec( ...@@ -201,7 +201,11 @@ static ivas_error ivas_ism_bitrate_switching_dec(
} }
if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) 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 ) 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; return error;
} }
...@@ -230,9 +234,17 @@ static ivas_error ivas_ism_bitrate_switching_dec( ...@@ -230,9 +234,17 @@ static ivas_error ivas_ism_bitrate_switching_dec(
/* Open Crend Binaural renderer */ /* Open Crend Binaural renderer */
#ifdef SPLIT_REND_WITH_HEAD_ROT #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 ) 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 )
#else #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 ) 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 #endif
{ {
return error; return error;
......
...@@ -1273,9 +1273,17 @@ static ivas_error ivas_mc_dec_reconfig( ...@@ -1273,9 +1273,17 @@ 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 ) ) 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 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 ) 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 )
#else #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 ) 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 #endif
{ {
return error; return error;
......
...@@ -1110,6 +1110,9 @@ typedef struct Decoder_Struct ...@@ -1110,6 +1110,9 @@ typedef struct Decoder_Struct
HRTFS_CREND_HANDLE hSetOfHRTF; /* Set of HRTFs handle (CRend) */ HRTFS_CREND_HANDLE hSetOfHRTF; /* Set of HRTFs handle (CRend) */
HRTFS_FASTCONV_HANDLE hHrtfFastConv; /* FASTCONV HRTF tables for binaural rendering */ HRTFS_FASTCONV_HANDLE hHrtfFastConv; /* FASTCONV HRTF tables for binaural rendering */
HRTFS_PARAMBIN_HANDLE hHrtfParambin; /* HRTF tables for parametric binauralizer */ HRTFS_PARAMBIN_HANDLE hHrtfParambin; /* HRTF tables for parametric binauralizer */
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
HRTFS_STATISTICS_HANDLE hHrtfStatistics; /* HRTF statistics handle */
#endif
LSSETUP_CUSTOM_HANDLE hLsSetupCustom; /* Custom LS configuration handle */ LSSETUP_CUSTOM_HANDLE hLsSetupCustom; /* Custom LS configuration handle */
float *hoa_dec_mtx; /* Pointer to decoder matrix for SBA */ float *hoa_dec_mtx; /* Pointer to decoder matrix for SBA */
HEAD_TRACK_DATA_HANDLE hHeadTrackData; /* Head tracking data structure */ HEAD_TRACK_DATA_HANDLE hHeadTrackData; /* Head tracking data structure */
......
...@@ -1993,6 +1993,29 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle( ...@@ -1993,6 +1993,29 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle(
return IVAS_ERR_OK; 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 **hHrtfStatistics /* o : HRTF statistics handle */
)
{
if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHrtfStatistics == NULL )
{
return IVAS_ERR_WRONG_PARAMS;
}
*hHrtfStatistics = &hIvasDec->st_ivas->hHrtfStatistics;
return IVAS_ERR_OK;
}
#endif
/*---------------------------------------------------------------------* /*---------------------------------------------------------------------*
* copyRendererConfigStruct( ) * copyRendererConfigStruct( )
* *
......
...@@ -441,6 +441,12 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle( ...@@ -441,6 +441,12 @@ ivas_error IVAS_DEC_GetHrtfParamBinHandle(
#endif #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 **hHrtfStatistics /* o : HRTF statistics handle */
);
#endif
/*! r: error code*/ /*! r: error code*/
ivas_error IVAS_DEC_GetRenderConfig( ivas_error IVAS_DEC_GetRenderConfig(
......
...@@ -1369,7 +1369,11 @@ ivas_error ivas_rend_openMultiBinCrend( ...@@ -1369,7 +1369,11 @@ ivas_error ivas_rend_openMultiBinCrend(
ivas_error error; ivas_error error;
#ifdef SPLIT_REND_WITH_HEAD_ROT #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 ) if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, output_Fs, pMultiBinPoseData->num_poses ) ) != IVAS_ERR_OK )
#endif
#else #else
if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, output_Fs ) ) != IVAS_ERR_OK ) if ( ( error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, NULL, output_Fs ) ) != IVAS_ERR_OK )
#endif #endif
...@@ -1394,6 +1398,9 @@ ivas_error ivas_rend_openCrend( ...@@ -1394,6 +1398,9 @@ ivas_error ivas_rend_openCrend(
const AUDIO_CONFIG outConfig, const AUDIO_CONFIG outConfig,
RENDER_CONFIG_DATA *hRendCfg, RENDER_CONFIG_DATA *hRendCfg,
HRTFS_CREND_HANDLE hSetOfHRTF, HRTFS_CREND_HANDLE hSetOfHRTF,
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
HRTFS_STATISTICS_HANDLE hHrtfStatistics,
#endif
#ifdef SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT
const int32_t output_Fs, const int32_t output_Fs,
const int16_t num_poses const int16_t num_poses
...@@ -1568,7 +1575,11 @@ ivas_error ivas_rend_openCrend( ...@@ -1568,7 +1575,11 @@ ivas_error ivas_rend_openCrend(
if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
{ {
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
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 ) if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, NULL, hRendCfg, output_Fs ) ) != IVAS_ERR_OK )
#endif
{ {
return error; return error;
} }
......
...@@ -239,8 +239,12 @@ ivas_error ivas_dirac_dec_init_binaural_data( ...@@ -239,8 +239,12 @@ ivas_error ivas_dirac_dec_init_binaural_data(
if ( hDiracDecBin->hReverb == NULL ) if ( hDiracDecBin->hReverb == NULL )
#endif #endif
{ {
#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. */ /* 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 ) 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; return error;
} }
......
...@@ -37,6 +37,9 @@ ...@@ -37,6 +37,9 @@
#include "ivas_error.h" #include "ivas_error.h"
#include "wmc_auto.h" #include "wmc_auto.h"
#include "ivas_prot.h" #include "ivas_prot.h"
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
#include "ivas_rom_binaural_crend_head.h"
#endif
/*-----------------------------------------------------------------------* /*-----------------------------------------------------------------------*
* ivas_HRTF_binary_open() * ivas_HRTF_binary_open()
...@@ -214,3 +217,98 @@ void ivas_HRTF_parambin_binary_close( ...@@ -214,3 +217,98 @@ void ivas_HRTF_parambin_binary_close(
return; 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_close()
*
* Close HRTF binary handle for statistics handler
*-----------------------------------------------------------------------*/
void ivas_HRTF_statistics_close(
HRTFS_STATISTICS **hHrtfStatistics )
{
if ( hHrtfStatistics == NULL || *hHrtfStatistics == NULL )
{
return;
}
free( *hHrtfStatistics );
*hHrtfStatistics = NULL;
return;
}
/*-----------------------------------------------------------------------*
* ivas_HRTF_statistics_init()
*
* Allocates HRTF statistics handle and initializes from ROM
*-----------------------------------------------------------------------*/
ivas_error ivas_HRTF_statistics_init(
HRTFS_STATISTICS_HANDLE *hHrtfStatistics,
int32_t sampleRate )
{
HRTFS_STATISTICS *HrtfStatistics;
if ( hHrtfStatistics != NULL && *hHrtfStatistics != NULL )
{
/* Tables already loaded from file */
return IVAS_ERR_OK;
}
/* Initialise tables from ROM */
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
...@@ -404,6 +404,8 @@ static ivas_error DefaultBSplineModel( ...@@ -404,6 +404,8 @@ static ivas_error DefaultBSplineModel(
model = &( HrFiltSet_p->ModelParams ); model = &( HrFiltSet_p->ModelParams );
modelITD = &( HrFiltSet_p->ModelParamsITD ); modelITD = &( HrFiltSet_p->ModelParamsITD );
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
#else
switch ( output_Fs ) switch ( output_Fs )
{ {
case 48000: case 48000:
...@@ -422,6 +424,7 @@ static ivas_error DefaultBSplineModel( ...@@ -422,6 +424,7 @@ static ivas_error DefaultBSplineModel(
HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz; HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz;
break; break;
} }
#endif
/* Set ROM flag for correct deallocation */ /* Set ROM flag for correct deallocation */
model->modelROM = TRUE; model->modelROM = TRUE;
......
...@@ -616,6 +616,21 @@ void ivas_HRTF_CRend_binary_close( ...@@ -616,6 +616,21 @@ void ivas_HRTF_CRend_binary_close(
HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ 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 */
);
void ivas_HRTF_statistics_close(
HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */
);
ivas_error ivas_HRTF_statistics_binary_open(
HRTFS_STATISTICS **hHrtfStatistics /* i/o: HRTF statistics structure */
);
#endif
/*----------------------------------------------------------------------------------* /*----------------------------------------------------------------------------------*
* TD object renderer * TD object renderer
...@@ -888,6 +903,9 @@ ivas_error ivas_rend_openCrend( ...@@ -888,6 +903,9 @@ ivas_error ivas_rend_openCrend(
const AUDIO_CONFIG outConfig, const AUDIO_CONFIG outConfig,
RENDER_CONFIG_DATA *hRendCfg, RENDER_CONFIG_DATA *hRendCfg,
HRTFS_CREND_HANDLE hSetOfHRTF, HRTFS_CREND_HANDLE hSetOfHRTF,
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
HRTFS_STATISTICS_HANDLE hHrtfStatistics,
#endif
#ifdef SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT
const int32_t output_Fs, const int32_t output_Fs,
const int16_t num_poses const int16_t num_poses
...@@ -942,16 +960,34 @@ ivas_error ivas_rend_crendProcessSubframe( ...@@ -942,16 +960,34 @@ ivas_error ivas_rend_crendProcessSubframe(
* Reverberator * Reverberator
*----------------------------------------------------------------------------------*/ *----------------------------------------------------------------------------------*/
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
ivas_error ivas_binaural_reverb_init(
#else
ivas_error ivas_binaural_reverb_open_fastconv( 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 */
#else
#endif
const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numBins, /* i : number of CLDFB bins */
const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ 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 */ IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */
const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ 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 */
#else
const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */
#endif
); );
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
ivas_error ivas_binaural_reverb_open_parambin( ivas_error ivas_binaural_reverb_open_parambin(
REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */
const int16_t numBins, /* i : number of CLDFB bins */ const int16_t numBins, /* i : number of CLDFB bins */
...@@ -960,6 +996,7 @@ ivas_error ivas_binaural_reverb_open_parambin( ...@@ -960,6 +996,7 @@ ivas_error ivas_binaural_reverb_open_parambin(
const int32_t sampling_rate, /* i : sampling rate */ const int32_t sampling_rate, /* i : sampling rate */
const HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : Parametric binauralizer HRTF handle */ const HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : Parametric binauralizer HRTF handle */
); );
#endif
void ivas_binaural_reverb_close( void ivas_binaural_reverb_close(
REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */ REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */
...@@ -977,9 +1014,13 @@ void ivas_binaural_reverb_processSubframe( ...@@ -977,9 +1014,13 @@ void ivas_binaural_reverb_processSubframe(
ivas_error ivas_reverb_open( 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 hHrtfStatistics, /* i : HRTF statistics handle */
#else
const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */
const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ const HRTFS_HANDLE hHrtf, /* i : HRTF handle */
const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */ const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */
#endif
RENDER_CONFIG_DATA *pConfig, /* i : Reverb configuration */ RENDER_CONFIG_DATA *pConfig, /* i : Reverb configuration */
const int32_t output_Fs /* i : output sampling rate */ const int32_t output_Fs /* i : output sampling rate */
); );
...@@ -1136,6 +1177,14 @@ void ivas_reverb_calc_color_levels( ...@@ -1136,6 +1177,14 @@ void ivas_reverb_calc_color_levels(
float *pTarget_color_R float *pTarget_color_R
); );
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
ivas_error ivas_reverb_prepare_cldfb_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_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 HRTFS_FASTCONV_HANDLE hHrtfFastConv,
...@@ -1144,6 +1193,7 @@ ivas_error ivas_reverb_prepare_cldfb_params( ...@@ -1144,6 +1193,7 @@ ivas_error ivas_reverb_prepare_cldfb_params(
const int32_t output_Fs, const int32_t output_Fs,
float *pOutput_t60, float *pOutput_t60,
float *pOutput_ene ); float *pOutput_ene );
#endif
void ivas_reverb_interpolate_acoustic_data( void ivas_reverb_interpolate_acoustic_data(
const int16_t input_table_size, const int16_t input_table_size,
...@@ -1156,6 +1206,7 @@ void ivas_reverb_interpolate_acoustic_data( ...@@ -1156,6 +1206,7 @@ void ivas_reverb_interpolate_acoustic_data(
float *pOutput_dsr float *pOutput_dsr
); );
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
void ivas_reverb_get_hrtf_set_properties( void ivas_reverb_get_hrtf_set_properties(
float **ppHrtf_set_L_re, float **ppHrtf_set_L_re,
float **ppHrtf_set_L_im, float **ppHrtf_set_L_im,
...@@ -1169,7 +1220,7 @@ void ivas_reverb_get_hrtf_set_properties( ...@@ -1169,7 +1220,7 @@ void ivas_reverb_get_hrtf_set_properties(
float *pOut_avg_pwr_R, float *pOut_avg_pwr_R,
float *pOut_i_a_coherence float *pOut_i_a_coherence
); );
#endif
/*---------------------------------------------------------------------------------* /*---------------------------------------------------------------------------------*
* Shoebox Prototypes * Shoebox Prototypes
......
...@@ -939,15 +939,26 @@ static void set_fft_and_datablock_sizes( ...@@ -939,15 +939,26 @@ static void set_fft_and_datablock_sizes(
static void set_reverb_acoustic_data( static void set_reverb_acoustic_data(
ivas_reverb_params_t *pParams, ivas_reverb_params_t *pParams,
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
#else
const AUDIO_CONFIG input_audio_config, const AUDIO_CONFIG input_audio_config,
const HRTFS_HANDLE hHrtf, const HRTFS_HANDLE hHrtf,
#endif
IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pRoomAcoustics, IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pRoomAcoustics,
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
const int16_t subframe_len, const int16_t subframe_len,
#endif
const int16_t nr_fc_input, const int16_t nr_fc_input,
const int16_t nr_fc_fft_filter ) 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; int16_t nr_out_ch, hrtf_idx, offset, iter_idx, bin_idx;
#endif
float ln_1e6_inverted, delay_diff, exp_argument; 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_re[MAX_INTERN_CHANNELS];
float *pHrtf_set_l_im[MAX_INTERN_CHANNELS]; float *pHrtf_set_l_im[MAX_INTERN_CHANNELS];
float *pHrtf_set_r_re[MAX_INTERN_CHANNELS]; float *pHrtf_set_r_re[MAX_INTERN_CHANNELS];
...@@ -990,6 +1001,7 @@ static void set_reverb_acoustic_data( ...@@ -990,6 +1001,7 @@ static void set_reverb_acoustic_data(
pParams->pHrtf_inter_aural_coherence_const = (const float *) pParams->pHrtf_inter_aural_coherence; 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 */ /* 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, 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 ); nr_fc_fft_filter, pParams->pFc, pParams->pRt60, pParams->pDsr );
...@@ -1084,9 +1096,13 @@ static ivas_error setup_FDN_branches( ...@@ -1084,9 +1096,13 @@ static ivas_error setup_FDN_branches(
ivas_error ivas_reverb_open( 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 hHrtfStatistics, /* i : HRTF statistics handle */
#else
const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */
const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ const HRTFS_HANDLE hHrtf, /* i : HRTF handle */
const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */ const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */
#endif
RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */
const int32_t output_Fs /* i : output sampling rate */ const int32_t output_Fs /* i : output sampling rate */
) )
...@@ -1160,6 +1176,12 @@ ivas_error ivas_reverb_open( ...@@ -1160,6 +1176,12 @@ ivas_error ivas_reverb_open(
params.pFc[bin_idx] = freq_step * bin_idx; params.pFc[bin_idx] = freq_step * bin_idx;
} }
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
set_reverb_acoustic_data( &params, &hRenderConfig->roomAcoustics, nr_fc_input, nr_fc_fft_filter );
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 ) if ( hHrtf == NULL && lr_energy_and_iac != NULL )
{ {
params.pHrtf_avg_pwr_response_l_const = lr_energy_and_iac[0]; params.pHrtf_avg_pwr_response_l_const = lr_energy_and_iac[0];
...@@ -1168,6 +1190,7 @@ ivas_error ivas_reverb_open( ...@@ -1168,6 +1190,7 @@ ivas_error ivas_reverb_open(
} }
/* set up reverb acoustic data on the basis of HRTF data and renderer config */ /* set up reverb acoustic data on the basis of HRTF data and renderer config */
set_reverb_acoustic_data( &params, input_audio_config, hHrtf, &hRenderConfig->roomAcoustics, subframe_len, nr_fc_input, nr_fc_fft_filter ); set_reverb_acoustic_data( &params, input_audio_config, hHrtf, &hRenderConfig->roomAcoustics, subframe_len, nr_fc_input, nr_fc_fft_filter );
#endif
/* set reverb acoustic configuration based on renderer config */ /* set reverb acoustic configuration based on renderer config */
#ifdef DEBUGGING #ifdef DEBUGGING
...@@ -1880,7 +1903,56 @@ static ivas_error ivas_binaural_reverb_open( ...@@ -1880,7 +1903,56 @@ static ivas_error ivas_binaural_reverb_open(
return IVAS_ERR_OK; 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(
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() * ivas_binaural_reverb_open_fastconv()
* *
...@@ -1975,7 +2047,7 @@ ivas_error ivas_binaural_reverb_open_parambin( ...@@ -1975,7 +2047,7 @@ ivas_error ivas_binaural_reverb_open_parambin(
return error; return error;
} }
#endif
/*------------------------------------------------------------------------- /*-------------------------------------------------------------------------
* ivas_binaural_reverb_close() * ivas_binaural_reverb_close()
......
...@@ -654,7 +654,7 @@ void ivas_reverb_interpolate_acoustic_data( ...@@ -654,7 +654,7 @@ void ivas_reverb_interpolate_acoustic_data(
return; return;
} }
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
/*-------------------------------------------------------------------* /*-------------------------------------------------------------------*
* ivas_reverb_get_hrtf_set_properties() * ivas_reverb_get_hrtf_set_properties()
* *
...@@ -841,3 +841,4 @@ void ivas_reverb_get_hrtf_set_properties( ...@@ -841,3 +841,4 @@ void ivas_reverb_get_hrtf_set_properties(
return; return;
} }
#endif
...@@ -67,8 +67,11 @@ typedef struct cldfb_convolver_state ...@@ -67,8 +67,11 @@ typedef struct cldfb_convolver_state
float filter_states_im[BINAURAL_CONVBANDS][CLDFB_CONVOLVER_NTAPS_MAX]; float filter_states_im[BINAURAL_CONVBANDS][CLDFB_CONVOLVER_NTAPS_MAX];
} cldfb_convolver_state; } 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 ); 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
/*-----------------------------------------------------------------------------------------* /*-----------------------------------------------------------------------------------------*
* Function ivas_reverb_prepare_cldfb_params() * Function ivas_reverb_prepare_cldfb_params()
...@@ -77,10 +80,15 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( const HRTFS_FASTCO ...@@ -77,10 +80,15 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( const HRTFS_FASTCO
*-----------------------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------------------*/
ivas_error ivas_reverb_prepare_cldfb_params( ivas_error ivas_reverb_prepare_cldfb_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, IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params,
const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const HRTFS_FASTCONV_HANDLE hHrtfFastConv,
const AUDIO_CONFIG input_audio_config, const AUDIO_CONFIG input_audio_config,
const int16_t use_brir, const int16_t use_brir,
#endif
const int32_t output_Fs, const int32_t output_Fs,
float *pOutput_t60, float *pOutput_t60,
float *pOutput_ene ) float *pOutput_ene )
...@@ -92,7 +100,9 @@ ivas_error ivas_reverb_prepare_cldfb_params( ...@@ -92,7 +100,9 @@ ivas_error ivas_reverb_prepare_cldfb_params(
float delay_diff, ln_1e6_inverted, exp_argument; float delay_diff, ln_1e6_inverted, exp_argument;
const float dist = DEFAULT_SRC_DIST; const float dist = DEFAULT_SRC_DIST;
const float dmx_gain_2 = 4.0f * EVS_PI * dist * dist / 0.001f; const float dmx_gain_2 = 4.0f * EVS_PI * dist * dist / 0.001f;
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
ivas_error error; ivas_error error;
#endif
for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ )
{ {
...@@ -113,10 +123,14 @@ ivas_error ivas_reverb_prepare_cldfb_params( ...@@ -113,10 +123,14 @@ ivas_error ivas_reverb_prepare_cldfb_params(
pOutput_ene[idx] *= expf( exp_argument ); 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 ) 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; return error;
} }
#endif
for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ )
{ {
...@@ -126,7 +140,7 @@ ivas_error ivas_reverb_prepare_cldfb_params( ...@@ -126,7 +140,7 @@ ivas_error ivas_reverb_prepare_cldfb_params(
return IVAS_ERR_OK; return IVAS_ERR_OK;
} }
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
/*-----------------------------------------------------------------------------------------* /*-----------------------------------------------------------------------------------------*
* Function ivas_cldfb_convolver() * Function ivas_cldfb_convolver()
* *
...@@ -470,8 +484,20 @@ static ivas_error ivas_reverb_get_cldfb_hrtf_set_properties( ...@@ -470,8 +484,20 @@ static ivas_error ivas_reverb_get_cldfb_hrtf_set_properties(
return IVAS_ERR_OK; 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,
#else
/*-----------------------------------------------------------------------------------------* /*-----------------------------------------------------------------------------------------*
* Function ivas_reverb_get_fastconv_hrtf_set_energies() * Function ivas_reverb_get_fastconv_hrtf_set_energies()
* *
...@@ -484,34 +510,50 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( ...@@ -484,34 +510,50 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies(
const HRTFS_FASTCONV_HANDLE hHrtfFastConv, const HRTFS_FASTCONV_HANDLE hHrtfFastConv,
const AUDIO_CONFIG input_audio_config, const AUDIO_CONFIG input_audio_config,
const int16_t use_brir, const int16_t use_brir,
#endif
const int32_t sampling_rate, const int32_t sampling_rate,
float *avg_pwr_left, float *avg_pwr_left,
float *avg_pwr_right ) float *avg_pwr_right )
{ {
int16_t freq_idx; int16_t freq_idx;
const int16_t cldfb_freq_halfstep = MAX_SAMPLING_RATE / ( 4 * CLDFB_NO_CHANNELS_MAX ); 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_left_fft[FFT_SPECTRUM_SIZE];
float avg_pwr_right_fft[FFT_SPECTRUM_SIZE]; float avg_pwr_right_fft[FFT_SPECTRUM_SIZE];
#endif
float input_fc[FFT_SPECTRUM_SIZE]; float input_fc[FFT_SPECTRUM_SIZE];
float output_fc[CLDFB_NO_CHANNELS_MAX]; float output_fc[CLDFB_NO_CHANNELS_MAX];
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
ivas_error error; 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++ ) 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 ) ); 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++ ) for ( freq_idx = 0; freq_idx < CLDFB_NO_CHANNELS_MAX; freq_idx++ )
{ {
output_fc[freq_idx] = (float) ( ( 2 * freq_idx + 1 ) * cldfb_freq_halfstep ); 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 ) 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; 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 ); 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; return IVAS_ERR_OK;
#endif
} }
...@@ -1063,8 +1063,11 @@ typedef struct TDREND_HRFILT_FiltSet_struct ...@@ -1063,8 +1063,11 @@ typedef struct TDREND_HRFILT_FiltSet_struct
ModelParamsITD_t ModelParamsITD; ModelParamsITD_t ModelParamsITD;
TDREND_HRFILT_Method_t FilterMethod; /* HR filtering method */ TDREND_HRFILT_Method_t FilterMethod; /* HR filtering method */
float latency_s; 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 */ const float *lr_energy_and_iac[3]; /* left/right energy and interaural coherence for late reverb */
float *lr_energy_and_iac_dyn[3]; float *lr_energy_and_iac_dyn[3];
#endif
} TDREND_HRFILT_FiltSet_t; } TDREND_HRFILT_FiltSet_t;
...@@ -1344,6 +1347,15 @@ typedef struct ivas_hrtfs_parambin_struct ...@@ -1344,6 +1347,15 @@ typedef struct ivas_hrtfs_parambin_struct
} HRTFS_PARAMBIN, *HRTFS_PARAMBIN_HANDLE; } HRTFS_PARAMBIN, *HRTFS_PARAMBIN_HANDLE;
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
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).*/
} HRTFS_STATISTICS, *HRTFS_STATISTICS_HANDLE;
#endif
#ifdef SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT
/*----------------------------------------------------------------------------------* /*----------------------------------------------------------------------------------*
......