diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 4bb7546b2459996f0de319b8651e7927b52fead3..ebbfc3a8069a2f3aa2d58924717f249e2c5a9f61 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5200,12 +5200,22 @@ ivas_error ivas_render_config_init_from_rom( * Reverberator *----------------------------------------------------------------------------------*/ +#ifdef FIX_I68_MC_REVERB_FOR_514 +ivas_error ivas_reverb_open( + REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ + const AUDIO_CONFIG transport_config, /* i : reverb. input audio configuration */ + const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ + RENDER_CONFIG_DATA *pConfig, /* i : Reverb configuration */ + const int32_t output_Fs /* i : output sampling rate */ +); +#else /* FIX_I68_MC_REVERB_FOR_514 */ ivas_error ivas_reverb_open( REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ RENDER_CONFIG_DATA *pConfig, /* i : Reverb configuration */ const int32_t output_Fs /* i : output sampling rate */ ); +#endif /* FIX_I68_MC_REVERB_FOR_514 */ void ivas_reverb_close( REVERB_HANDLE *hReverb /* i/o: Reverberator handle */ @@ -5378,6 +5388,21 @@ void ivas_reverb_interpolate_acoustic_data( float *pOutput_dsr ); +#ifdef FIX_I68_MC_REVERB_FOR_514 +void ivas_reverb_get_hrtf_set_properties( + float **ppHrtf_set_L_re, + float **ppHrtf_set_L_im, + float **ppHrtf_set_R_re, + float **ppHrtf_set_R_im, + const AUDIO_CONFIG inp_audio_format, + const int16_t hrtf_count, + const int16_t in_freq_count, + const int16_t out_freq_count, + float *pOut_avg_pwr_L, + float *pOut_avg_pwr_R, + float *pOut_i_a_coherence +); +#else /* FIX_I68_MC_REVERB_FOR_514 */ void ivas_reverb_get_hrtf_set_properties( float **ppHrtf_set_L_re, float **ppHrtf_set_L_im, @@ -5390,6 +5415,7 @@ void ivas_reverb_get_hrtf_set_properties( float *pOut_avg_pwr_R, float *pOut_i_a_coherence ); +#endif /* FIX_I68_MC_REVERB_FOR_514 */ /* Orientation tracking */ void ivas_orient_trk_Init( diff --git a/lib_com/options.h b/lib_com/options.h index 1dc4b8192374db8a3a96c5c081be0cc7a48eb5ea..314b872e7d62d13981efcd5df282e01f227816d3 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -155,6 +155,8 @@ #define FIX_34 /* Nokia: Fix bug in MASA format EXT output spherical indexing */ +#define FIX_I68_MC_REVERB_FOR_514 /* Fix HRTF processing for Jot reverb in case of 5.1.4 input format */ + #define FIX_I54_LS_CONVERSION /* FhG: fix incorrect downmix matrix for 5_1_4 to 5_1_2 and upmix matrix for 7_1 to 7_1_4 */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_crend.c b/lib_dec/ivas_crend.c index abf1269373240a43842ba2c14bcf91ddb09cbe30..d773dae239bfec39bed63499312ff4f06b28dbea 100644 --- a/lib_dec/ivas_crend.c +++ b/lib_dec/ivas_crend.c @@ -784,7 +784,11 @@ ivas_error ivas_crend_open( if ( ( ( st_ivas->hRenderConfig != NULL ) && st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) ) { +#ifdef FIX_I68_MC_REVERB_FOR_514 + if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), st_ivas->intern_config, hHrtf, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#else /* FIX_I68_MC_REVERB_FOR_514 */ if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), hHrtf, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) +#endif /* FIX_I68_MC_REVERB_FOR_514 */ { return error; } diff --git a/lib_dec/ivas_objectRenderer.c b/lib_dec/ivas_objectRenderer.c index 05e617b3bf2f3dda49e9228fbcf3513aaade171e..458bcaa702e5244dc15465f2c9d7b45ba7744dd6 100644 --- a/lib_dec/ivas_objectRenderer.c +++ b/lib_dec/ivas_objectRenderer.c @@ -308,7 +308,11 @@ ivas_error ObjRenderIVASFrame( { if ( st_ivas->ini_frame == 0 ) { +#ifdef FIX_I68_MC_REVERB_FOR_514 + ivas_reverb_open( &st_ivas->hCrend->hReverb, st_ivas->transport_config, NULL, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ); +#else /* FIX_I68_MC_REVERB_FOR_514 */ ivas_reverb_open( &st_ivas->hCrend->hReverb, NULL, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ); +#endif /* FIX_I68_MC_REVERB_FOR_514 */ } for ( subframe_idx = 0; subframe_idx < 4; subframe_idx++ ) { diff --git a/lib_dec/ivas_reverb.c b/lib_dec/ivas_reverb.c index e89725d6608b01a2a4d73b1ff812f0102ba7f7d0..5a7059152bf084859a53fb69cfe89ce3db7945c0 100644 --- a/lib_dec/ivas_reverb.c +++ b/lib_dec/ivas_reverb.c @@ -778,7 +778,11 @@ static void set_fft_and_datablock_sizes( REVERB_HANDLE pState, int16_t subframe_ * Sets reverb acoustic data (room acoustics and HRTF), interpolating it to the filter grid *-----------------------------------------------------------------------------------------*/ +#ifdef FIX_I68_MC_REVERB_FOR_514 +static void set_reverb_acoustic_data( ivas_reverb_params_t *pParams, const AUDIO_CONFIG inp_audio_config, const HRTFS_HANDLE hHrtf, ivas_roomAcoustics_t *pRoomAcoustics, int16_t subframe_len, int16_t nr_fc_input, int16_t nr_fc_fft_filter ) +#else /* FIX_I68_MC_REVERB_FOR_514 */ static void set_reverb_acoustic_data( ivas_reverb_params_t *pParams, const HRTFS_HANDLE hHrtf, ivas_roomAcoustics_t *pRoomAcoustics, int16_t subframe_len, int16_t nr_fc_input, int16_t nr_fc_fft_filter ) +#endif /* FIX_I68_MC_REVERB_FOR_514 */ { int16_t nr_out_ch, hrtf_idx, offset, iter_idx, bin_idx; float ln_1e6_inverted, delay_diff, exp_argument; @@ -816,8 +820,13 @@ static void set_reverb_acoustic_data( ivas_reverb_params_t *pParams, const HRTFS } /* Compute HRTF set properties using frequency-domain HRTF data */ +#ifdef FIX_I68_MC_REVERB_FOR_514 + ivas_reverb_get_hrtf_set_properties( pHrtf_set_l_re, pHrtf_set_l_im, pHrtf_set_r_re, pHrtf_set_r_im, inp_audio_config, hHrtf->max_num_ir, subframe_len, + nr_fc_fft_filter, pParams->pHrtf_avg_pwr_response_l, pParams->pHrtf_avg_pwr_response_r, pParams->pHrtf_inter_aural_coherence ); +#else /* FIX_I68_MC_REVERB_FOR_514 */ ivas_reverb_get_hrtf_set_properties( pHrtf_set_l_re, pHrtf_set_l_im, pHrtf_set_r_re, pHrtf_set_r_im, hHrtf->max_num_ir, subframe_len, nr_fc_fft_filter, pParams->pHrtf_avg_pwr_response_l, pParams->pHrtf_avg_pwr_response_r, pParams->pHrtf_inter_aural_coherence ); +#endif /* FIX_I68_MC_REVERB_FOR_514 */ pParams->pHrtf_avg_pwr_response_l_const = (const float *) pParams->pHrtf_avg_pwr_response_l; pParams->pHrtf_avg_pwr_response_r_const = (const float *) pParams->pHrtf_avg_pwr_response_r; @@ -917,12 +926,22 @@ static ivas_error setup_FDN_branches( REVERB_HANDLE pState, ivas_reverb_params_t * Allocate and initialize Crend reverberation handle *------------------------------------------------------------------------*/ +#ifdef FIX_I68_MC_REVERB_FOR_514 +ivas_error ivas_reverb_open( + REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ + const AUDIO_CONFIG transport_config,/* i : reverb. input audio configuration */ + const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ + RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ + const int32_t output_Fs /* i : output sampling rate */ +) +#else /* FIX_I68_MC_REVERB_FOR_514 */ ivas_error ivas_reverb_open( REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ const int32_t output_Fs /* i : output sampling rate */ ) +#endif /* FIX_I68_MC_REVERB_FOR_514 */ { ivas_error error; REVERB_HANDLE pState = NULL; @@ -994,7 +1013,11 @@ ivas_error ivas_reverb_open( } /* set up reverb acoustic data on the basis of HRTF data and renderer config */ +#ifdef FIX_I68_MC_REVERB_FOR_514 + set_reverb_acoustic_data( ¶ms, transport_config, hHrtf, &hRenderConfig->roomAcoustics, subframe_len, nr_fc_input, nr_fc_fft_filter ); +#else /* FIX_I68_MC_REVERB_FOR_514 */ set_reverb_acoustic_data( ¶ms, hHrtf, &hRenderConfig->roomAcoustics, subframe_len, nr_fc_input, nr_fc_fft_filter ); +#endif /* FIX_I68_MC_REVERB_FOR_514 */ /* set up input downmix */ pState->dmx_gain = calc_dmx_gain(); diff --git a/lib_dec/ivas_reverb_filter_design.c b/lib_dec/ivas_reverb_filter_design.c index daa3bc2525c60644e9dc49dd0c791d7bdf3d44b6..19c056d8f763b42fed2ff37aeebfbea68c7fc0a2 100644 --- a/lib_dec/ivas_reverb_filter_design.c +++ b/lib_dec/ivas_reverb_filter_design.c @@ -621,6 +621,9 @@ void ivas_reverb_get_hrtf_set_properties( float **ppHrtf_set_L_im, float **ppHrtf_set_R_re, float **ppHrtf_set_R_im, +#ifdef FIX_I68_MC_REVERB_FOR_514 + const AUDIO_CONFIG inp_audio_format, +#endif /* FIX_I68_MC_REVERB_FOR_514 */ const int16_t hrtf_count, const int16_t in_freq_count, const int16_t out_freq_count, @@ -644,7 +647,11 @@ void ivas_reverb_get_hrtf_set_properties( float avg_pwr_right[2]; float IA_coherence[2]; +#ifdef FIX_I68_MC_REVERB_FOR_514 + if ( inp_audio_format == AUDIO_CONFIG_FOA || inp_audio_format == AUDIO_CONFIG_HOA2 || inp_audio_format == AUDIO_CONFIG_HOA3 ) +#else /* FIX_I68_MC_REVERB_FOR_514 */ if ( hrtf_count == 4 || hrtf_count == 9 || hrtf_count == 16 ) +#endif /* FIX_I68_MC_REVERB_FOR_514 */ { is_ambisonics = 1; used_hrtf_count = 4; /* Using only 1st order HRTFs */