Loading lib_rend/ivas_reverb.c +78 −4 Original line number Diff line number Diff line Loading @@ -939,15 +939,27 @@ 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]; Loading Loading @@ -989,6 +1001,7 @@ static void set_reverb_acoustic_data( pParams->pHrtf_avg_pwr_response_r_const = (const float *) pParams->pHrtf_avg_pwr_response_r; 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, Loading Loading @@ -1084,9 +1097,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 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 */ ) Loading Loading @@ -1160,6 +1177,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 = 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 ) { params.pHrtf_avg_pwr_response_l_const = lr_energy_and_iac[0]; Loading @@ -1168,6 +1191,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 Loading Loading @@ -1880,6 +1904,56 @@ 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( 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() Loading Loading @@ -1975,7 +2049,7 @@ ivas_error ivas_binaural_reverb_open_parambin( return error; } #endif /*------------------------------------------------------------------------- * ivas_binaural_reverb_close() Loading Loading
lib_rend/ivas_reverb.c +78 −4 Original line number Diff line number Diff line Loading @@ -939,15 +939,27 @@ 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]; Loading Loading @@ -989,6 +1001,7 @@ static void set_reverb_acoustic_data( pParams->pHrtf_avg_pwr_response_r_const = (const float *) pParams->pHrtf_avg_pwr_response_r; 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, Loading Loading @@ -1084,9 +1097,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 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 */ ) Loading Loading @@ -1160,6 +1177,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 = 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 ) { params.pHrtf_avg_pwr_response_l_const = lr_energy_and_iac[0]; Loading @@ -1168,6 +1191,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 Loading Loading @@ -1880,6 +1904,56 @@ 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( 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() Loading Loading @@ -1975,7 +2049,7 @@ ivas_error ivas_binaural_reverb_open_parambin( return error; } #endif /*------------------------------------------------------------------------- * ivas_binaural_reverb_close() Loading