Commit f0933b4c authored by emerit's avatar emerit
Browse files

Merge branch 'orange/fixpoint_crend_hrtf_file_format' into...

Merge branch 'orange/fixpoint_crend_hrtf_file_format' into fix_hrtf_processing_scripts_for_3rd_party_sofa_support
parents 3318fcad c057b452
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -168,6 +168,7 @@
#define FIX_1123_FASTCONV_16BIT_ROM                     /* FhG: issue 1123: update FastConv ROM tables and scripts to generate 16 bit tables instead of float */
#define FIX_1123_PARAMBIN_16BIT_ROM                     /* FhG,Nok: issue 1123: update ParamBin ROM tables and scripts to generate 16 bit tables instead of float */
#define FIX_1123_TDREN_16BIT_ROM
#define FIX_1123_OPTIMIZE_BINARY_LOAD                   /* Nok: Optimize loading of binary files in fixed point format by precomputing scaling factors */
#define FIX_1053_AEID_FILE_TEST                         /* Philips: Tests for the -aeid file and fix for memory error */
#define FIX_1121_MASA_DESCRIPTOR                        /* VA: issue 1121: Define 'ivasmasaFormatDescriptor' at one common place */
#define FIX_1113_CLDFB_REND_IN_ISAR                     /* issue 1113: fix the use of CLDFB renderer in split-rendering at the external renderer */
+40 −23
Original line number Diff line number Diff line
@@ -708,7 +708,7 @@ ivas_error ivas_allocate_binaural_hrtf(
    }

#ifdef FIX_1123_FASTCONV_16BIT_ROM
    if ( renderer_type == RENDERER_BINAURAL_FASTCONV && bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
    if ( renderer_type == RENDERER_BINAURAL_FASTCONV && ( bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_INVALID ) )
#else
    if ( renderer_type == RENDERER_BINAURAL_FASTCONV || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
#endif
@@ -753,7 +753,7 @@ ivas_error ivas_allocate_binaural_hrtf(
        }
    }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
    if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
    if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && ( bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_INVALID ) )
#else
    if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
#endif
@@ -871,46 +871,28 @@ static ivas_error ivas_binaural_hrtf_open(
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
#ifndef FIX_1123_FASTCONV_16BIT_ROM
            if ( renderer_type == RENDERER_BINAURAL_FASTCONV )
            {
                for ( j = 0; j < HRTF_LS_CHANNELS; j++ )
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    for ( k = 0; k < HrtfFastConv->ntaps_hrir; k++ )
                    {
                        HrtfFastConv->leftHRIRReal[i][j][k] = (float) leftHRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                        HrtfFastConv->leftHRIRImag[i][j][k] = (float) leftHRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                        HrtfFastConv->rightHRIRReal[i][j][k] = (float) rightHRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                        HrtfFastConv->rightHRIRImag[i][j][k] = (float) rightHRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                    }
#else
                    HrtfFastConv->leftHRIRReal[i][j] = leftHRIRReal[i][j];
                    HrtfFastConv->leftHRIRImag[i][j] = leftHRIRImag[i][j];
                    HrtfFastConv->rightHRIRReal[i][j] = rightHRIRReal[i][j];
                    HrtfFastConv->rightHRIRImag[i][j] = rightHRIRImag[i][j];
#endif
                }
            }
            else if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM )
            {
                for ( j = 0; j < HRTF_LS_CHANNELS; j++ )
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    for ( k = 0; k < HrtfFastConv->ntaps_brir; k++ )
                    {
                        HrtfFastConv->leftBRIRReal[i][j][k] = (float) leftBRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                        HrtfFastConv->leftBRIRImag[i][j][k] = (float) leftBRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                        HrtfFastConv->rightBRIRReal[i][j][k] = (float) rightBRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                        HrtfFastConv->rightBRIRImag[i][j][k] = (float) rightBRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                    }
#else
                    HrtfFastConv->leftBRIRReal[i][j] = leftBRIRReal[i][j];
                    HrtfFastConv->leftBRIRImag[i][j] = leftBRIRImag[i][j];
                    HrtfFastConv->rightBRIRReal[i][j] = rightBRIRReal[i][j];
                    HrtfFastConv->rightBRIRImag[i][j] = rightBRIRImag[i][j];
#endif
                }
            }
#endif
            if ( input_config == IVAS_AUDIO_CONFIG_HOA3 )
            {
                for ( j = 0; j < HOA3_CHANNELS; j++ )
@@ -931,7 +913,11 @@ static ivas_error ivas_binaural_hrtf_open(
#endif
                }
            }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            else if ( input_config == IVAS_AUDIO_CONFIG_HOA2 )
#else
            if ( input_config == IVAS_AUDIO_CONFIG_HOA2 )
