Skip to content
......@@ -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
......@@ -291,7 +294,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
......@@ -1438,7 +1445,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
......@@ -1481,7 +1492,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;
}
......@@ -1494,7 +1509,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;
}
......@@ -1502,7 +1521,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
......@@ -2199,6 +2222,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 hHrtfStatistics,
#endif
#endif
uint8_t reconfigureFlag )
{
......@@ -2302,7 +2328,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 ), 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
{
return error;
}
......@@ -2313,17 +2343,24 @@ 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 )
#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, 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
#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 )
#endif
......@@ -2540,7 +2577,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
......@@ -2746,6 +2787,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 hHrtfStatistics
#endif
#else
RENDER_CONFIG_DATA *hRendCfg
#endif
......@@ -2810,10 +2855,18 @@ 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 )
#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 )
......@@ -2835,10 +2888,18 @@ 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 )
#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 )
......@@ -3011,7 +3072,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
......@@ -3094,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;
......@@ -3106,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 ) )
{
......@@ -3135,7 +3205,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
......@@ -3408,6 +3482,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 )
......@@ -3426,7 +3503,19 @@ 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
}
#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;
......@@ -3574,7 +3663,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 +4147,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 +4996,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 +5066,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 )
{
......@@ -8643,6 +8745,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_close( &( hIvasRend->hHrtfs.hHrtfStatistics ) );
#endif
#endif
free( hIvasRend );
......@@ -8887,6 +8992,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 **hHrtfStatistics /* o : HRTF statistics handle */
)
{
if ( hIvasRend == NULL || hIvasRend->hHrtfs.hHrtfStatistics == NULL )
{
return IVAS_ERR_WRONG_PARAMS;
}
*hHrtfStatistics = &hIvasRend->hHrtfs.hHrtfStatistics;
return IVAS_ERR_OK;
}
#endif
static ivas_error ivas_masa_ext_rend_dirac_rend_init(
input_masa *inputMasa )
......@@ -9249,7 +9376,13 @@ 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 */
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
)
{
DIRAC_DEC_BIN_HANDLE hDiracDecBin;
......@@ -9349,8 +9482,12 @@ static ivas_error ivas_masa_ext_rend_parambin_init(
if ( hDiracDecBin->hReverb == NULL )
#endif
{
#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 )
#endif
{
return error;
}
......@@ -9405,6 +9542,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
......@@ -9542,7 +9682,11 @@ static ivas_error initMasaExtRenderer(
}
}
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
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
{
return error;
}
......
......@@ -203,25 +203,32 @@ 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 **hHrtfStatistics /* o : HRTF statistics handle */
);
#endif
#endif
/* Functions to be called during rendering */
......
......@@ -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()
*
......@@ -556,6 +557,7 @@ static ivas_error set_default_reverb_iac_energy(
return IVAS_ERR_OK;
}
#endif
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
......@@ -566,11 +568,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 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
FILE *f_hrtf /* i : HR filter data file handle */
)
{
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
int16_t i;
#endif
bool is_reverb;
ivas_error header_check_result;
ivas_hrtfs_file_header_t hrtfs_file_header;
......@@ -581,13 +590,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 ( hHrtfStatistics == 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;
}
......@@ -645,6 +662,21 @@ static ivas_error load_reverb_from_binary(
if ( is_reverb )
{
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
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 ( 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( 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 */
for ( i = 0; i < 3; i++ )
{
......@@ -670,14 +702,17 @@ 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
#else
if ( ( header_check_result = set_default_reverb_iac_energy( HrFiltSet_p ) ) != IVAS_ERR_OK )
{
return header_check_result;
}
#endif
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
return IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA;
#else
......@@ -696,13 +731,22 @@ 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 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 */
)
{
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
......@@ -986,10 +1030,12 @@ void 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 );
......@@ -2236,3 +2282,24 @@ ivas_error destroy_SetOfHRTF(
return IVAS_ERR_OK;
}
#endif
#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 == FALSE )
{
free( ( *hHrtfStatistics )->average_energy_l );
free( ( *hHrtfStatistics )->average_energy_r );
free( ( *hHrtfStatistics )->inter_aural_coherence );
}
ivas_HRTF_statistics_close( hHrtfStatistics );
return IVAS_ERR_OK;
}
#endif
......@@ -101,7 +101,12 @@ ivas_error load_HRTF_binary(
*---------------------------------------------------------------------*/
ivas_error load_reverb_binary(
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
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
const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */
);
#endif
......@@ -190,6 +195,18 @@ void destroy_td_hrtf(
IVAS_DEC_HRTF_HANDLE *hHRTF /* i/o: HRTF handle */
);
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
/*---------------------------------------------------------------------*
* 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 */
);
#endif
#else
/*---------------------------------------------------------------------*
* dealloc_HRTF_binary()
......