Commit 14899ead authored by Devansh Kandpal's avatar Devansh Kandpal
Browse files

changes in ivas_reverb.c

parent cca5f5e5
Loading
Loading
Loading
Loading
+78 −4
Original line number Diff line number Diff line
@@ -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];
@@ -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,
@@ -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              */
)
@@ -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( &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 )
    {
        params.pHrtf_avg_pwr_response_l_const = lr_energy_and_iac[0];
@@ -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( &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  */
#ifdef DEBUGGING
@@ -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()
@@ -1975,7 +2049,7 @@ ivas_error ivas_binaural_reverb_open_parambin(

    return error;
}

#endif

/*-------------------------------------------------------------------------
 * ivas_binaural_reverb_close()