#endif
            {
                for ( j = 0; j < HOA2_CHANNELS; j++ )
                {
@@ -951,7 +937,7 @@ static ivas_error ivas_binaural_hrtf_open(
#endif
                }
            }
            if ( input_config == IVAS_AUDIO_CONFIG_FOA )
            else if ( input_config == IVAS_AUDIO_CONFIG_FOA )
            {
                for ( j = 0; j < FOA_CHANNELS; j++ )
                {
@@ -971,6 +957,37 @@ static ivas_error ivas_binaural_hrtf_open(
#endif
                }
            }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            else
            {
                if ( renderer_type == RENDERER_BINAURAL_FASTCONV )
                {
                    for ( j = 0; j < HRTF_LS_CHANNELS; j++ )
                    {
                        for ( k = 0; k < HrtfFastConv->ntaps_hrir; k++ )
                        {
                            HrtfFastConv->leftHRIRReal[i][j][k] = (float) leftHRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                            HrtfFastConv->leftHRIRImag[i][j][k] = (float) leftHRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                            HrtfFastConv->rightHRIRReal[i][j][k] = (float) rightHRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                            HrtfFastConv->rightHRIRImag[i][j][k] = (float) rightHRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                        }
                    }
                }
                else if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM )
                {
                    for ( j = 0; j < HRTF_LS_CHANNELS; j++ )
                    {
                        for ( k = 0; k < HrtfFastConv->ntaps_brir; k++ )
                        {
                            HrtfFastConv->leftBRIRReal[i][j][k] = (float) leftBRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                            HrtfFastConv->leftBRIRImag[i][j][k] = (float) leftBRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                            HrtfFastConv->rightBRIRReal[i][j][k] = (float) rightBRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                            HrtfFastConv->rightBRIRImag[i][j][k] = (float) rightBRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                        }
                    }
                }
            }
#endif
        }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ )
