Loading lib_rend/ivas_crend.c +143 −14 Original line number Diff line number Diff line Loading @@ -1283,8 +1283,13 @@ ivas_error ivas_rend_initCrendWrapper( hCrend->prev_out_buffer[i] = NULL; } #ifdef FIX_INV_DIFFUSE_WEIGHT hCrend->freq_buffer_re_diffuse[0] = NULL; hCrend->freq_buffer_im_diffuse[1] = NULL; #else hCrend->freq_buffer_re_diffuse = NULL; hCrend->freq_buffer_im_diffuse = NULL; #endif hCrend->hReverb = NULL; hCrend->reflections = NULL; hCrend->delay_line_rw_index = 0; Loading Loading @@ -1356,9 +1361,9 @@ ivas_error ivas_rend_openCrend( { int16_t i, subframe_length; #ifdef FIX_CRASH_LONG_BRIR int32_t max_total_ir_len; int32_t max_total_ir_len, j; #else int32_t max_total_ir_len; int16_t max_total_ir_len; #endif HRTFS_HANDLE hHrtf; CREND_HANDLE hCrend; Loading Loading @@ -1409,14 +1414,24 @@ ivas_error ivas_rend_openCrend( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { hCrend->freq_buffer_re[i][j] = 0.f; } #else set_zero( hCrend->freq_buffer_re[i], max_total_ir_len ); #endif if ( ( hCrend->freq_buffer_im[i] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { hCrend->freq_buffer_im[i][j] = 0.f; } #else set_zero( hCrend->freq_buffer_im[i], max_total_ir_len ); #endif } Loading @@ -1427,7 +1442,12 @@ ivas_error ivas_rend_openCrend( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < subframe_length; j++ ) { hCrend->prev_out_buffer[i][j] = 0.f; } #else set_zero( hCrend->prev_out_buffer[i], subframe_length ); #endif } Loading @@ -1436,25 +1456,84 @@ ivas_error ivas_rend_openCrend( if ( max_total_ir_len > 0 ) { #ifdef FIX_INV_DIFFUSE_WEIGHT if ( ( hCrend->freq_buffer_re_diffuse[0] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } if ( ( hCrend->freq_buffer_re_diffuse[1] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #else if ( ( hCrend->freq_buffer_re_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #endif #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { #ifdef FIX_INV_DIFFUSE_WEIGHT hCrend->freq_buffer_re_diffuse[0][j] = 0.f; hCrend->freq_buffer_re_diffuse[1][j] = 0.f; #else hCrend->freq_buffer_re_diffuse[j] = 0.f; #endif } #else #ifdef FIX_INV_DIFFUSE_WEIGHT set_zero( hCrend->freq_buffer_re_diffuse[0], max_total_ir_len ); set_zero( hCrend->freq_buffer_re_diffuse[1], max_total_ir_len ); #else set_zero( hCrend->freq_buffer_re_diffuse, max_total_ir_len ); #endif #endif #ifdef FIX_INV_DIFFUSE_WEIGHT if ( ( hCrend->freq_buffer_im_diffuse[0] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } if ( ( hCrend->freq_buffer_im_diffuse[1] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #else if ( ( hCrend->freq_buffer_im_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #endif #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { #ifdef FIX_INV_DIFFUSE_WEIGHT hCrend->freq_buffer_im_diffuse[0][j] = 0.f; hCrend->freq_buffer_im_diffuse[1][j] = 0.f; #else hCrend->freq_buffer_im_diffuse[j] = 0.f; #endif } #else #ifdef FIX_INV_DIFFUSE_WEIGHT set_zero( hCrend->freq_buffer_im_diffuse[0], max_total_ir_len ); set_zero( hCrend->freq_buffer_im_diffuse[1], max_total_ir_len ); #else set_zero( hCrend->freq_buffer_im_diffuse, max_total_ir_len ); #endif #endif } else { #ifdef FIX_INV_DIFFUSE_WEIGHT hCrend->freq_buffer_re_diffuse[0] = NULL; hCrend->freq_buffer_im_diffuse[0] = NULL; hCrend->freq_buffer_re_diffuse[1] = NULL; hCrend->freq_buffer_im_diffuse[1] = NULL; #else hCrend->freq_buffer_re_diffuse = NULL; hCrend->freq_buffer_im_diffuse = NULL; #endif } max_total_ir_len = (int16_t) ( hHrtf->latency_s * output_Fs + 0.5f ) + subframe_length; Loading @@ -1464,7 +1543,12 @@ ivas_error ivas_rend_openCrend( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { hCrend->lfe_delay_line[j] = 0.f; } #else set_zero( hCrend->lfe_delay_line, max_total_ir_len ); #endif } Loading Loading @@ -1603,7 +1687,31 @@ void ivas_rend_closeCrend( free( hCrend->lfe_delay_line ); hCrend->lfe_delay_line = NULL; } #ifdef FIX_INV_DIFFUSE_WEIGHT if ( hCrend->freq_buffer_re_diffuse[0] != NULL ) { free( hCrend->freq_buffer_re_diffuse[0] ); hCrend->freq_buffer_re_diffuse[0] = NULL; } if ( hCrend->freq_buffer_im_diffuse[0] != NULL ) { free( hCrend->freq_buffer_im_diffuse[0] ); hCrend->freq_buffer_im_diffuse[0] = NULL; } if ( hCrend->freq_buffer_re_diffuse[1] != NULL ) { free( hCrend->freq_buffer_re_diffuse[1] ); hCrend->freq_buffer_re_diffuse[1] = NULL; } if ( hCrend->freq_buffer_im_diffuse[1] != NULL ) { free( hCrend->freq_buffer_im_diffuse[1] ); hCrend->freq_buffer_im_diffuse[1] = NULL; } #else if ( hCrend->freq_buffer_re_diffuse != NULL ) { free( hCrend->freq_buffer_re_diffuse ); Loading @@ -1615,6 +1723,7 @@ void ivas_rend_closeCrend( free( hCrend->freq_buffer_im_diffuse ); hCrend->freq_buffer_im_diffuse = NULL; } #endif if ( hCrend->hTrack != NULL ) { Loading Loading @@ -1715,6 +1824,9 @@ static ivas_error ivas_rend_crendConvolver( int16_t nchan_in, nchan_out; const float *pIn; float *pFreq_buf_re, *pFreq_buf_im; #ifdef FIX_INV_DIFFUSE_WEIGHT float *pFreq_buf2_re, *pFreq_buf2_im; #endif const float *pFreq_filt_re, *pFreq_filt_im; float pOut[L_FRAME48k * 2]; float tmp_out_re[L_FRAME48k], tmp_out_im[L_FRAME48k]; Loading Loading @@ -1757,8 +1869,15 @@ static ivas_error ivas_rend_crendConvolver( if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) { #ifdef FIX_INV_DIFFUSE_WEIGHT set_zero( &hCrend->freq_buffer_re_diffuse[0][offset_diffuse], subframe_length ); set_zero( &hCrend->freq_buffer_im_diffuse[0][offset_diffuse], subframe_length ); set_zero( &hCrend->freq_buffer_re_diffuse[1][offset_diffuse], subframe_length ); set_zero( &hCrend->freq_buffer_im_diffuse[1][offset_diffuse], subframe_length ); #else set_zero( &hCrend->freq_buffer_re_diffuse[offset_diffuse], subframe_length ); set_zero( &hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length ); #endif } i = 0; Loading @@ -1769,16 +1888,25 @@ static ivas_error ivas_rend_crendConvolver( { if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) { #ifdef FIX_INV_DIFFUSE_WEIGHT pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[0][offset_diffuse]; pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[0][offset_diffuse]; pFreq_buf2_re = &hCrend->freq_buffer_re_diffuse[1][offset_diffuse]; pFreq_buf2_im = &hCrend->freq_buffer_im_diffuse[1][offset_diffuse]; #else pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[offset_diffuse]; pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[offset_diffuse]; #endif pFreq_filt_re = &hCrend->freq_buffer_re[i][offset]; pFreq_filt_im = &hCrend->freq_buffer_im[i][offset]; for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { #ifdef FIX_INV_DIFFUSE_WEIGHT pFreq_buf_re[k] += pFreq_filt_re[k]; pFreq_buf_im[k] += pFreq_filt_im[k]; pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[0][i]; pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[0][i]; pFreq_buf2_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[1][i]; pFreq_buf2_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[1][i]; #else pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i]; pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i]; Loading Loading @@ -1832,8 +1960,13 @@ static ivas_error ivas_rend_crendConvolver( offset_diffuse = ( hCrend->diffuse_delay_line_rw_index + m + 1 ); offset_diffuse = offset_diffuse % pCrend->hHrtfCrend->num_iterations_diffuse[0]; offset_diffuse = offset_diffuse * subframe_length; #ifdef FIX_INV_DIFFUSE_WEIGHT pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[j][offset_diffuse]; pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[j][offset_diffuse]; #else pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[offset_diffuse]; pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[offset_diffuse]; #endif pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_re[j][offset]; pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_im[j][offset]; Loading @@ -1841,10 +1974,6 @@ static ivas_error ivas_rend_crendConvolver( { tmp_out_re[k] += pFreq_buf_re[k] * pFreq_filt_re[k] - pFreq_buf_im[k] * pFreq_filt_im[k]; tmp_out_im[k] += pFreq_buf_re[k] * pFreq_filt_im[k] + pFreq_buf_im[k] * pFreq_filt_re[k]; #ifdef FIX_INV_DIFFUSE_WEIGHT tmp_out_re[k] *= pCrend->hHrtfCrend->inv_diffuse_weight[j][i]; tmp_out_im[k] *= pCrend->hHrtfCrend->inv_diffuse_weight[j][i]; #endif } offset = offset + k; } Loading lib_rend/ivas_rom_binaural_crend_head.c +3 −3 Original line number Diff line number Diff line Loading @@ -1913,7 +1913,7 @@ const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz = 98; #ifdef FIX_INV_DIFFUSE_WEIGHT const float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[BINAURAL_CHANNELS][15]={{0.224183f, 0.227455f, 0.241830f, 0.207155f, 0.218087f, 0.222942f, 0.232158f, 0.248203f, 0.249262f, 0.261591f, 0.246276f, 0.279163f, 0.285701f, 0.262541f, 0.271844f},{0.224183f, 0.227455f, 0.241830f, 0.207155f, 0.218087f, 0.222942f, 0.232158f, 0.248203f, 0.249262f, 0.261591f, 0.246276f, 0.279163f, 0.285701f, 0.262541f, 0.271844f}}; #else const float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]={0.448366f, 0.454910f, 0.483661f, 0.414309f, 0.436174f, 0.445885f, 0.464316f, 0.496406f, 0.498524f, 0.523182f, 0.492552f, 0.558326f, 0.571402f, 0.525083f, 0.543688f}; const float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]={0.224183f, 0.227455f, 0.241830f, 0.207155f, 0.218087f, 0.222942f, 0.232158f, 0.248203f, 0.249262f, 0.261591f, 0.246276f, 0.279163f, 0.285701f, 0.262541f, 0.271844f}; #endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS][40]={{47, 47, 47, 47, 47, 47, 51, 51, 58, 58, 58, 65, 65, 65, 65, 65, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 91, 91, 93, 93, 93, 98},{47, 47, 47, 47, 47, 47, 51, 51, 58, 58, 58, 65, 65, 65, 65, 65, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 91, 91, 93, 93, 93, 98}}; const float CRendBin_Combined_BRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][2955]={ Loading Loading @@ -3953,7 +3953,7 @@ const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz = 97; #ifdef FIX_INV_DIFFUSE_WEIGHT const float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[BINAURAL_CHANNELS][15]={{0.224190f, 0.227445f, 0.241827f, 0.207131f, 0.218113f, 0.222941f, 0.232139f, 0.248192f, 0.249239f, 0.261572f, 0.246309f, 0.279145f, 0.285786f, 0.262528f, 0.271847f},{0.224190f, 0.227445f, 0.241827f, 0.207131f, 0.218113f, 0.222941f, 0.232139f, 0.248192f, 0.249239f, 0.261572f, 0.246309f, 0.279145f, 0.285786f, 0.262528f, 0.271847f}}; #else const float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]={0.448379f, 0.454891f, 0.483654f, 0.414263f, 0.436226f, 0.445881f, 0.464279f, 0.496383f, 0.498477f, 0.523144f, 0.492618f, 0.558290f, 0.571571f, 0.525055f, 0.543694f}; const float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]={0.224190f, 0.227445f, 0.241827f, 0.207131f, 0.218113f, 0.222941f, 0.232139f, 0.248192f, 0.249239f, 0.261572f, 0.246309f, 0.279145f, 0.285786f, 0.262528f, 0.271847f}; #endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS][40]={{47, 47, 47, 47, 47, 47, 50, 50, 56, 56, 56, 63, 63, 63, 63, 63, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 93, 93, 93, 93, 93, 97},{47, 47, 47, 47, 47, 47, 50, 50, 56, 56, 56, 63, 63, 63, 63, 63, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 93, 93, 93, 93, 93, 97}}; const float CRendBin_Combined_BRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][2819]={ Loading Loading @@ -5917,7 +5917,7 @@ const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz = 77; #ifdef FIX_INV_DIFFUSE_WEIGHT const float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[BINAURAL_CHANNELS][15]={{0.223532f, 0.226827f, 0.248830f, 0.208782f, 0.220391f, 0.219790f, 0.231187f, 0.248730f, 0.251408f, 0.263698f, 0.243858f, 0.281483f, 0.283080f, 0.261660f, 0.273527f},{0.223532f, 0.226827f, 0.248830f, 0.208782f, 0.220391f, 0.219790f, 0.231187f, 0.248730f, 0.251408f, 0.263698f, 0.243858f, 0.281483f, 0.283080f, 0.261660f, 0.273527f}}; #else const float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]={0.447064f, 0.453654f, 0.497661f, 0.417564f, 0.440781f, 0.439581f, 0.462374f, 0.497460f, 0.502816f, 0.527395f, 0.487716f, 0.562965f, 0.566159f, 0.523321f, 0.547054f}; const float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]={0.223532f, 0.226827f, 0.248830f, 0.208782f, 0.220391f, 0.219790f, 0.231187f, 0.248730f, 0.251408f, 0.263698f, 0.243858f, 0.281483f, 0.283080f, 0.261660f, 0.273527f}; #endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS][40]={{46, 46, 46, 46, 46, 46, 46, 49, 49, 53, 53, 53, 55, 55, 61, 61, 61, 65, 67, 67, 67, 67, 67, 67, 69, 72, 72, 72, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77},{46, 46, 46, 46, 46, 46, 46, 49, 49, 53, 53, 53, 55, 55, 61, 61, 61, 65, 67, 67, 67, 67, 67, 67, 69, 72, 72, 72, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77}}; const float CRendBin_Combined_BRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][1774]={ lib_rend/ivas_stat_rend.h +5 −0 Original line number Diff line number Diff line Loading @@ -1172,8 +1172,13 @@ typedef struct ivas_crend_state_t { float *freq_buffer_re[MAX_INTERN_CHANNELS]; float *freq_buffer_im[MAX_INTERN_CHANNELS]; #ifdef FIX_INV_DIFFUSE_WEIGHT float *freq_buffer_re_diffuse[BINAURAL_CHANNELS]; float *freq_buffer_im_diffuse[BINAURAL_CHANNELS]; #else float *freq_buffer_re_diffuse; float *freq_buffer_im_diffuse; #endif float *prev_out_buffer[BINAURAL_CHANNELS]; float *lfe_delay_line; float m_fYaw; Loading scripts/binauralRenderer_interface/generate_crend_ivas_tables_from_sofa.c +0 −8 Original line number Diff line number Diff line Loading @@ -2435,15 +2435,7 @@ void update_c_file( HRTFS_DATA *hrtf, struct ivas_layout_config lscfg, const int fprintf( fp, ";" ); fprintf( fp, "\n#else" ); fprintf( fp, "\nconst float %s_%s_inv_diffuse_weight_%2dkHz[%u]=", DECLARATION_NAME, lscfg.name, samplerate / 1000, hrtf->max_num_ir ); for ( j = 0; j < hrtf->max_num_ir; j++ ) { hrtf->inv_diffuse_weight[0][j] += hrtf->inv_diffuse_weight[1][j]; } write_array_float_to_file( fp, hrtf->inv_diffuse_weight[0], hrtf->max_num_ir, hrtf->max_num_ir, FORMAT_FLOAT, 0, TAB_WITH_SPACE_OR_NOT ); for ( j = 0; j < hrtf->max_num_ir; j++ ) { hrtf->inv_diffuse_weight[0][j] -= hrtf->inv_diffuse_weight[1][j]; } fprintf( fp, ";" ); fprintf( fp, "\n#endif" ); #else Loading Loading
lib_rend/ivas_crend.c +143 −14 Original line number Diff line number Diff line Loading @@ -1283,8 +1283,13 @@ ivas_error ivas_rend_initCrendWrapper( hCrend->prev_out_buffer[i] = NULL; } #ifdef FIX_INV_DIFFUSE_WEIGHT hCrend->freq_buffer_re_diffuse[0] = NULL; hCrend->freq_buffer_im_diffuse[1] = NULL; #else hCrend->freq_buffer_re_diffuse = NULL; hCrend->freq_buffer_im_diffuse = NULL; #endif hCrend->hReverb = NULL; hCrend->reflections = NULL; hCrend->delay_line_rw_index = 0; Loading Loading @@ -1356,9 +1361,9 @@ ivas_error ivas_rend_openCrend( { int16_t i, subframe_length; #ifdef FIX_CRASH_LONG_BRIR int32_t max_total_ir_len; int32_t max_total_ir_len, j; #else int32_t max_total_ir_len; int16_t max_total_ir_len; #endif HRTFS_HANDLE hHrtf; CREND_HANDLE hCrend; Loading Loading @@ -1409,14 +1414,24 @@ ivas_error ivas_rend_openCrend( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { hCrend->freq_buffer_re[i][j] = 0.f; } #else set_zero( hCrend->freq_buffer_re[i], max_total_ir_len ); #endif if ( ( hCrend->freq_buffer_im[i] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { hCrend->freq_buffer_im[i][j] = 0.f; } #else set_zero( hCrend->freq_buffer_im[i], max_total_ir_len ); #endif } Loading @@ -1427,7 +1442,12 @@ ivas_error ivas_rend_openCrend( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < subframe_length; j++ ) { hCrend->prev_out_buffer[i][j] = 0.f; } #else set_zero( hCrend->prev_out_buffer[i], subframe_length ); #endif } Loading @@ -1436,25 +1456,84 @@ ivas_error ivas_rend_openCrend( if ( max_total_ir_len > 0 ) { #ifdef FIX_INV_DIFFUSE_WEIGHT if ( ( hCrend->freq_buffer_re_diffuse[0] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } if ( ( hCrend->freq_buffer_re_diffuse[1] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #else if ( ( hCrend->freq_buffer_re_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #endif #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { #ifdef FIX_INV_DIFFUSE_WEIGHT hCrend->freq_buffer_re_diffuse[0][j] = 0.f; hCrend->freq_buffer_re_diffuse[1][j] = 0.f; #else hCrend->freq_buffer_re_diffuse[j] = 0.f; #endif } #else #ifdef FIX_INV_DIFFUSE_WEIGHT set_zero( hCrend->freq_buffer_re_diffuse[0], max_total_ir_len ); set_zero( hCrend->freq_buffer_re_diffuse[1], max_total_ir_len ); #else set_zero( hCrend->freq_buffer_re_diffuse, max_total_ir_len ); #endif #endif #ifdef FIX_INV_DIFFUSE_WEIGHT if ( ( hCrend->freq_buffer_im_diffuse[0] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } if ( ( hCrend->freq_buffer_im_diffuse[1] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #else if ( ( hCrend->freq_buffer_im_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #endif #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { #ifdef FIX_INV_DIFFUSE_WEIGHT hCrend->freq_buffer_im_diffuse[0][j] = 0.f; hCrend->freq_buffer_im_diffuse[1][j] = 0.f; #else hCrend->freq_buffer_im_diffuse[j] = 0.f; #endif } #else #ifdef FIX_INV_DIFFUSE_WEIGHT set_zero( hCrend->freq_buffer_im_diffuse[0], max_total_ir_len ); set_zero( hCrend->freq_buffer_im_diffuse[1], max_total_ir_len ); #else set_zero( hCrend->freq_buffer_im_diffuse, max_total_ir_len ); #endif #endif } else { #ifdef FIX_INV_DIFFUSE_WEIGHT hCrend->freq_buffer_re_diffuse[0] = NULL; hCrend->freq_buffer_im_diffuse[0] = NULL; hCrend->freq_buffer_re_diffuse[1] = NULL; hCrend->freq_buffer_im_diffuse[1] = NULL; #else hCrend->freq_buffer_re_diffuse = NULL; hCrend->freq_buffer_im_diffuse = NULL; #endif } max_total_ir_len = (int16_t) ( hHrtf->latency_s * output_Fs + 0.5f ) + subframe_length; Loading @@ -1464,7 +1543,12 @@ ivas_error ivas_rend_openCrend( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } #ifndef FIX_CRASH_LONG_BRIR #ifdef FIX_CRASH_LONG_BRIR for ( j = 0; j < max_total_ir_len; j++ ) { hCrend->lfe_delay_line[j] = 0.f; } #else set_zero( hCrend->lfe_delay_line, max_total_ir_len ); #endif } Loading Loading @@ -1603,7 +1687,31 @@ void ivas_rend_closeCrend( free( hCrend->lfe_delay_line ); hCrend->lfe_delay_line = NULL; } #ifdef FIX_INV_DIFFUSE_WEIGHT if ( hCrend->freq_buffer_re_diffuse[0] != NULL ) { free( hCrend->freq_buffer_re_diffuse[0] ); hCrend->freq_buffer_re_diffuse[0] = NULL; } if ( hCrend->freq_buffer_im_diffuse[0] != NULL ) { free( hCrend->freq_buffer_im_diffuse[0] ); hCrend->freq_buffer_im_diffuse[0] = NULL; } if ( hCrend->freq_buffer_re_diffuse[1] != NULL ) { free( hCrend->freq_buffer_re_diffuse[1] ); hCrend->freq_buffer_re_diffuse[1] = NULL; } if ( hCrend->freq_buffer_im_diffuse[1] != NULL ) { free( hCrend->freq_buffer_im_diffuse[1] ); hCrend->freq_buffer_im_diffuse[1] = NULL; } #else if ( hCrend->freq_buffer_re_diffuse != NULL ) { free( hCrend->freq_buffer_re_diffuse ); Loading @@ -1615,6 +1723,7 @@ void ivas_rend_closeCrend( free( hCrend->freq_buffer_im_diffuse ); hCrend->freq_buffer_im_diffuse = NULL; } #endif if ( hCrend->hTrack != NULL ) { Loading Loading @@ -1715,6 +1824,9 @@ static ivas_error ivas_rend_crendConvolver( int16_t nchan_in, nchan_out; const float *pIn; float *pFreq_buf_re, *pFreq_buf_im; #ifdef FIX_INV_DIFFUSE_WEIGHT float *pFreq_buf2_re, *pFreq_buf2_im; #endif const float *pFreq_filt_re, *pFreq_filt_im; float pOut[L_FRAME48k * 2]; float tmp_out_re[L_FRAME48k], tmp_out_im[L_FRAME48k]; Loading Loading @@ -1757,8 +1869,15 @@ static ivas_error ivas_rend_crendConvolver( if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) { #ifdef FIX_INV_DIFFUSE_WEIGHT set_zero( &hCrend->freq_buffer_re_diffuse[0][offset_diffuse], subframe_length ); set_zero( &hCrend->freq_buffer_im_diffuse[0][offset_diffuse], subframe_length ); set_zero( &hCrend->freq_buffer_re_diffuse[1][offset_diffuse], subframe_length ); set_zero( &hCrend->freq_buffer_im_diffuse[1][offset_diffuse], subframe_length ); #else set_zero( &hCrend->freq_buffer_re_diffuse[offset_diffuse], subframe_length ); set_zero( &hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length ); #endif } i = 0; Loading @@ -1769,16 +1888,25 @@ static ivas_error ivas_rend_crendConvolver( { if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) { #ifdef FIX_INV_DIFFUSE_WEIGHT pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[0][offset_diffuse]; pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[0][offset_diffuse]; pFreq_buf2_re = &hCrend->freq_buffer_re_diffuse[1][offset_diffuse]; pFreq_buf2_im = &hCrend->freq_buffer_im_diffuse[1][offset_diffuse]; #else pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[offset_diffuse]; pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[offset_diffuse]; #endif pFreq_filt_re = &hCrend->freq_buffer_re[i][offset]; pFreq_filt_im = &hCrend->freq_buffer_im[i][offset]; for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { #ifdef FIX_INV_DIFFUSE_WEIGHT pFreq_buf_re[k] += pFreq_filt_re[k]; pFreq_buf_im[k] += pFreq_filt_im[k]; pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[0][i]; pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[0][i]; pFreq_buf2_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[1][i]; pFreq_buf2_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[1][i]; #else pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i]; pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i]; Loading Loading @@ -1832,8 +1960,13 @@ static ivas_error ivas_rend_crendConvolver( offset_diffuse = ( hCrend->diffuse_delay_line_rw_index + m + 1 ); offset_diffuse = offset_diffuse % pCrend->hHrtfCrend->num_iterations_diffuse[0]; offset_diffuse = offset_diffuse * subframe_length; #ifdef FIX_INV_DIFFUSE_WEIGHT pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[j][offset_diffuse]; pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[j][offset_diffuse]; #else pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[offset_diffuse]; pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[offset_diffuse]; #endif pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_re[j][offset]; pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_im[j][offset]; Loading @@ -1841,10 +1974,6 @@ static ivas_error ivas_rend_crendConvolver( { tmp_out_re[k] += pFreq_buf_re[k] * pFreq_filt_re[k] - pFreq_buf_im[k] * pFreq_filt_im[k]; tmp_out_im[k] += pFreq_buf_re[k] * pFreq_filt_im[k] + pFreq_buf_im[k] * pFreq_filt_re[k]; #ifdef FIX_INV_DIFFUSE_WEIGHT tmp_out_re[k] *= pCrend->hHrtfCrend->inv_diffuse_weight[j][i]; tmp_out_im[k] *= pCrend->hHrtfCrend->inv_diffuse_weight[j][i]; #endif } offset = offset + k; } Loading
lib_rend/ivas_rom_binaural_crend_head.c +3 −3 Original line number Diff line number Diff line Loading @@ -1913,7 +1913,7 @@ const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz = 98; #ifdef FIX_INV_DIFFUSE_WEIGHT const float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[BINAURAL_CHANNELS][15]={{0.224183f, 0.227455f, 0.241830f, 0.207155f, 0.218087f, 0.222942f, 0.232158f, 0.248203f, 0.249262f, 0.261591f, 0.246276f, 0.279163f, 0.285701f, 0.262541f, 0.271844f},{0.224183f, 0.227455f, 0.241830f, 0.207155f, 0.218087f, 0.222942f, 0.232158f, 0.248203f, 0.249262f, 0.261591f, 0.246276f, 0.279163f, 0.285701f, 0.262541f, 0.271844f}}; #else const float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]={0.448366f, 0.454910f, 0.483661f, 0.414309f, 0.436174f, 0.445885f, 0.464316f, 0.496406f, 0.498524f, 0.523182f, 0.492552f, 0.558326f, 0.571402f, 0.525083f, 0.543688f}; const float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]={0.224183f, 0.227455f, 0.241830f, 0.207155f, 0.218087f, 0.222942f, 0.232158f, 0.248203f, 0.249262f, 0.261591f, 0.246276f, 0.279163f, 0.285701f, 0.262541f, 0.271844f}; #endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS][40]={{47, 47, 47, 47, 47, 47, 51, 51, 58, 58, 58, 65, 65, 65, 65, 65, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 91, 91, 93, 93, 93, 98},{47, 47, 47, 47, 47, 47, 51, 51, 58, 58, 58, 65, 65, 65, 65, 65, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 91, 91, 93, 93, 93, 98}}; const float CRendBin_Combined_BRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][2955]={ Loading Loading @@ -3953,7 +3953,7 @@ const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz = 97; #ifdef FIX_INV_DIFFUSE_WEIGHT const float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[BINAURAL_CHANNELS][15]={{0.224190f, 0.227445f, 0.241827f, 0.207131f, 0.218113f, 0.222941f, 0.232139f, 0.248192f, 0.249239f, 0.261572f, 0.246309f, 0.279145f, 0.285786f, 0.262528f, 0.271847f},{0.224190f, 0.227445f, 0.241827f, 0.207131f, 0.218113f, 0.222941f, 0.232139f, 0.248192f, 0.249239f, 0.261572f, 0.246309f, 0.279145f, 0.285786f, 0.262528f, 0.271847f}}; #else const float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]={0.448379f, 0.454891f, 0.483654f, 0.414263f, 0.436226f, 0.445881f, 0.464279f, 0.496383f, 0.498477f, 0.523144f, 0.492618f, 0.558290f, 0.571571f, 0.525055f, 0.543694f}; const float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]={0.224190f, 0.227445f, 0.241827f, 0.207131f, 0.218113f, 0.222941f, 0.232139f, 0.248192f, 0.249239f, 0.261572f, 0.246309f, 0.279145f, 0.285786f, 0.262528f, 0.271847f}; #endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS][40]={{47, 47, 47, 47, 47, 47, 50, 50, 56, 56, 56, 63, 63, 63, 63, 63, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 93, 93, 93, 93, 93, 97},{47, 47, 47, 47, 47, 47, 50, 50, 56, 56, 56, 63, 63, 63, 63, 63, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 93, 93, 93, 93, 93, 97}}; const float CRendBin_Combined_BRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][2819]={ Loading Loading @@ -5917,7 +5917,7 @@ const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz = 77; #ifdef FIX_INV_DIFFUSE_WEIGHT const float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[BINAURAL_CHANNELS][15]={{0.223532f, 0.226827f, 0.248830f, 0.208782f, 0.220391f, 0.219790f, 0.231187f, 0.248730f, 0.251408f, 0.263698f, 0.243858f, 0.281483f, 0.283080f, 0.261660f, 0.273527f},{0.223532f, 0.226827f, 0.248830f, 0.208782f, 0.220391f, 0.219790f, 0.231187f, 0.248730f, 0.251408f, 0.263698f, 0.243858f, 0.281483f, 0.283080f, 0.261660f, 0.273527f}}; #else const float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]={0.447064f, 0.453654f, 0.497661f, 0.417564f, 0.440781f, 0.439581f, 0.462374f, 0.497460f, 0.502816f, 0.527395f, 0.487716f, 0.562965f, 0.566159f, 0.523321f, 0.547054f}; const float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]={0.223532f, 0.226827f, 0.248830f, 0.208782f, 0.220391f, 0.219790f, 0.231187f, 0.248730f, 0.251408f, 0.263698f, 0.243858f, 0.281483f, 0.283080f, 0.261660f, 0.273527f}; #endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS][40]={{46, 46, 46, 46, 46, 46, 46, 49, 49, 53, 53, 53, 55, 55, 61, 61, 61, 65, 67, 67, 67, 67, 67, 67, 69, 72, 72, 72, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77},{46, 46, 46, 46, 46, 46, 46, 49, 49, 53, 53, 53, 55, 55, 61, 61, 61, 65, 67, 67, 67, 67, 67, 67, 69, 72, 72, 72, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77}}; const float CRendBin_Combined_BRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][1774]={
lib_rend/ivas_stat_rend.h +5 −0 Original line number Diff line number Diff line Loading @@ -1172,8 +1172,13 @@ typedef struct ivas_crend_state_t { float *freq_buffer_re[MAX_INTERN_CHANNELS]; float *freq_buffer_im[MAX_INTERN_CHANNELS]; #ifdef FIX_INV_DIFFUSE_WEIGHT float *freq_buffer_re_diffuse[BINAURAL_CHANNELS]; float *freq_buffer_im_diffuse[BINAURAL_CHANNELS]; #else float *freq_buffer_re_diffuse; float *freq_buffer_im_diffuse; #endif float *prev_out_buffer[BINAURAL_CHANNELS]; float *lfe_delay_line; float m_fYaw; Loading
scripts/binauralRenderer_interface/generate_crend_ivas_tables_from_sofa.c +0 −8 Original line number Diff line number Diff line Loading @@ -2435,15 +2435,7 @@ void update_c_file( HRTFS_DATA *hrtf, struct ivas_layout_config lscfg, const int fprintf( fp, ";" ); fprintf( fp, "\n#else" ); fprintf( fp, "\nconst float %s_%s_inv_diffuse_weight_%2dkHz[%u]=", DECLARATION_NAME, lscfg.name, samplerate / 1000, hrtf->max_num_ir ); for ( j = 0; j < hrtf->max_num_ir; j++ ) { hrtf->inv_diffuse_weight[0][j] += hrtf->inv_diffuse_weight[1][j]; } write_array_float_to_file( fp, hrtf->inv_diffuse_weight[0], hrtf->max_num_ir, hrtf->max_num_ir, FORMAT_FLOAT, 0, TAB_WITH_SPACE_OR_NOT ); for ( j = 0; j < hrtf->max_num_ir; j++ ) { hrtf->inv_diffuse_weight[0][j] -= hrtf->inv_diffuse_weight[1][j]; } fprintf( fp, ";" ); fprintf( fp, "\n#endif" ); #else Loading