Commit b902015e authored by emerit's avatar emerit
Browse files

bug fix

parent 3258593a
Loading
Loading
Loading
Loading
+113 −16
Original line number Diff line number Diff line
@@ -37,6 +37,10 @@

#include "ivas_prot.h"

#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
#include "ivas_rom_binaural_crend_head.h"
#endif

/*---------------------------------------------------------------------*
 * Local structures
 *---------------------------------------------------------------------*/
@@ -457,7 +461,73 @@ static ivas_error LoadBSplineBinary(

#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
/*-------------------------------------------------------------------*
 * LoadBReverbBinary()
 * set_default_reverb_iac_energy()
 *
 * Loads reverb data from file.
 --------------------------------------------------------------------*/
static ivas_error set_default_reverb_iac_energy(
    IVAS_DEC_HRTF_HANDLE HrFiltSet_p /* i/o: HR filter model parameter structure */
)
{
    ivas_error error = IVAS_ERR_OK;
    int16_t i;

    if ( HrFiltSet_p == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    if ( HrFiltSet_p->ModelParams.modelROM == 0 )
    {
        for ( i = 0; i < 3; i++ )
        {
            HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) );
        }
        switch ( HrFiltSet_p->SampleRate )
        {
            case 48000:
                mvr2r( defaultHRIR_left_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC );
                mvr2r( defaultHRIR_right_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC );
                mvr2r( defaultHRIR_coherence_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC );
                break;
            case 32000:
                mvr2r( defaultHRIR_left_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC );
                mvr2r( defaultHRIR_right_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC );
                mvr2r( defaultHRIR_coherence_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC );
                break;
            case 16000:
                mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC );
                mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC );
                mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC );
                break;
        }
    }
    else
    {
        switch ( HrFiltSet_p->SampleRate )
        {
            case 48000:
                HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_48kHz;
                HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_48kHz;
                HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_48kHz;
                break;
            case 32000:
                HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_32kHz;
                HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_32kHz;
                HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_32kHz;
                break;
            case 16000:
                HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_16kHz;
                HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_16kHz;
                HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz;
                break;
        }
    }
    return error;
}

/*-------------------------------------------------------------------*
 * load_reverb_from_binary()
 *
 * Loads reverb data from file.
 --------------------------------------------------------------------*/
@@ -481,6 +551,7 @@ static ivas_error load_reverb_from_binary(

    if ( ( header_check_result = read_and_check_hrtf_binary_file_header( &hrtfs_file_header, f_hrtf ) ) != IVAS_ERR_OK )
    {
        set_default_reverb_iac_energy( HrFiltSet_p );
        return header_check_result;
    }

@@ -524,6 +595,8 @@ static ivas_error load_reverb_from_binary(

    free( hrtf_data );

    if ( is_reverb )
    {
        /* left/right energy and interaural coherence for late reverb */
        for ( i = 0; i < 3; i++ )
        {
@@ -531,6 +604,11 @@ static ivas_error load_reverb_from_binary(
            fread( HrFiltSet_p->lr_energy_and_iac_dyn[i], sizeof( const float ), LR_IAC_LENGTH_NR_FC, f_hrtf );
            HrFiltSet_p->lr_energy_and_iac[i] = (const float *) HrFiltSet_p->lr_energy_and_iac_dyn[i];
        }
    }
    else
    {
        set_default_reverb_iac_energy( HrFiltSet_p );
    }

    return IVAS_ERR_OK;
}
@@ -582,7 +660,26 @@ static ivas_error TDREND_MIX_LoadHRTF(

    if ( ( header_check_result = read_and_check_hrtf_binary_file_header( &hrtfs_file_header, f_hrtf ) ) != IVAS_ERR_OK )
    {
        return header_check_result;
        error = header_check_result;
        /* try if it is old format for BE tests*/
        fseek( f_hrtf, 0, SEEK_SET );
        if ( fread( &tmp, 1, sizeof( int16_t ), f_hrtf ) == 0 )
        {
            error = IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" );
        }

        HrFiltSet_p->FilterMethod = (TDREND_HRFILT_Method_t) tmp;

        if ( HrFiltSet_p->FilterMethod != TDREND_HRFILT_Method_BSplineModel )
        {
            error = IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "The HR filter set file is not a supported type." );
        }
        else
        {
            error = LoadBSplineBinary( HrFiltSet_p, f_hrtf );
        }

        return error;
    }

    is_tdrend = FALSE;
+2 −33
Original line number Diff line number Diff line
@@ -2539,7 +2539,7 @@ int16_t check_bin_file( FILE *hrtf_bin_file )
    uint32_t hrtf_data_size_max;
    int16_t nbHRTF;
#endif
    char *file_header; //, *hrtf_data, *hrtf_data_rptr;
    char *file_header;
    ivas_hrtfs_header_t hrtf_header;
    int16_t result;

@@ -2627,39 +2627,8 @@ int16_t check_bin_file( FILE *hrtf_bin_file )
        while ( fread( &hrtf_header, sizeof( ivas_hrtfs_header_t ), 1, hrtf_bin_file ) == 1 )
        {
#endif
            /* only valid if binary file = rom file
                        hrtf_data = (char *) malloc( hrtf_header.data_size );
                        if ( hrtf_data == NULL )
                        {
                            fprintf( stderr, "Memory allocation for the hrtf failed!\n\n" );
                            if ( file_header != NULL )
                                free( file_header );
                            return -1;
                        }

                        if ( fread( hrtf_data, hrtf_header.data_size, 1, hrtf_bin_file ) == 1 )
                        {
                            hrtf_data_rptr = hrtf_data;
                            if ( check_hrtf_data( hrtf_header.rend_type, hrtf_header.input_cfg, hrtf_header.frequency, hrtf_data_rptr, hrtf_header.data_size ) != 0 )
                            {
                                fprintf( stderr, "HRTF data corrupted!\n\n" );
                                if ( file_header != NULL )
                                    free( file_header );
                                free( hrtf_data );
                                return -1;
                            }
                            free( hrtf_data );
                        }
                        else
                        {
                            fprintf( stderr, "Access to HRTF data failed!\n\n" );
                            if ( file_header != NULL )
                                free( file_header );
                            free( hrtf_data );
                            return -1;
                        }*/
            fseek( hrtf_bin_file, hrtf_header.data_size, SEEK_CUR );
        }

        if ( file_header != NULL )
            free( file_header );
    }