Loading lib_com/options.h +2 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading lib_dec/ivas_binRenderer_internal.c +40 −23 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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++ ) Loading @@ -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++ ) { Loading @@ -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++ ) { Loading @@ -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++ ) Loading lib_rend/ivas_dirac_dec_binaural_functions.c +12 −6 Original line number Diff line number Diff line Loading @@ -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" ); Loading @@ -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 ); Loading @@ -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 ); Loading lib_util/hrtf_file_reader.c +38 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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++ ) { Loading @@ -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; } Loading @@ -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; } Loading @@ -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 ); Loading scripts/binauralRenderer_interface/generate_ivas_binauralizer_tables_from_sofa.m +1 −9 Original line number Diff line number Diff line Loading @@ -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 Loading
lib_com/options.h +2 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading
lib_dec/ivas_binRenderer_internal.c +40 −23 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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++ ) Loading @@ -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++ ) { Loading @@ -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++ ) { Loading @@ -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++ ) Loading
lib_rend/ivas_dirac_dec_binaural_functions.c +12 −6 Original line number Diff line number Diff line Loading @@ -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" ); Loading @@ -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 ); Loading @@ -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 ); Loading
lib_util/hrtf_file_reader.c +38 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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++ ) { Loading @@ -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; } Loading @@ -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; } Loading @@ -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 ); Loading
scripts/binauralRenderer_interface/generate_ivas_binauralizer_tables_from_sofa.m +1 −9 Original line number Diff line number Diff line Loading @@ -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