+12 −6
Original line number Diff line number Diff line
@@ -387,7 +387,13 @@ ivas_error ivas_dirac_dec_binaural_copy_hrtfs(
    {
        /* Initialise tables from ROM */
        HRTFS_PARAMBIN *hrtfParambin;

#ifdef FIX_1123_PARAMBIN_16BIT_ROM
        float shCoef_scale, rt_scale, rene_scale, early_scale;
        shCoef_scale = powf( 2.f, -1.f * (float) hrtfShCoeffs_factorQ );
        rt_scale = powf( 2.f, -1.f * (float) parametricReverberationTimes_factorQ );
        rene_scale = powf( 2.f, -1.f * (float) parametricReverberationEneCorrections_factorQ );
        early_scale = powf( 2.f, -1.f * (float) parametricEarlyPartEneCorrection_factorQ );
#endif
        if ( ( hrtfParambin = (HRTFS_PARAMBIN *) malloc( sizeof( HRTFS_PARAMBIN ) ) ) == NULL )
        {
            return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for parametric binauralizer HRTF tables" );
@@ -400,8 +406,8 @@ ivas_error ivas_dirac_dec_binaural_copy_hrtfs(
#ifdef FIX_1123_PARAMBIN_16BIT_ROM
                for ( k = 0; k < HRTF_NUM_BINS; k++ )
                {
                    hrtfParambin->hrtfShCoeffsRe[i][j][k] = (float) hrtfShCoeffsRe[i][j][k] * powf( 2.f, -1.f * (float) hrtfShCoeffs_factorQ );
                    hrtfParambin->hrtfShCoeffsIm[i][j][k] = (float) hrtfShCoeffsIm[i][j][k] * powf( 2.f, -1.f * (float) hrtfShCoeffs_factorQ );
                    hrtfParambin->hrtfShCoeffsRe[i][j][k] = (float) hrtfShCoeffsRe[i][j][k] * shCoef_scale;
                    hrtfParambin->hrtfShCoeffsIm[i][j][k] = (float) hrtfShCoeffsIm[i][j][k] * shCoef_scale;
                }
#else
                mvr2r( hrtfShCoeffsRe[i][j], hrtfParambin->hrtfShCoeffsRe[i][j], HRTF_NUM_BINS );
@@ -413,9 +419,9 @@ ivas_error ivas_dirac_dec_binaural_copy_hrtfs(
#ifdef FIX_1123_PARAMBIN_16BIT_ROM
        for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ )
        {
            hrtfParambin->parametricReverberationTimes[i] = (float) parametricReverberationTimes[i] * powf( 2.f, -1.f * (float) parametricReverberationTimes_factorQ );
            hrtfParambin->parametricReverberationEneCorrections[i] = (float) parametricReverberationEneCorrections[i] * powf( 2.f, -1.f * (float) parametricReverberationEneCorrections_factorQ );
            hrtfParambin->parametricEarlyPartEneCorrection[i] = (float) parametricEarlyPartEneCorrection[i] * powf( 2.f, -1.f * (float) parametricEarlyPartEneCorrection_factorQ );
            hrtfParambin->parametricReverberationTimes[i] = (float) parametricReverberationTimes[i] * rt_scale;
            hrtfParambin->parametricReverberationEneCorrections[i] = (float) parametricReverberationEneCorrections[i] * rene_scale;
            hrtfParambin->parametricEarlyPartEneCorrection[i] = (float) parametricEarlyPartEneCorrection[i] * early_scale;
        }
#else
        mvr2r( parametricReverberationTimes, hrtfParambin->parametricReverberationTimes, CLDFB_NO_CHANNELS_MAX );
+38 −0
Original line number Diff line number Diff line
@@ -2616,6 +2616,9 @@ static ivas_error create_parambin_HRTF_from_rawdata_fx(
    uint32_t data_size_tmp;
    Word16 factorQ;
    int16_t *ptW16;
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
    float scaler;
#endif

    hrtf_data_rptr = hrtf_data;

@@ -2637,7 +2640,10 @@ static ivas_error create_parambin_HRTF_from_rawdata_fx(
    /* Q factor*/
    factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
    hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
    scaler = powf( 2.f, -1.f * (float) factorQ );

#endif
    data_size_tmp = HRTF_NUM_BINS * sizeof( int16_t );
    for ( i = 0; i < BINAURAL_CHANNELS; i++ )
    {
@@ -2646,7 +2652,11 @@ static ivas_error create_parambin_HRTF_from_rawdata_fx(
            ptW16 = (int16_t *) hrtf_data_rptr;
            for ( k = 0; k < HRTF_NUM_BINS; k++ )
            {
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
                ( *hHRTF )->hrtfShCoeffsRe[i][j][k] = (float) ptW16[k] * scaler;
#else
                ( *hHRTF )->hrtfShCoeffsRe[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
            }
            hrtf_data_rptr += data_size_tmp;
        }
@@ -2658,7 +2668,11 @@ static ivas_error create_parambin_HRTF_from_rawdata_fx(
            ptW16 = (int16_t *) hrtf_data_rptr;
            for ( k = 0; k < HRTF_NUM_BINS; k++ )
            {
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
                ( *hHRTF )->hrtfShCoeffsIm[i][j][k] = (float) ptW16[k] * scaler;
#else
                ( *hHRTF )->hrtfShCoeffsIm[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
            }
            hrtf_data_rptr += data_size_tmp;
        }
@@ -2674,33 +2688,57 @@ static ivas_error create_parambin_HRTF_from_rawdata_fx(
    /* Q factor*/
    factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
    hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
    scaler = powf( 2.f, -1.f * (float) factorQ );

#endif

    ptW16 = (int16_t *) hrtf_data_rptr;
    for ( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ )
    {
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
        ( *hHRTF )->parametricReverberationTimes[j] = (float) ptW16[j] * scaler;
#else
        ( *hHRTF )->parametricReverberationTimes[j] = (float) ptW16[j] * powf( 2.f, -1.f * factorQ );
#endif
    }
    hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( int16_t );

    /* Q factor*/
    factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
    hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
    scaler = powf( 2.f, -1.f * (float) factorQ );

#endif

    ptW16 = (int16_t *) hrtf_data_rptr;
    for ( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ )
    {
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
        ( *hHRTF )->parametricReverberationEneCorrections[j] = (float) ptW16[j] * scaler;
#else
        ( *hHRTF )->parametricReverberationEneCorrections[j] = (float) ptW16[j] * powf( 2.f, -1.f * factorQ );
#endif
    }
    hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( int16_t );

    /* Q factor*/
    factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
    hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
    scaler = powf( 2.f, -1.f * (float) factorQ );

#endif

    ptW16 = (int16_t *) hrtf_data_rptr;
    for ( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ )
    {
#ifdef FIX_1123_OPTIMIZE_BINARY_LOAD
        ( *hHRTF )->parametricEarlyPartEneCorrection[j] = (float) ptW16[j] * scaler;
#else
        ( *hHRTF )->parametricEarlyPartEneCorrection[j] = (float) ptW16[j] * powf( 2.f, -1.f * factorQ );
#endif
    }
    hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( int16_t );

+1 −9
Original line number Diff line number Diff line
@@ -63,15 +63,7 @@ ivas_path = ['..' filesep '..' filesep];

%% Set input files
if generateCustomBinaryFile
    hrir_file_name = 'HRIR_128_Meth5_IRC_51_Q10_symL_Itrp6_48000_norm.sofa';
  %  hrir_file_name = 'FABIAN_HRIR_measured_HATO_0_norm.sofa';
 %    hrir_file_name = 'ari-dtf_nh2.sofa'; % fail for TD renderer
%     hrir_file_name = 'BiLi-IRC_1101_C_HRIR_96000.sofa'; % fail for TD renderer
    % hrir_file_name = 'cipic-subject_003.sofa'; % fail for TD renderer
    % hrir_file_name = 'Listen-IRC_1002_C_44100.sofa'; % fail for TD renderer
    % hrir_file_name = 'mit_kemar_normal_pinna.sofa'; % fail for TD renderer
    %hrir_file_name = 'RIEC_hrir_subject_001.sofa'; % fail for TD renderer
   % output_bin_name = 'ivas_binaural_custom_fabian_hrir';
    hrir_file_name = 'HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000_norm.sofa';
    output_bin_name = 'ivas_binaural_custom';
    %brir_file_name = 'bbcrdlr_all_speakers.sofa'; % fail loading binary file in IVAS_dec/IVAS_rend, fastconv TAPS_SIZE are hard coded
    %brir_file_name = 'IIS_BRIR_officialMPEG_Combined.sofa';
Loading