Commit 06917878 authored by Devansh Kandpal's avatar Devansh Kandpal
Browse files

All reverb .c files from lib_rend

parent e22f1a9f
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -919,6 +919,9 @@ void ivas_reverb_interpolate_acoustic_data_fx(

    return;
}


#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
/*-------------------------------------------------------------------*
 * ivas_reverb_get_hrtf_set_properties()
 *
@@ -1174,3 +1177,4 @@ void ivas_reverb_get_hrtf_set_properties_fx(

    return;
}
#endif
+80 −8
Original line number Diff line number Diff line
@@ -1264,21 +1264,32 @@ static void set_fft_and_datablock_sizes_fx(

static void set_reverb_acoustic_data_fx(
    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 Word16 subframe_len,
#endif
    const Word16 nr_fc_input,
    const Word16 nr_fc_fft_filter )
{
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
    int16_t bin_idx;
#else
    Word16 nr_out_ch, hrtf_idx, offset, iter_idx, bin_idx;
#endif
    Word32 ln_1e6_inverted_fx, delay_diff_fx, L_tmp;
    Word16 exp_argument_fx, tmp, tmp_flag, exp_argument_e;
    Word16 pow_exp;
#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
#else
    Word32 *pHrtf_set_l_re_fx[MAX_INTERN_CHANNELS];
    Word32 *pHrtf_set_l_im_fx[MAX_INTERN_CHANNELS];
    Word32 *pHrtf_set_r_re_fx[MAX_INTERN_CHANNELS];
    Word32 *pHrtf_set_r_im_fx[MAX_INTERN_CHANNELS];
    Word32 ln_1e6_inverted_fx, delay_diff_fx, L_tmp;
    Word16 exp_argument_fx, tmp, tmp_flag, exp_argument_e;
    Word16 pow_exp;

    Word32 *pFc_input_fx = pRoomAcoustics->pFc_input_fx;
    Word32 *pAcoustic_rt60_fx = pRoomAcoustics->pAcoustic_rt60_fx;
@@ -1330,7 +1341,7 @@ static void set_reverb_acoustic_data_fx(
        pParams->pHrtf_avg_pwr_response_r_const_fx = (const Word32 *) pParams->pHrtf_avg_pwr_response_r_fx;
        pParams->pHrtf_inter_aural_coherence_const_fx = (const Word32 *) pParams->pHrtf_inter_aural_coherence_fx;
    }

#endif
    /* interpolate input table data for T60 and DSR to the FFT filter grid */
    ivas_reverb_interpolate_acoustic_data_fx( nr_fc_input, pFc_input_fx, pAcoustic_rt60_fx, pAcoustic_dsr_fx,
                                              nr_fc_fft_filter, pFc_fx, pRt60_fx, pDsr_fx, pRt60_e, pDsr_e );
