Loading lib_rend/ivas_rom_binaural_crend_head.c +6557 −6559 File changed.Preview size limit exceeded, changes collapsed. Show changes lib_rend/ivas_rom_binaural_crend_head.h +0 −3 Original line number Diff line number Diff line Loading @@ -288,7 +288,6 @@ extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][24 extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2474]; /********************** default HRIR reverb rom tables **********************/ /* Sample Rate = 48000 */ Loading @@ -307,6 +306,4 @@ extern float defaultHRIR_coherence_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ]; extern float defaultHRIR_left_avg_power_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ]; extern float defaultHRIR_right_avg_power_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ]; #endif /* _IVAS_ROM_BINAURAL_CREND_HEAD_ */ lib_util/hrtf_file_reader.c +141 −34 Original line number Diff line number Diff line Loading @@ -221,6 +221,7 @@ static ivas_error check_hrtf_binary_header( static ivas_error read_hrtf_binary_header( ivas_hrtfs_header_t *hrtf_header, int16_t *is_fix_point, FILE *f_hrtf ) { /* HRTF Header */ Loading @@ -229,8 +230,14 @@ static ivas_error read_hrtf_binary_header( /* Sampling Frequency (4 bytes) */ /* Raw data size (4 bytes) */ *is_fix_point = 0; if ( ( fread( &( hrtf_header->rend_type ), sizeof( int32_t ), 1, f_hrtf ) == 1 ) && ( fread( &( hrtf_header->input_cfg ), sizeof( int32_t ), 1, f_hrtf ) == 1 ) && ( fread( &( hrtf_header->frequency ), sizeof( int32_t ), 1, f_hrtf ) == 1 ) && ( fread( &( hrtf_header->data_size ), sizeof( int32_t ), 1, f_hrtf ) == 1 ) ) { if ( hrtf_header->rend_type & 0x1000 ) { *is_fix_point = 1; hrtf_header->rend_type = hrtf_header->rend_type - 0x1000; } return IVAS_ERR_OK; } Loading Loading @@ -457,6 +464,7 @@ static ivas_error load_reverb_from_binary( int32_t hrtf_data_size_max; char *hrtf_data; int16_t lr_iac_len; int16_t is_fx = 0; if ( hHrtfStatistics == NULL ) { Loading Loading @@ -494,7 +502,7 @@ static ivas_error load_reverb_from_binary( for ( hrtf_id = 0; ( hrtf_id < hrtfs_file_header.nb_hrtf ) && ( !is_reverb ); hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "HRTF binary file not compliant (number of HRTF)" ); Loading Loading @@ -580,6 +588,7 @@ static ivas_error TDREND_MIX_LoadHRTF( ivas_hrtfs_header_t hrtf_header; int32_t hrtf_data_size_max; char *hrtf_data; int16_t is_fx = 0; header_check_result = IVAS_ERR_OK; Loading Loading @@ -625,7 +634,7 @@ static ivas_error TDREND_MIX_LoadHRTF( for ( hrtf_id = 0; ( hrtf_id < hrtfs_file_header.nb_hrtf ) && ( !is_tdrend ); hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "HRTF binary file not compliant (number of HRTF)" ); } Loading Loading @@ -1065,7 +1074,10 @@ static ivas_error create_HRTF_from_rawdata_fx( uint32_t mem_size, l; char *hrtf_data_rptr; float *pOut_to_bin_wptr; float *pOut_to_bin_wptr_ref; ivas_error error; Word16 factorQ; float maxDiff = 0, diff; if ( *hHRTF == NULL ) { Loading @@ -1087,8 +1099,12 @@ static ivas_error create_HRTF_from_rawdata_fx( ( *hHRTF )->init_from_rom = 0; hrtf_data_rptr = hrtf_data; /* latency_s Q factor*/ factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); /* latency_s */ ( *hHRTF )->latency_s = (float) ( *( (Word32 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -31.f ); ( *hHRTF )->latency_s = (float) ( *( (Word32 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -1.f * (float) factorQ ); hrtf_data_rptr += sizeof( Word32 ); /* max_num_ir */ Loading Loading @@ -1138,6 +1154,7 @@ static ivas_error create_HRTF_from_rawdata_fx( if ( max_num_iterations_diffuse != 0 ) { maxDiff = fabsf( ( *hHRTF )->latency_s - CRendBin_Combined_BRIR_latency_s ); /* num_iterations_diffuse */ for ( j = 0; j < BINAURAL_CHANNELS; j++ ) { Loading @@ -1163,21 +1180,47 @@ static ivas_error create_HRTF_from_rawdata_fx( ( *hHRTF )->index_frequency_max_diffuse = *( (uint16_t *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( uint16_t ); /* inv_diffuse_weight Q factor*/ factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); /* inv_diffuse_weight */ for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) { ( *hHRTF )->inv_diffuse_weight[0][i] = ( *( (Word16 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -15.f ); hrtf_data_rptr += sizeof( Word16 ); ( *hHRTF )->inv_diffuse_weight[0][i] = (float) ( *( (Word32 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -1.f * factorQ ); hrtf_data_rptr += sizeof( Word32 ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( ( *hHRTF )->inv_diffuse_weight[0][i] - CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[0][i] ); if ( maxDiff < diff ) { maxDiff = diff; } } } /* inv_diffuse_weight Q factor*/ factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) { ( *hHRTF )->inv_diffuse_weight[1][i] = ( *( (Word16 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -15.f ); hrtf_data_rptr += sizeof( Word16 ); ( *hHRTF )->inv_diffuse_weight[1][i] = (float) ( *( (Word32 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -1.f * factorQ ); hrtf_data_rptr += sizeof( Word32 ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( ( *hHRTF )->inv_diffuse_weight[1][i] - CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[1][i] ); if ( maxDiff < diff ) { maxDiff = diff; } } } /* max_total_num_fsamp_per_iteration */ max_total_num_fsamp_per_iteration = *( (uint16_t *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( uint16_t ); // factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); // hrtf_data_rptr += sizeof( Word16 ); /* coeff_re (the size depends on pIndex_frequency_max) */ for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) Loading @@ -1193,17 +1236,30 @@ static ivas_error create_HRTF_from_rawdata_fx( memset( ( *hHRTF )->pOut_to_bin_re[i][j], 0x00, mem_size ); pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_re[i][j]; pOut_to_bin_wptr_ref = CRendBin_Combined_BRIR_coeff_re_48kHz[i][j]; for ( k = 0; k < ( *hHRTF )->num_iterations[i][j]; k++ ) { factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); mem_size = ( *hHRTF )->pIndex_frequency_max[i][j][k] * sizeof( float ); memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); Word32 *ptW = (Word32 *) pOut_to_bin_wptr; for ( l = 0; l < ( *hHRTF )->pIndex_frequency_max[i][j][k]; l++ ) { pOut_to_bin_wptr[l] = (float) ptW[l] * powf( 2.f, -1.f * (float) factorQ ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( pOut_to_bin_wptr[l] - pOut_to_bin_wptr_ref[l] ); if ( maxDiff < diff ) { maxDiff = diff; } } } hrtf_data_rptr += mem_size; pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max[i][j][k]; } for ( l = 0; l < mem_size; l++ ) { Word32 *ptW = (Word32 *) &( *hHRTF )->pOut_to_bin_re[i][j][l]; ( *hHRTF )->pOut_to_bin_re[i][j][l] = ptW[0] * powf( 2.f, -29.f ); pOut_to_bin_wptr_ref += ( *hHRTF )->pIndex_frequency_max[i][j][k]; } } } Loading @@ -1222,17 +1278,29 @@ static ivas_error create_HRTF_from_rawdata_fx( memset( ( *hHRTF )->pOut_to_bin_im[i][j], 0x00, mem_size ); pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_im[i][j]; pOut_to_bin_wptr_ref = CRendBin_Combined_BRIR_coeff_im_48kHz[i][j]; for ( k = 0; k < ( *hHRTF )->num_iterations[i][j]; k++ ) { factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); mem_size = ( *hHRTF )->pIndex_frequency_max[i][j][k] * sizeof( float ); memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); Word32 *ptW = (Word32 *) pOut_to_bin_wptr; for ( l = 0; l < ( *hHRTF )->pIndex_frequency_max[i][j][k]; l++ ) { pOut_to_bin_wptr[l] = (float) ptW[l] * powf( 2.f, -1.f * (float) factorQ ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( pOut_to_bin_wptr[l] - pOut_to_bin_wptr_ref[l] ); if ( maxDiff < diff ) { maxDiff = diff; } } } hrtf_data_rptr += mem_size; pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max[i][j][k]; } for ( l = 0; l < mem_size; l++ ) { Word32 *ptW = (Word32 *) &( *hHRTF )->pOut_to_bin_im[i][j][l]; ( *hHRTF )->pOut_to_bin_im[i][j][l] = ptW[0] * powf( 2.f, -29.f ); pOut_to_bin_wptr_ref += ( *hHRTF )->pIndex_frequency_max[i][j][k]; } } } Loading @@ -1255,17 +1323,30 @@ static ivas_error create_HRTF_from_rawdata_fx( memset( ( *hHRTF )->pOut_to_bin_diffuse_re[j], 0x00, mem_size ); pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_diffuse_re[j]; pOut_to_bin_wptr_ref = CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[j]; for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) { factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); Word32 *ptW = (Word32 *) pOut_to_bin_wptr; for ( l = 0; l < ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; l++ ) { pOut_to_bin_wptr[l] = (float) ptW[l] * powf( 2.f, -1.f * (float) factorQ ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( pOut_to_bin_wptr[l] - pOut_to_bin_wptr_ref[l] ); if ( maxDiff < diff ) { maxDiff = diff; } } } hrtf_data_rptr += mem_size; pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } for ( l = 0; l < mem_size; l++ ) { Word32 *ptW = (Word32 *) &( *hHRTF )->pOut_to_bin_diffuse_re[j][l]; ( *hHRTF )->pOut_to_bin_diffuse_re[j][l] = ptW[0] * powf( 2.f, -29.f ); pOut_to_bin_wptr_ref += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } } Loading @@ -1281,17 +1362,29 @@ static ivas_error create_HRTF_from_rawdata_fx( memset( ( *hHRTF )->pOut_to_bin_diffuse_im[j], 0x00, mem_size ); pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_diffuse_im[j]; pOut_to_bin_wptr_ref = CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[j]; for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) { factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); Word32 *ptW = (Word32 *) pOut_to_bin_wptr; for ( l = 0; l < ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; l++ ) { pOut_to_bin_wptr[l] = (float) ptW[l] * powf( 2.f, -1.f * (float) factorQ ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( pOut_to_bin_wptr[l] - pOut_to_bin_wptr_ref[l] ); if ( maxDiff < diff ) { maxDiff = diff; } } } hrtf_data_rptr += mem_size; pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } for ( l = 0; l < mem_size; l++ ) { Word32 *ptW = (Word32 *) &( *hHRTF )->pOut_to_bin_diffuse_im[j][l]; ( *hHRTF )->pOut_to_bin_diffuse_im[j][l] = ptW[0] * powf( 2.f, -29.f ); pOut_to_bin_wptr_ref += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } } } Loading Loading @@ -1654,6 +1747,7 @@ ivas_error load_fastconv_HRTF_from_binary( ivas_hrtfs_file_header_t hrtfs_file_header; int16_t hrtf_id; int16_t asFastconv = 0; int16_t is_fx = 0; f_hrtf = hrtfReader->file; Loading @@ -1680,7 +1774,7 @@ ivas_error load_fastconv_HRTF_from_binary( /* Read & load */ for ( hrtf_id = 0; hrtf_id < hrtfs_file_header.nb_hrtf; hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" ); Loading Loading @@ -1810,6 +1904,7 @@ ivas_error load_parambin_HRTF_from_binary( ivas_hrtfs_file_header_t hrtfs_file_header; int16_t hrtf_id; int16_t asParam = 0; int16_t is_fx = 0; f_hrtf = hrtfReader->file; Loading Loading @@ -1838,7 +1933,7 @@ ivas_error load_parambin_HRTF_from_binary( for ( hrtf_id = 0; hrtf_id < hrtfs_file_header.nb_hrtf; hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" ); Loading Loading @@ -1897,6 +1992,7 @@ ivas_error create_SetOfHRTF_from_binary( ivas_error header_check_result; ivas_hrtfs_file_header_t hrtfs_file_header; int16_t hrtf_id; int16_t is_fx = 0; f_hrtf = hrtfReader->file; Loading Loading @@ -1926,7 +2022,7 @@ ivas_error create_SetOfHRTF_from_binary( for ( hrtf_id = 0; hrtf_id < hrtfs_file_header.nb_hrtf; hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" ); Loading Loading @@ -1970,6 +2066,8 @@ ivas_error create_SetOfHRTF_from_binary( } if ( hHRTF != NULL ) { if ( is_fx ) { /* Create the HRTF reading the raw data from the binary file */ if ( ( create_HRTF_from_rawdata_fx( hHRTF, hrtf_data ) ) != IVAS_ERR_OK ) Loading @@ -1978,6 +2076,15 @@ ivas_error create_SetOfHRTF_from_binary( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" ); } } else { if ( ( create_HRTF_from_rawdata( hHRTF, hrtf_data ) ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" ); } } } } free( hrtf_data ); Loading scripts/binauralRenderer_interface/Table_Format_Converter/generate_tables_from_rom_to_bin.c +4 −3 Original line number Diff line number Diff line Loading @@ -707,6 +707,7 @@ char *create_hrtf_crend( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUD // Get the HRTF header // Renderer type rend_type = rend_type + 0x1000; memcpy( mixerconv_hrtf_wptr, &( rend_type ), sizeof( int32_t ) ); mixerconv_hrtf_wptr += sizeof( int32_t ); Loading scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin LFS (132 B) File changed.No diff preview for this file type. View original file View changed file Loading
lib_rend/ivas_rom_binaural_crend_head.c +6557 −6559 File changed.Preview size limit exceeded, changes collapsed. Show changes
lib_rend/ivas_rom_binaural_crend_head.h +0 −3 Original line number Diff line number Diff line Loading @@ -288,7 +288,6 @@ extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][24 extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2474]; /********************** default HRIR reverb rom tables **********************/ /* Sample Rate = 48000 */ Loading @@ -307,6 +306,4 @@ extern float defaultHRIR_coherence_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ]; extern float defaultHRIR_left_avg_power_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ]; extern float defaultHRIR_right_avg_power_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ]; #endif /* _IVAS_ROM_BINAURAL_CREND_HEAD_ */
lib_util/hrtf_file_reader.c +141 −34 Original line number Diff line number Diff line Loading @@ -221,6 +221,7 @@ static ivas_error check_hrtf_binary_header( static ivas_error read_hrtf_binary_header( ivas_hrtfs_header_t *hrtf_header, int16_t *is_fix_point, FILE *f_hrtf ) { /* HRTF Header */ Loading @@ -229,8 +230,14 @@ static ivas_error read_hrtf_binary_header( /* Sampling Frequency (4 bytes) */ /* Raw data size (4 bytes) */ *is_fix_point = 0; if ( ( fread( &( hrtf_header->rend_type ), sizeof( int32_t ), 1, f_hrtf ) == 1 ) && ( fread( &( hrtf_header->input_cfg ), sizeof( int32_t ), 1, f_hrtf ) == 1 ) && ( fread( &( hrtf_header->frequency ), sizeof( int32_t ), 1, f_hrtf ) == 1 ) && ( fread( &( hrtf_header->data_size ), sizeof( int32_t ), 1, f_hrtf ) == 1 ) ) { if ( hrtf_header->rend_type & 0x1000 ) { *is_fix_point = 1; hrtf_header->rend_type = hrtf_header->rend_type - 0x1000; } return IVAS_ERR_OK; } Loading Loading @@ -457,6 +464,7 @@ static ivas_error load_reverb_from_binary( int32_t hrtf_data_size_max; char *hrtf_data; int16_t lr_iac_len; int16_t is_fx = 0; if ( hHrtfStatistics == NULL ) { Loading Loading @@ -494,7 +502,7 @@ static ivas_error load_reverb_from_binary( for ( hrtf_id = 0; ( hrtf_id < hrtfs_file_header.nb_hrtf ) && ( !is_reverb ); hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "HRTF binary file not compliant (number of HRTF)" ); Loading Loading @@ -580,6 +588,7 @@ static ivas_error TDREND_MIX_LoadHRTF( ivas_hrtfs_header_t hrtf_header; int32_t hrtf_data_size_max; char *hrtf_data; int16_t is_fx = 0; header_check_result = IVAS_ERR_OK; Loading Loading @@ -625,7 +634,7 @@ static ivas_error TDREND_MIX_LoadHRTF( for ( hrtf_id = 0; ( hrtf_id < hrtfs_file_header.nb_hrtf ) && ( !is_tdrend ); hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "HRTF binary file not compliant (number of HRTF)" ); } Loading Loading @@ -1065,7 +1074,10 @@ static ivas_error create_HRTF_from_rawdata_fx( uint32_t mem_size, l; char *hrtf_data_rptr; float *pOut_to_bin_wptr; float *pOut_to_bin_wptr_ref; ivas_error error; Word16 factorQ; float maxDiff = 0, diff; if ( *hHRTF == NULL ) { Loading @@ -1087,8 +1099,12 @@ static ivas_error create_HRTF_from_rawdata_fx( ( *hHRTF )->init_from_rom = 0; hrtf_data_rptr = hrtf_data; /* latency_s Q factor*/ factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); /* latency_s */ ( *hHRTF )->latency_s = (float) ( *( (Word32 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -31.f ); ( *hHRTF )->latency_s = (float) ( *( (Word32 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -1.f * (float) factorQ ); hrtf_data_rptr += sizeof( Word32 ); /* max_num_ir */ Loading Loading @@ -1138,6 +1154,7 @@ static ivas_error create_HRTF_from_rawdata_fx( if ( max_num_iterations_diffuse != 0 ) { maxDiff = fabsf( ( *hHRTF )->latency_s - CRendBin_Combined_BRIR_latency_s ); /* num_iterations_diffuse */ for ( j = 0; j < BINAURAL_CHANNELS; j++ ) { Loading @@ -1163,21 +1180,47 @@ static ivas_error create_HRTF_from_rawdata_fx( ( *hHRTF )->index_frequency_max_diffuse = *( (uint16_t *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( uint16_t ); /* inv_diffuse_weight Q factor*/ factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); /* inv_diffuse_weight */ for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) { ( *hHRTF )->inv_diffuse_weight[0][i] = ( *( (Word16 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -15.f ); hrtf_data_rptr += sizeof( Word16 ); ( *hHRTF )->inv_diffuse_weight[0][i] = (float) ( *( (Word32 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -1.f * factorQ ); hrtf_data_rptr += sizeof( Word32 ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( ( *hHRTF )->inv_diffuse_weight[0][i] - CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[0][i] ); if ( maxDiff < diff ) { maxDiff = diff; } } } /* inv_diffuse_weight Q factor*/ factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) { ( *hHRTF )->inv_diffuse_weight[1][i] = ( *( (Word16 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -15.f ); hrtf_data_rptr += sizeof( Word16 ); ( *hHRTF )->inv_diffuse_weight[1][i] = (float) ( *( (Word32 *) ( hrtf_data_rptr ) ) ) * powf( 2.f, -1.f * factorQ ); hrtf_data_rptr += sizeof( Word32 ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( ( *hHRTF )->inv_diffuse_weight[1][i] - CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[1][i] ); if ( maxDiff < diff ) { maxDiff = diff; } } } /* max_total_num_fsamp_per_iteration */ max_total_num_fsamp_per_iteration = *( (uint16_t *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( uint16_t ); // factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); // hrtf_data_rptr += sizeof( Word16 ); /* coeff_re (the size depends on pIndex_frequency_max) */ for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) Loading @@ -1193,17 +1236,30 @@ static ivas_error create_HRTF_from_rawdata_fx( memset( ( *hHRTF )->pOut_to_bin_re[i][j], 0x00, mem_size ); pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_re[i][j]; pOut_to_bin_wptr_ref = CRendBin_Combined_BRIR_coeff_re_48kHz[i][j]; for ( k = 0; k < ( *hHRTF )->num_iterations[i][j]; k++ ) { factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); mem_size = ( *hHRTF )->pIndex_frequency_max[i][j][k] * sizeof( float ); memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); Word32 *ptW = (Word32 *) pOut_to_bin_wptr; for ( l = 0; l < ( *hHRTF )->pIndex_frequency_max[i][j][k]; l++ ) { pOut_to_bin_wptr[l] = (float) ptW[l] * powf( 2.f, -1.f * (float) factorQ ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( pOut_to_bin_wptr[l] - pOut_to_bin_wptr_ref[l] ); if ( maxDiff < diff ) { maxDiff = diff; } } } hrtf_data_rptr += mem_size; pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max[i][j][k]; } for ( l = 0; l < mem_size; l++ ) { Word32 *ptW = (Word32 *) &( *hHRTF )->pOut_to_bin_re[i][j][l]; ( *hHRTF )->pOut_to_bin_re[i][j][l] = ptW[0] * powf( 2.f, -29.f ); pOut_to_bin_wptr_ref += ( *hHRTF )->pIndex_frequency_max[i][j][k]; } } } Loading @@ -1222,17 +1278,29 @@ static ivas_error create_HRTF_from_rawdata_fx( memset( ( *hHRTF )->pOut_to_bin_im[i][j], 0x00, mem_size ); pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_im[i][j]; pOut_to_bin_wptr_ref = CRendBin_Combined_BRIR_coeff_im_48kHz[i][j]; for ( k = 0; k < ( *hHRTF )->num_iterations[i][j]; k++ ) { factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); mem_size = ( *hHRTF )->pIndex_frequency_max[i][j][k] * sizeof( float ); memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); Word32 *ptW = (Word32 *) pOut_to_bin_wptr; for ( l = 0; l < ( *hHRTF )->pIndex_frequency_max[i][j][k]; l++ ) { pOut_to_bin_wptr[l] = (float) ptW[l] * powf( 2.f, -1.f * (float) factorQ ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( pOut_to_bin_wptr[l] - pOut_to_bin_wptr_ref[l] ); if ( maxDiff < diff ) { maxDiff = diff; } } } hrtf_data_rptr += mem_size; pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max[i][j][k]; } for ( l = 0; l < mem_size; l++ ) { Word32 *ptW = (Word32 *) &( *hHRTF )->pOut_to_bin_im[i][j][l]; ( *hHRTF )->pOut_to_bin_im[i][j][l] = ptW[0] * powf( 2.f, -29.f ); pOut_to_bin_wptr_ref += ( *hHRTF )->pIndex_frequency_max[i][j][k]; } } } Loading @@ -1255,17 +1323,30 @@ static ivas_error create_HRTF_from_rawdata_fx( memset( ( *hHRTF )->pOut_to_bin_diffuse_re[j], 0x00, mem_size ); pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_diffuse_re[j]; pOut_to_bin_wptr_ref = CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[j]; for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) { factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); Word32 *ptW = (Word32 *) pOut_to_bin_wptr; for ( l = 0; l < ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; l++ ) { pOut_to_bin_wptr[l] = (float) ptW[l] * powf( 2.f, -1.f * (float) factorQ ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( pOut_to_bin_wptr[l] - pOut_to_bin_wptr_ref[l] ); if ( maxDiff < diff ) { maxDiff = diff; } } } hrtf_data_rptr += mem_size; pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } for ( l = 0; l < mem_size; l++ ) { Word32 *ptW = (Word32 *) &( *hHRTF )->pOut_to_bin_diffuse_re[j][l]; ( *hHRTF )->pOut_to_bin_diffuse_re[j][l] = ptW[0] * powf( 2.f, -29.f ); pOut_to_bin_wptr_ref += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } } Loading @@ -1281,17 +1362,29 @@ static ivas_error create_HRTF_from_rawdata_fx( memset( ( *hHRTF )->pOut_to_bin_diffuse_im[j], 0x00, mem_size ); pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_diffuse_im[j]; pOut_to_bin_wptr_ref = CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[j]; for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) { factorQ = *( (Word16 *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( Word16 ); mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); Word32 *ptW = (Word32 *) pOut_to_bin_wptr; for ( l = 0; l < ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; l++ ) { pOut_to_bin_wptr[l] = (float) ptW[l] * powf( 2.f, -1.f * (float) factorQ ); if ( max_num_iterations_diffuse != 0 ) { diff = fabs( pOut_to_bin_wptr[l] - pOut_to_bin_wptr_ref[l] ); if ( maxDiff < diff ) { maxDiff = diff; } } } hrtf_data_rptr += mem_size; pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } for ( l = 0; l < mem_size; l++ ) { Word32 *ptW = (Word32 *) &( *hHRTF )->pOut_to_bin_diffuse_im[j][l]; ( *hHRTF )->pOut_to_bin_diffuse_im[j][l] = ptW[0] * powf( 2.f, -29.f ); pOut_to_bin_wptr_ref += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } } } Loading Loading @@ -1654,6 +1747,7 @@ ivas_error load_fastconv_HRTF_from_binary( ivas_hrtfs_file_header_t hrtfs_file_header; int16_t hrtf_id; int16_t asFastconv = 0; int16_t is_fx = 0; f_hrtf = hrtfReader->file; Loading @@ -1680,7 +1774,7 @@ ivas_error load_fastconv_HRTF_from_binary( /* Read & load */ for ( hrtf_id = 0; hrtf_id < hrtfs_file_header.nb_hrtf; hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" ); Loading Loading @@ -1810,6 +1904,7 @@ ivas_error load_parambin_HRTF_from_binary( ivas_hrtfs_file_header_t hrtfs_file_header; int16_t hrtf_id; int16_t asParam = 0; int16_t is_fx = 0; f_hrtf = hrtfReader->file; Loading Loading @@ -1838,7 +1933,7 @@ ivas_error load_parambin_HRTF_from_binary( for ( hrtf_id = 0; hrtf_id < hrtfs_file_header.nb_hrtf; hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" ); Loading Loading @@ -1897,6 +1992,7 @@ ivas_error create_SetOfHRTF_from_binary( ivas_error header_check_result; ivas_hrtfs_file_header_t hrtfs_file_header; int16_t hrtf_id; int16_t is_fx = 0; f_hrtf = hrtfReader->file; Loading Loading @@ -1926,7 +2022,7 @@ ivas_error create_SetOfHRTF_from_binary( for ( hrtf_id = 0; hrtf_id < hrtfs_file_header.nb_hrtf; hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) if ( read_hrtf_binary_header( &hrtf_header, &is_fx, f_hrtf ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" ); Loading Loading @@ -1970,6 +2066,8 @@ ivas_error create_SetOfHRTF_from_binary( } if ( hHRTF != NULL ) { if ( is_fx ) { /* Create the HRTF reading the raw data from the binary file */ if ( ( create_HRTF_from_rawdata_fx( hHRTF, hrtf_data ) ) != IVAS_ERR_OK ) Loading @@ -1978,6 +2076,15 @@ ivas_error create_SetOfHRTF_from_binary( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" ); } } else { if ( ( create_HRTF_from_rawdata( hHRTF, hrtf_data ) ) != IVAS_ERR_OK ) { free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" ); } } } } free( hrtf_data ); Loading
scripts/binauralRenderer_interface/Table_Format_Converter/generate_tables_from_rom_to_bin.c +4 −3 Original line number Diff line number Diff line Loading @@ -707,6 +707,7 @@ char *create_hrtf_crend( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUD // Get the HRTF header // Renderer type rend_type = rend_type + 0x1000; memcpy( mixerconv_hrtf_wptr, &( rend_type ), sizeof( int32_t ) ); mixerconv_hrtf_wptr += sizeof( int32_t ); Loading
scripts/binauralRenderer_interface/binaural_renderers_hrtf_data/ivas_binaural_16kHz.bin LFS (132 B) File changed.No diff preview for this file type. View original file View changed file