Commit ead644bc authored by emerit's avatar emerit
Browse files

for iac and energy values of reverb use float values in rom and do the fix...

for iac and energy values of reverb use float values in rom and do the fix point conversion at init. Initialisation in Q28 for energy and Q26 for coherence
parent b15afd71
Loading
Loading
Loading
Loading
+72 −0
Original line number Diff line number Diff line
@@ -288,6 +288,77 @@ ivas_error ivas_HRTF_statistics_init(

    switch ( sampleRate )
    {
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
        case 48000:
            HrtfStatistics->average_energy_l_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( Word32 ) );
            if ( HrtfStatistics->average_energy_l_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            HrtfStatistics->average_energy_r_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( Word32 ) );
            if ( HrtfStatistics->average_energy_r_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            HrtfStatistics->inter_aural_coherence_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( Word32 ) );
            if ( HrtfStatistics->inter_aural_coherence_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            floatToFixed_arr32( defaultHRIR_left_avg_power_48kHz_fx, HrtfStatistics->average_energy_l_dyn, Q28, LR_IAC_LENGTH_NR_FC );  /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            floatToFixed_arr32( defaultHRIR_right_avg_power_48kHz_fx, HrtfStatistics->average_energy_r_dyn, Q28, LR_IAC_LENGTH_NR_FC ); /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            floatToFixed_arr32( defaultHRIR_coherence_48kHz_fx, HrtfStatistics->inter_aural_coherence_dyn, Q26, LR_IAC_LENGTH_NR_FC );  /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            HrtfStatistics->average_energy_l = (const Word32 *) HrtfStatistics->average_energy_l_dyn;
            HrtfStatistics->average_energy_r = (const Word32 *) HrtfStatistics->average_energy_r_dyn;
            HrtfStatistics->inter_aural_coherence = (const Word32 *) HrtfStatistics->inter_aural_coherence_dyn;
            break;
        case 32000:
            HrtfStatistics->average_energy_l_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( Word32 ) );
            if ( HrtfStatistics->average_energy_l_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            HrtfStatistics->average_energy_r_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( Word32 ) );
            if ( HrtfStatistics->average_energy_r_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            HrtfStatistics->inter_aural_coherence_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( Word32 ) );
            if ( HrtfStatistics->inter_aural_coherence_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            floatToFixed_arr32( defaultHRIR_left_avg_power_32kHz_fx, HrtfStatistics->average_energy_l_dyn, Q28, LR_IAC_LENGTH_NR_FC );  /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            floatToFixed_arr32( defaultHRIR_right_avg_power_32kHz_fx, HrtfStatistics->average_energy_r_dyn, Q28, LR_IAC_LENGTH_NR_FC ); /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            floatToFixed_arr32( defaultHRIR_coherence_32kHz_fx, HrtfStatistics->inter_aural_coherence_dyn, Q26, LR_IAC_LENGTH_NR_FC );  /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            HrtfStatistics->average_energy_l = (const Word32 *) HrtfStatistics->average_energy_l_dyn;
            HrtfStatistics->average_energy_r = (const Word32 *) HrtfStatistics->average_energy_r_dyn;
            HrtfStatistics->inter_aural_coherence = (const Word32 *) HrtfStatistics->inter_aural_coherence_dyn;
            break;
        case 16000:
            HrtfStatistics->average_energy_l_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC_16KHZ * sizeof( Word32 ) );
            if ( HrtfStatistics->average_energy_l_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            HrtfStatistics->average_energy_r_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC_16KHZ * sizeof( Word32 ) );
            if ( HrtfStatistics->average_energy_r_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            HrtfStatistics->inter_aural_coherence_dyn = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC_16KHZ * sizeof( Word32 ) );
            if ( HrtfStatistics->inter_aural_coherence_dyn == NULL )
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            floatToFixed_arr32( defaultHRIR_left_avg_power_16kHz_fx, HrtfStatistics->average_energy_l_dyn, Q28, LR_IAC_LENGTH_NR_FC_16KHZ );  /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            floatToFixed_arr32( defaultHRIR_right_avg_power_16kHz_fx, HrtfStatistics->average_energy_r_dyn, Q28, LR_IAC_LENGTH_NR_FC_16KHZ ); /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            floatToFixed_arr32( defaultHRIR_coherence_16kHz_fx, HrtfStatistics->inter_aural_coherence_dyn, Q26, LR_IAC_LENGTH_NR_FC_16KHZ );  /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */
            HrtfStatistics->average_energy_l = (const Word32 *) HrtfStatistics->average_energy_l_dyn;
            HrtfStatistics->average_energy_r = (const Word32 *) HrtfStatistics->average_energy_r_dyn;
            HrtfStatistics->inter_aural_coherence = (const Word32 *) HrtfStatistics->inter_aural_coherence_dyn;
            break;
#else
        case 48000:
            HrtfStatistics->average_energy_l = defaultHRIR_left_avg_power_48kHz_fx;
            HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_48kHz_fx;
@@ -303,6 +374,7 @@ ivas_error ivas_HRTF_statistics_init(
            HrtfStatistics->average_energy_r = defaultHRIR_right_avg_power_16kHz_fx;
            HrtfStatistics->inter_aural_coherence = defaultHRIR_coherence_16kHz_fx;
            break;
#endif
    }
    HrtfStatistics->fromROM = TRUE;

+11 −0
Original line number Diff line number Diff line
@@ -1644,10 +1644,17 @@ ivas_error ivas_reverb_open_fx(
    {
        params.pDsr_fx[i] = L_shl( params.pDsr_fx[i], params.pDsr_e[i] );
        move32();
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
        pHrtf_avg_pwr_response_l_const[i] = params.pHrtf_avg_pwr_response_l_const_fx[i]; /*Q28*/
        move32();
        pHrtf_avg_pwr_response_r_const[i] = params.pHrtf_avg_pwr_response_r_const_fx[i]; /*Q23+5*/
        move32();
#else
        pHrtf_avg_pwr_response_l_const[i] = L_shl( params.pHrtf_avg_pwr_response_l_const_fx[i], 5 ); /*Q23+5*/
        move32();
        pHrtf_avg_pwr_response_r_const[i] = L_shl( params.pHrtf_avg_pwr_response_r_const_fx[i], 5 ); /*Q23+5*/
        move32();
#endif
    }
    FOR( i = 0; i < lenT60_filter_coeff; i++ )
    {
@@ -1695,7 +1702,11 @@ ivas_error ivas_reverb_open_fx(
        Word32 *pHrtf_inter_aural_coherence_const = (Word32 *) malloc( nr_fc_fft_filter * sizeof( Word32 ) );
        FOR( i = 0; i < nr_fc_fft_filter; i++ )
        {
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
            pHrtf_inter_aural_coherence_const[i] = L_shl( params.pHrtf_inter_aural_coherence_const_fx[i], 3 ); /*Scaling up to Q30*/
#else
            pHrtf_inter_aural_coherence_const[i] = params.pHrtf_inter_aural_coherence_const_fx[i]; /*Scaling up to Q30*/
#endif
            move32();
        }
        ivas_reverb_calc_correl_filters_fx( pHrtf_inter_aural_coherence_const, pTime_window_fx, pState->fft_size, pFft_wf_filter_ch0_fx, pFft_wf_filter_ch1_fx, &q_pFft_wf_filter_ch0_fx, &q_pFft_wf_filter_ch1_fx );
+9 −5
Original line number Diff line number Diff line
@@ -311,7 +311,11 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies(
#endif

#ifdef NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
    const int16_t avg_pwr_len = sampling_rate == 16000 ? LR_IAC_LENGTH_NR_FC_16KHZ : LR_IAC_LENGTH_NR_FC;
#else
    const int16_t avg_pwr_len = LR_IAC_LENGTH_NR_FC;
#endif

    for ( freq_idx = 0; freq_idx < avg_pwr_len; freq_idx++ )
    {
@@ -328,11 +332,11 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies(

    Word32 *input_fc_fx = (Word32 *) malloc( 60 * sizeof( Word32 ) );

    Word32 *output_fc_fx = (Word32 *) malloc( 257 * sizeof( Word32 ) );
    Word16 *avg_pwr_left_e = (Word16 *) malloc( 257 * sizeof( Word16 ) );
    Word16 *avg_pwr_right_e = (Word16 *) malloc( 257 * sizeof( Word16 ) );
    Word32 *avg_pwr_left_fx = (Word32 *) malloc( 257 * sizeof( Word32 ) );
    Word32 *avg_pwr_right_fx = (Word32 *) malloc( 257 * sizeof( Word32 ) );
    Word32 *output_fc_fx = (Word32 *) malloc( avg_pwr_len * sizeof( Word32 ) );
    Word16 *avg_pwr_left_e = (Word16 *) malloc( avg_pwr_len * sizeof( Word16 ) );
    Word16 *avg_pwr_right_e = (Word16 *) malloc( avg_pwr_len * sizeof( Word16 ) );
    Word32 *avg_pwr_left_fx = (Word32 *) malloc( avg_pwr_len * sizeof( Word32 ) );
    Word32 *avg_pwr_right_fx = (Word32 *) malloc( avg_pwr_len * sizeof( Word32 ) );

    for ( int i = 0; i < 60; i++ )
    {
+13 −17
Original line number Diff line number Diff line
@@ -349,6 +349,19 @@ extern Word32 CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS
extern Word32 CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS][2522];

#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
extern  float defaultHRIR_coherence_48kHz_fx[LR_IAC_LENGTH_NR_FC];       /*Q-27*/
extern  float defaultHRIR_left_avg_power_48kHz_fx[LR_IAC_LENGTH_NR_FC];  /*Q-23*/
extern  float defaultHRIR_right_avg_power_48kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-23*/

extern  float defaultHRIR_coherence_32kHz_fx[LR_IAC_LENGTH_NR_FC];       /*Q-27*/
extern  float defaultHRIR_left_avg_power_32kHz_fx[LR_IAC_LENGTH_NR_FC];  /*Q-23*/
extern  float defaultHRIR_right_avg_power_32kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-23*/

extern   float defaultHRIR_coherence_16kHz_fx[LR_IAC_LENGTH_NR_FC_16KHZ];       /*Q-27*/
extern   float defaultHRIR_left_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC_16KHZ];  /*Q-23*/
extern   float defaultHRIR_right_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC_16KHZ]; /*Q-23*/
#else
extern const Word32 defaultHRIR_coherence_48kHz_fx[LR_IAC_LENGTH_NR_FC];       /*Q-27*/
extern const Word32 defaultHRIR_left_avg_power_48kHz_fx[LR_IAC_LENGTH_NR_FC];  /*Q-23*/
extern const Word32 defaultHRIR_right_avg_power_48kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-23*/
@@ -357,23 +370,6 @@ extern const Word32 defaultHRIR_coherence_32kHz_fx[LR_IAC_LENGTH_NR_FC]; /
extern const Word32 defaultHRIR_left_avg_power_32kHz_fx[LR_IAC_LENGTH_NR_FC];  /*Q-23*/
extern const Word32 defaultHRIR_right_avg_power_32kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-23*/

extern const Word32 defaultHRIR_coherence_16kHz_fx[LR_IAC_LENGTH_NR_FC_16KHZ];       /*Q-27*/
extern const Word32 defaultHRIR_left_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC_16KHZ];  /*Q-23*/
extern const Word32 defaultHRIR_right_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC_16KHZ]; /*Q-23*/

#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
extern const float defaultHRIR_coherence_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ];       /*Q-27*/
extern const float defaultHRIR_left_avg_power_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ];  /*Q-23*/
extern const float defaultHRIR_right_avg_power_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ]; /*Q-23*/

extern const float defaultHRIR_coherence_32kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_left_avg_power_32kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_right_avg_power_32kHz[LR_IAC_LENGTH_NR_FC];

extern const float defaultHRIR_coherence_48kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_left_avg_power_48kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_right_avg_power_48kHz[LR_IAC_LENGTH_NR_FC];
#else
extern const Word32 defaultHRIR_coherence_16kHz_fx[LR_IAC_LENGTH_NR_FC];       /*Q-27*/
extern const Word32 defaultHRIR_left_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC];  /*Q-23*/
extern const Word32 defaultHRIR_right_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-23*/
+343 −59

File changed.

Preview size limit exceeded, changes collapsed.

Loading