@@ -1462,12 +1473,15 @@ static ivas_error setup_FDN_branches_fx(

ivas_error ivas_reverb_open_fx(
    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 Word32 *lr_energy_and_iac_fx[],  /* i  : precomuputed lr energies and iac  */
#endif
    RENDER_CONFIG_HANDLE hRenderConfig, /* i  : Renderer configuration handle     */
    const Word32 output_Fs                 /* i  : output sampling rate              */
)
    const int32_t output_Fs )
{
    ivas_error error;
    REVERB_HANDLE pState = NULL;
@@ -1541,6 +1555,13 @@ ivas_error ivas_reverb_open_fx(
    }

    test();

#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_fx != NULL )
    {
        params.pHrtf_avg_pwr_response_l_const_fx = lr_energy_and_iac_fx[0];
@@ -1564,6 +1585,7 @@ ivas_error ivas_reverb_open_fx(
        params.pDsr_fx[i] = L_abs( params.pDsr_fx[i] );
        move32();
    }
#endif

    /* set reverb acoustic configuration based on renderer config  */
    pState->pConfig.roomAcoustics.override = hRenderConfig->roomAcoustics.override;
@@ -2416,6 +2438,55 @@ static ivas_error ivas_binaural_reverb_open_fx(
    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;
}
/*-------------------------------------------------------------------------
 * ivas_binaural_reverb_open_fastconv()
 *
@@ -2515,6 +2586,7 @@ ivas_error ivas_binaural_reverb_open_parambin(

    return error;
}
#endif

/*-------------------------------------------------------------------------
 * ivas_binaural_reverb_close()
+46 −5
Original line number Diff line number Diff line
@@ -64,8 +64,11 @@ typedef struct cldfb_convolver_state
    float filter_states_im[BINAURAL_CONVBANDS][CLDFB_CONVOLVER_NTAPS_MAX];
} 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 );

#endif

/*-----------------------------------------------------------------------------------------*
 * Function ivas_reverb_prepare_cldfb_params()
@@ -74,10 +77,15 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( const HRTFS_FASTCO
 *-----------------------------------------------------------------------------------------*/

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,
    const HRTFS_FASTCONV_HANDLE hHrtfFastConv,
    const AUDIO_CONFIG input_audio_config,
    const int16_t use_brir,
#endif
    const int32_t output_Fs,
    float *pOutput_t60,
    float *pOutput_ene )
@@ -89,7 +97,9 @@ ivas_error ivas_reverb_prepare_cldfb_params(
    float delay_diff, ln_1e6_inverted, exp_argument;
    const float dist = DEFAULT_SRC_DIST;
    const float dmx_gain_2 = 4.0f * EVS_PI * dist * dist / 0.001f;
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
    ivas_error error;
#endif

    for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ )
    {
@@ -133,11 +143,14 @@ ivas_error ivas_reverb_prepare_cldfb_params(
        exp_argument = max( exp_argument, -23.0f );
        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 )
    {
        return error;
    }
#endif

    for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ )
    {
@@ -147,13 +160,13 @@ ivas_error ivas_reverb_prepare_cldfb_params(
    return IVAS_ERR_OK;
}


#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
/*-----------------------------------------------------------------------------------------*
 * Function ivas_cldfb_convolver()
 *
 * Function for convolving CLDFB-domain data with filter taps
 *-----------------------------------------------------------------------------------------*/

#endif

/*-----------------------------------------------------------------------------------------*
 * Function get_IR_from_filter_taps()
@@ -260,7 +273,18 @@ static ivas_error ivas_reverb_get_cldfb_hrtf_set_properties(
    return IVAS_ERR_OK;
}

#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()
 *
@@ -273,21 +297,34 @@ 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,
#endif
    const int32_t sampling_rate,
    float *avg_pwr_left,
    float *avg_pwr_right )
{
    int16_t freq_idx;
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
    float avg_pwr_left_fft[FFT_SPECTRUM_SIZE];
    float avg_pwr_right_fft[FFT_SPECTRUM_SIZE];
#endif
    float input_fc[FFT_SPECTRUM_SIZE];
#ifndef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
    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++ )
    {
        input_fc[freq_idx] = freq_idx * ( 0.5f * sampling_rate / (float) ( FFT_SPECTRUM_SIZE - 1 ) );
    }

#endif

    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 )
    {
@@ -315,6 +352,9 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies(
        output_fc_fx[i] = (Word32) input_fc[i] * ONE_IN_Q16;
    }

#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
    ivas_reverb_interpolate_acoustic_data_fx( FFT_SPECTRUM_SIZE, input_fc_fx, avg_pwr_left_fft_fx, avg_pwr_right_fft_fx,
                                              CLDFB_NO_CHANNELS_MAX, output_fc_fx, avg_pwr_left_fx, avg_pwr_right_fx, avg_pwr_left_e, avg_pwr_right_e );
    for ( int i = 0; i < 257; i++ )
@@ -331,4 +371,5 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies(
    free( avg_pwr_right_fx );
    free( avg_pwr_right_e );
    return IVAS_ERR_OK;
#endif
}