Loading lib_rend/ivas_crend.c +300 −257 Original line number Diff line number Diff line Loading @@ -221,6 +221,8 @@ static ivas_error ivas_rend_initCrend( #ifdef USE_SYMETRIC_HRIR_FILTERS if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) { if ( use_brir ) { nb_ear = CRendBin_Combined_BRIR_Use_Symetric_Filters == 0 ? 2 : 1; Loading @@ -233,15 +235,20 @@ static ivas_error ivas_rend_initCrend( { for ( i = 0; i < hHrtf->max_num_ir - 1; i++ ) { if ( i == 2 ) if ( i < 2 ) { hHrtf->ch_sum_diff[i] = i == 0 ? 0 : 1; hHrtf->ch_sum_diff_pair[i] = i == 0 ? 1 : 0; } else if ( i == 2 ) { hHrtf->ch_sum_diff[i] = 0; hHrtf->ch_sum_diff_pair[i] = i; } else { hHrtf->ch_sum_diff[i] = i % 2 ? 1 : 0; hHrtf->ch_sum_diff_pair[i] = i % 2 ? i - 1 : i + 1; hHrtf->ch_sum_diff[i] = i % 2 ? 0 : 1; hHrtf->ch_sum_diff_pair[i] = i % 2 ? i + 1 : i - 1; } } } Loading @@ -253,6 +260,46 @@ static ivas_error ivas_rend_initCrend( hHrtf->ch_sum_diff_pair[i] = i; } } } else { nb_ear = CRendBin_HOA3_HRIR_Use_Symetric_Filters == 0 ? 2 : 1; if ( nb_ear == 1 ) { curComp = 0; nbCompForCurrentOrder = 1; curOrder = 0; for ( i = 0; i < hHrtf->max_num_ir; i++ ) { if ( curComp < curOrder ) { hHrtf->ch_sum_diff[i] = 1; } else { hHrtf->ch_sum_diff[i] = 0; } curComp++; if ( curComp == nbCompForCurrentOrder ) { curOrder++; curComp = 0; nbCompForCurrentOrder = 2 * curOrder + 1; } hHrtf->ch_sum_diff_pair[i] = i; } } else { for ( i = 0; i < hHrtf->max_num_ir; i++ ) { hHrtf->ch_sum_diff[i] = -1; hHrtf->ch_sum_diff_pair[i] = i; } } } #endif if ( hSetOfHRTF == NULL ) Loading Loading @@ -512,52 +559,17 @@ static ivas_error ivas_rend_initCrend( } #ifdef USE_SYMETRIC_HRIR_FILTERS if ( use_brir && ( nb_ear == 1 ) ) { if ( i != 2 ) { hHrtf->inv_diffuse_weight[i] = hHrtf->inv_diffuse_weight[i] * 0.5f; } } #endif } } else if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) { #ifdef USE_SYMETRIC_HRIR_FILTERS nb_ear = CRendBin_HOA3_HRIR_Use_Symetric_Filters == 0 ? 2 : 1; if ( nb_ear == 1 ) { curComp = 0; nbCompForCurrentOrder = 1; curOrder = 0; for ( i = 0; i < hHrtf->max_num_ir; i++ ) { if ( curComp < curOrder ) { hHrtf->ch_sum_diff[i] = 1; } else { hHrtf->ch_sum_diff[i] = 0; } curComp++; if ( curComp == nbCompForCurrentOrder ) { curOrder++; curComp = 0; nbCompForCurrentOrder = 2 * curOrder + 1; } hHrtf->ch_sum_diff_pair[i] = i; } } else { for ( i = 0; i < hHrtf->max_num_ir; i++ ) { hHrtf->ch_sum_diff[i] = -1; hHrtf->ch_sum_diff_pair[i] = i; } } #endif if ( output_Fs == 48000 ) { hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s; Loading Loading @@ -774,51 +786,16 @@ static ivas_error ivas_rend_initCrend( } #ifdef USE_SYMETRIC_HRIR_FILTERS if ( use_brir && ( nb_ear == 1 ) ) { if ( i != 2 ) { hHrtf->inv_diffuse_weight[i] = hHrtf->inv_diffuse_weight[i] * 0.5f; } } #endif } else if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) { #ifdef USE_SYMETRIC_HRIR_FILTERS nb_ear = CRendBin_HOA3_HRIR_Use_Symetric_Filters == 0 ? 2 : 1; if ( nb_ear == 1 ) { curComp = 0; nbCompForCurrentOrder = 1; curOrder = 0; for ( i = 0; i < hHrtf->max_num_ir; i++ ) { if ( curComp < curOrder ) { hHrtf->ch_sum_diff[i] = 1; } else { hHrtf->ch_sum_diff[i] = 0; } curComp++; if ( curComp == nbCompForCurrentOrder ) { curOrder++; curComp = 0; nbCompForCurrentOrder = 2 * curOrder + 1; } hHrtf->ch_sum_diff_pair[i] = i; } } else { for ( i = 0; i < hHrtf->max_num_ir; i++ ) { hHrtf->ch_sum_diff[i] = -1; hHrtf->ch_sum_diff_pair[i] = i; } } #endif hHrtf->latency_s = hSetOfHRTF->hHRTF_hrir_hoa3->latency_s; hHrtf->max_num_iterations = hSetOfHRTF->hHRTF_hrir_hoa3->max_num_iterations; Loading Loading @@ -1150,6 +1127,7 @@ static ivas_error ivas_rend_crendConvolver( int16_t nchan_in, nchan_out; #ifdef USE_SYMETRIC_HRIR_FILTERS float *pIn_s, *pIn_d; float *ppIn[MAX_INTERN_CHANNELS]; int16_t idx_j; #else float *pIn; Loading Loading @@ -1178,12 +1156,38 @@ static ivas_error ivas_rend_crendConvolver( if ( inConfig != IVAS_REND_AUDIO_CONFIG_LS_CUSTOM ) { lfe_idx_in = LFE_CHANNEL; #ifdef USE_SYMETRIC_HRIR_FILTERS i = 0; for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) { if ( idx_in != lfe_idx_in ) { ppIn[i] = &pcm_in[idx_in][i_ts * subframe_length]; i++; } } #endif nchan_in = nchan_in - 1; } else { assert( 0 && "Custom LS not supported in CRend" ); } } #ifdef USE_SYMETRIC_HRIR_FILTERS else { for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) { if ( idx_in != lfe_idx_in ) { ppIn[idx_in] = &pcm_in[idx_in][i_ts * subframe_length]; } } } #endif offset = pCrend->hCrend->delay_line_rw_index * subframe_length; /* subframe_length * ( pCrend->hHrtfCrend->max_num_iterations - 1 ); */ offset_diffuse = pCrend->hCrend->diffuse_delay_line_rw_index * subframe_length; /* subframe_length *( pCrend->hHrtfCrend->num_iterations_diffuse[0] - 1 ); */ Loading @@ -1194,19 +1198,21 @@ static ivas_error ivas_rend_crendConvolver( set_zero( &pCrend->hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length ); } #ifndef USE_SYMETRIC_HRIR_FILTERS i = 0; #endif for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) { #ifndef USE_SYMETRIC_HRIR_FILTERS pIn = &pcm_in[idx_in][i_ts * subframe_length]; #endif if ( idx_in != lfe_idx_in ) { #endif #ifdef USE_SYMETRIC_HRIR_FILTERS pIn_s = &pcm_in[idx_in][i_ts * subframe_length]; if ( ( pCrend->hHrtfCrend->ch_sum_diff[i] >= 0 ) && ( i != 2 ) ) pIn_s = ppIn[idx_in]; if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] >= 0 ) && ( idx_in != 2 ) ) { pIn_d = &pcm_in[pCrend->hHrtfCrend->ch_sum_diff_pair[i]][i_ts * subframe_length]; pIn_d = ppIn[pCrend->hHrtfCrend->ch_sum_diff_pair[idx_in]]; } else { Loading @@ -1219,45 +1225,69 @@ static ivas_error ivas_rend_crendConvolver( { pFreq_buf_re = &pCrend->hCrend->freq_buffer_re_diffuse[offset_diffuse]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im_diffuse[offset_diffuse]; pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[i][offset]; pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[i][offset]; pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[idx_in][offset]; pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[idx_in][offset]; #ifdef USE_SYMETRIC_HRIR_FILTERS if ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] < 0 ) { for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { 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]; pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; } #ifdef USE_SYMETRIC_HRIR_FILTERS if ( pCrend->hHrtfCrend->ch_sum_diff[0] >= 0 ) } else { pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[pCrend->hHrtfCrend->ch_sum_diff_pair[i]][offset]; pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[pCrend->hHrtfCrend->ch_sum_diff_pair[i]][offset]; for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { tmp_out_re[k] = pFreq_filt_re[k]; tmp_out_im[k] = pFreq_filt_im[k]; } if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] >= 0 ) && ( idx_in != 2 ) ) { pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[pCrend->hHrtfCrend->ch_sum_diff_pair[idx_in]][offset]; pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[pCrend->hHrtfCrend->ch_sum_diff_pair[idx_in]][offset]; if ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] == 1 ) { for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { pFreq_buf_re[k] = pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i] - pFreq_buf_re[k]; pFreq_buf_im[k] = pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i] - pFreq_buf_im[k]; tmp_out_re[k] = pFreq_filt_re[k] - tmp_out_re[k]; tmp_out_im[k] = pFreq_filt_im[k] - tmp_out_im[k]; } } else { for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { 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]; tmp_out_re[k] += pFreq_filt_re[k]; tmp_out_im[k] += pFreq_filt_im[k]; } } for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { pFreq_buf_re[k] += tmp_out_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; pFreq_buf_im[k] += tmp_out_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; } } } #else for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; } #endif } #ifdef USE_SYMETRIC_HRIR_FILTERS pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[idx_in][offset]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[idx_in][offset]; #else pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[i][offset]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[i][offset]; #endif #ifdef USE_SYMETRIC_HRIR_FILTERS if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] == 0 ) && ( pIn_d != NULL ) ) Loading @@ -1283,8 +1313,11 @@ static ivas_error ivas_rend_crendConvolver( #else ivas_mdft( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length ); #endif #ifndef USE_SYMETRIC_HRIR_FILTERS i++; } #endif } for ( j = 0; j < nchan_out; j++ ) Loading @@ -1298,25 +1331,27 @@ static ivas_error ivas_rend_crendConvolver( i = 0; for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) { #ifndef USE_SYMETRIC_HRIR_FILTERS if ( idx_in != lfe_idx_in ) { #endif #ifdef USE_SYMETRIC_HRIR_FILTERS if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] < 0 ) || ( j == pCrend->hHrtfCrend->ch_sum_diff[idx_in] ) ) { #endif offset = 0; #ifdef USE_SYMETRIC_HRIR_FILTERS for ( m = 0; m < pCrend->hHrtfCrend->num_iterations[i][idx_j]; m++ ) for ( m = 0; m < pCrend->hHrtfCrend->num_iterations[idx_in][idx_j]; m++ ) { offset_in = ( pCrend->hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[i][idx_j] + m + 1 ); offset_in = ( pCrend->hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[idx_in][idx_j] + m + 1 ); offset_in = offset_in % ( pCrend->hHrtfCrend->max_num_iterations ); offset_in = offset_in * subframe_length; pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[i][offset_in]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[i][offset_in]; pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_re[i][idx_j][offset]; pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_im[i][idx_j][offset]; pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[idx_in][offset_in]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[idx_in][offset_in]; pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_re[idx_in][idx_j][offset]; pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_im[idx_in][idx_j][offset]; for ( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max[i][idx_j][m]; k++ ) for ( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max[idx_in][idx_j][m]; k++ ) { 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]; Loading Loading @@ -1347,9 +1382,10 @@ static ivas_error ivas_rend_crendConvolver( #endif #ifdef USE_SYMETRIC_HRIR_FILTERS } #endif #else i++; } #endif } offset = 0; Loading @@ -1374,10 +1410,17 @@ static ivas_error ivas_rend_crendConvolver( ivas_imdft( tmp_out_re, tmp_out_im, pOut, subframe_length ); pFreq_buf_re = &pcm_out[j][i_ts * subframe_length]; #ifdef USE_SYMETRIC_HRIR_FILTERS pFreq_buf_im = &pOut[subframe_length]; #endif for ( k = 0; k < subframe_length; k++ ) { pFreq_buf_re[k] = pOut[k] + pCrend->hCrend->prev_out_buffer[j][k]; #ifdef USE_SYMETRIC_HRIR_FILTERS pCrend->hCrend->prev_out_buffer[j][k] = pFreq_buf_im[k]; #else pCrend->hCrend->prev_out_buffer[j][k] = pOut[k + subframe_length]; #endif } } Loading lib_rend/ivas_rom_binaural_crend_head.c +4974 −2358 File changed.Preview size limit exceeded, changes collapsed. Show changes lib_rend/ivas_rom_binaural_crend_head.h +24 −24 Original line number Diff line number Diff line Loading @@ -152,42 +152,42 @@ extern float CRendBin_Combined_BRIR_latency_s; /* Sample Rate = 48000 */ extern int16_t CRendBin_Combined_BRIR_max_num_iterations_48kHz; extern uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[15][1]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[1]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][1][22]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[15][2]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[2]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][2][22]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz; extern float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[1][40]; extern float CRendBin_Combined_BRIR_coeff_re_48kHz[15][1][2984]; extern float CRendBin_Combined_BRIR_coeff_im_48kHz[15][1][2984]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[1][2885]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[1][2885]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[2][40]; extern float CRendBin_Combined_BRIR_coeff_re_48kHz[15][2][2955]; extern float CRendBin_Combined_BRIR_coeff_im_48kHz[15][2][2955]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[2][2885]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[2][2885]; /* Sample Rate = 32000 */ extern int16_t CRendBin_Combined_BRIR_max_num_iterations_32kHz; extern uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[15][1]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[1]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][1][22]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[15][2]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[2]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][2][22]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz; extern float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[1][40]; extern float CRendBin_Combined_BRIR_coeff_re_32kHz[15][1][2845]; extern float CRendBin_Combined_BRIR_coeff_im_32kHz[15][1][2845]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[1][2870]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[1][2870]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[2][40]; extern float CRendBin_Combined_BRIR_coeff_re_32kHz[15][2][2819]; extern float CRendBin_Combined_BRIR_coeff_im_32kHz[15][2][2819]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[2][2870]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[2][2870]; /* Sample Rate = 16000 */ extern int16_t CRendBin_Combined_BRIR_max_num_iterations_16kHz; extern uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[15][1]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[1]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][1][23]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[15][2]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[2]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][2][23]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz; extern float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[1][40]; extern float CRendBin_Combined_BRIR_coeff_re_16kHz[15][1][1777]; extern float CRendBin_Combined_BRIR_coeff_im_16kHz[15][1][1777]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[1][2522]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[1][2522]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[2][40]; extern float CRendBin_Combined_BRIR_coeff_re_16kHz[15][2][1774]; extern float CRendBin_Combined_BRIR_coeff_im_16kHz[15][2][1774]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[2][2522]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[2][2522]; #endif /* _IVAS_ROM_BINAURAL_CREND_HEAD_ */ scripts/binauralRenderer_interface/ivas_crend_binaural_filter_design.c +33 −0 Original line number Diff line number Diff line Loading @@ -929,6 +929,39 @@ ivas_error ivas_crend_binaural_filter_design_set_hrtf_fr( } } /* for ( i_chan = 0; i_chan < pParam->max_num_ir; ++i_chan ) { int pair; if ( i_chan < 2 ) { pair = i_chan == 0 ? 1 : 0; } else if ( i_chan == 2 ) { pair = 2; } else { pair = i_chan % 2 ? i_chan + 1 : i_chan - 1; } for ( i_ear = 0; i_ear < nb_ear; ++i_ear ) { ind_ear = nb_ear == 2 ? i_ear : sym_hrir; for ( i_block = 0; i_block < pParam->num_iterations[i_chan][0]; ++i_block ) { if ( pParam->pIndex_frequency_max[i_chan][i_ear][i_block] > pParam->pIndex_frequency_max[pair][i_ear][i_block] ) { pParam->pIndex_frequency_max[pair][i_ear][i_block] = pParam->pIndex_frequency_max[i_chan][i_ear][i_block]; } else { pParam->pIndex_frequency_max[i_chan][i_ear][i_block] = pParam->pIndex_frequency_max[pair][i_ear][i_block]; } } } } */ /* for ( i_chan = 0; i_chan < pParam->max_num_ir; ++i_chan ) { for ( i_block = pParam->num_iterations[i_chan][0] - 1; i_block > 0; --i_block ) Loading Loading
lib_rend/ivas_crend.c +300 −257 Original line number Diff line number Diff line Loading @@ -221,6 +221,8 @@ static ivas_error ivas_rend_initCrend( #ifdef USE_SYMETRIC_HRIR_FILTERS if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) { if ( use_brir ) { nb_ear = CRendBin_Combined_BRIR_Use_Symetric_Filters == 0 ? 2 : 1; Loading @@ -233,15 +235,20 @@ static ivas_error ivas_rend_initCrend( { for ( i = 0; i < hHrtf->max_num_ir - 1; i++ ) { if ( i == 2 ) if ( i < 2 ) { hHrtf->ch_sum_diff[i] = i == 0 ? 0 : 1; hHrtf->ch_sum_diff_pair[i] = i == 0 ? 1 : 0; } else if ( i == 2 ) { hHrtf->ch_sum_diff[i] = 0; hHrtf->ch_sum_diff_pair[i] = i; } else { hHrtf->ch_sum_diff[i] = i % 2 ? 1 : 0; hHrtf->ch_sum_diff_pair[i] = i % 2 ? i - 1 : i + 1; hHrtf->ch_sum_diff[i] = i % 2 ? 0 : 1; hHrtf->ch_sum_diff_pair[i] = i % 2 ? i + 1 : i - 1; } } } Loading @@ -253,6 +260,46 @@ static ivas_error ivas_rend_initCrend( hHrtf->ch_sum_diff_pair[i] = i; } } } else { nb_ear = CRendBin_HOA3_HRIR_Use_Symetric_Filters == 0 ? 2 : 1; if ( nb_ear == 1 ) { curComp = 0; nbCompForCurrentOrder = 1; curOrder = 0; for ( i = 0; i < hHrtf->max_num_ir; i++ ) { if ( curComp < curOrder ) { hHrtf->ch_sum_diff[i] = 1; } else { hHrtf->ch_sum_diff[i] = 0; } curComp++; if ( curComp == nbCompForCurrentOrder ) { curOrder++; curComp = 0; nbCompForCurrentOrder = 2 * curOrder + 1; } hHrtf->ch_sum_diff_pair[i] = i; } } else { for ( i = 0; i < hHrtf->max_num_ir; i++ ) { hHrtf->ch_sum_diff[i] = -1; hHrtf->ch_sum_diff_pair[i] = i; } } } #endif if ( hSetOfHRTF == NULL ) Loading Loading @@ -512,52 +559,17 @@ static ivas_error ivas_rend_initCrend( } #ifdef USE_SYMETRIC_HRIR_FILTERS if ( use_brir && ( nb_ear == 1 ) ) { if ( i != 2 ) { hHrtf->inv_diffuse_weight[i] = hHrtf->inv_diffuse_weight[i] * 0.5f; } } #endif } } else if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) { #ifdef USE_SYMETRIC_HRIR_FILTERS nb_ear = CRendBin_HOA3_HRIR_Use_Symetric_Filters == 0 ? 2 : 1; if ( nb_ear == 1 ) { curComp = 0; nbCompForCurrentOrder = 1; curOrder = 0; for ( i = 0; i < hHrtf->max_num_ir; i++ ) { if ( curComp < curOrder ) { hHrtf->ch_sum_diff[i] = 1; } else { hHrtf->ch_sum_diff[i] = 0; } curComp++; if ( curComp == nbCompForCurrentOrder ) { curOrder++; curComp = 0; nbCompForCurrentOrder = 2 * curOrder + 1; } hHrtf->ch_sum_diff_pair[i] = i; } } else { for ( i = 0; i < hHrtf->max_num_ir; i++ ) { hHrtf->ch_sum_diff[i] = -1; hHrtf->ch_sum_diff_pair[i] = i; } } #endif if ( output_Fs == 48000 ) { hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s; Loading Loading @@ -774,51 +786,16 @@ static ivas_error ivas_rend_initCrend( } #ifdef USE_SYMETRIC_HRIR_FILTERS if ( use_brir && ( nb_ear == 1 ) ) { if ( i != 2 ) { hHrtf->inv_diffuse_weight[i] = hHrtf->inv_diffuse_weight[i] * 0.5f; } } #endif } else if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) { #ifdef USE_SYMETRIC_HRIR_FILTERS nb_ear = CRendBin_HOA3_HRIR_Use_Symetric_Filters == 0 ? 2 : 1; if ( nb_ear == 1 ) { curComp = 0; nbCompForCurrentOrder = 1; curOrder = 0; for ( i = 0; i < hHrtf->max_num_ir; i++ ) { if ( curComp < curOrder ) { hHrtf->ch_sum_diff[i] = 1; } else { hHrtf->ch_sum_diff[i] = 0; } curComp++; if ( curComp == nbCompForCurrentOrder ) { curOrder++; curComp = 0; nbCompForCurrentOrder = 2 * curOrder + 1; } hHrtf->ch_sum_diff_pair[i] = i; } } else { for ( i = 0; i < hHrtf->max_num_ir; i++ ) { hHrtf->ch_sum_diff[i] = -1; hHrtf->ch_sum_diff_pair[i] = i; } } #endif hHrtf->latency_s = hSetOfHRTF->hHRTF_hrir_hoa3->latency_s; hHrtf->max_num_iterations = hSetOfHRTF->hHRTF_hrir_hoa3->max_num_iterations; Loading Loading @@ -1150,6 +1127,7 @@ static ivas_error ivas_rend_crendConvolver( int16_t nchan_in, nchan_out; #ifdef USE_SYMETRIC_HRIR_FILTERS float *pIn_s, *pIn_d; float *ppIn[MAX_INTERN_CHANNELS]; int16_t idx_j; #else float *pIn; Loading Loading @@ -1178,12 +1156,38 @@ static ivas_error ivas_rend_crendConvolver( if ( inConfig != IVAS_REND_AUDIO_CONFIG_LS_CUSTOM ) { lfe_idx_in = LFE_CHANNEL; #ifdef USE_SYMETRIC_HRIR_FILTERS i = 0; for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) { if ( idx_in != lfe_idx_in ) { ppIn[i] = &pcm_in[idx_in][i_ts * subframe_length]; i++; } } #endif nchan_in = nchan_in - 1; } else { assert( 0 && "Custom LS not supported in CRend" ); } } #ifdef USE_SYMETRIC_HRIR_FILTERS else { for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) { if ( idx_in != lfe_idx_in ) { ppIn[idx_in] = &pcm_in[idx_in][i_ts * subframe_length]; } } } #endif offset = pCrend->hCrend->delay_line_rw_index * subframe_length; /* subframe_length * ( pCrend->hHrtfCrend->max_num_iterations - 1 ); */ offset_diffuse = pCrend->hCrend->diffuse_delay_line_rw_index * subframe_length; /* subframe_length *( pCrend->hHrtfCrend->num_iterations_diffuse[0] - 1 ); */ Loading @@ -1194,19 +1198,21 @@ static ivas_error ivas_rend_crendConvolver( set_zero( &pCrend->hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length ); } #ifndef USE_SYMETRIC_HRIR_FILTERS i = 0; #endif for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) { #ifndef USE_SYMETRIC_HRIR_FILTERS pIn = &pcm_in[idx_in][i_ts * subframe_length]; #endif if ( idx_in != lfe_idx_in ) { #endif #ifdef USE_SYMETRIC_HRIR_FILTERS pIn_s = &pcm_in[idx_in][i_ts * subframe_length]; if ( ( pCrend->hHrtfCrend->ch_sum_diff[i] >= 0 ) && ( i != 2 ) ) pIn_s = ppIn[idx_in]; if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] >= 0 ) && ( idx_in != 2 ) ) { pIn_d = &pcm_in[pCrend->hHrtfCrend->ch_sum_diff_pair[i]][i_ts * subframe_length]; pIn_d = ppIn[pCrend->hHrtfCrend->ch_sum_diff_pair[idx_in]]; } else { Loading @@ -1219,45 +1225,69 @@ static ivas_error ivas_rend_crendConvolver( { pFreq_buf_re = &pCrend->hCrend->freq_buffer_re_diffuse[offset_diffuse]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im_diffuse[offset_diffuse]; pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[i][offset]; pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[i][offset]; pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[idx_in][offset]; pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[idx_in][offset]; #ifdef USE_SYMETRIC_HRIR_FILTERS if ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] < 0 ) { for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { 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]; pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; } #ifdef USE_SYMETRIC_HRIR_FILTERS if ( pCrend->hHrtfCrend->ch_sum_diff[0] >= 0 ) } else { pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[pCrend->hHrtfCrend->ch_sum_diff_pair[i]][offset]; pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[pCrend->hHrtfCrend->ch_sum_diff_pair[i]][offset]; for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { tmp_out_re[k] = pFreq_filt_re[k]; tmp_out_im[k] = pFreq_filt_im[k]; } if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] >= 0 ) && ( idx_in != 2 ) ) { pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[pCrend->hHrtfCrend->ch_sum_diff_pair[idx_in]][offset]; pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[pCrend->hHrtfCrend->ch_sum_diff_pair[idx_in]][offset]; if ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] == 1 ) { for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { pFreq_buf_re[k] = pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i] - pFreq_buf_re[k]; pFreq_buf_im[k] = pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i] - pFreq_buf_im[k]; tmp_out_re[k] = pFreq_filt_re[k] - tmp_out_re[k]; tmp_out_im[k] = pFreq_filt_im[k] - tmp_out_im[k]; } } else { for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { 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]; tmp_out_re[k] += pFreq_filt_re[k]; tmp_out_im[k] += pFreq_filt_im[k]; } } for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { pFreq_buf_re[k] += tmp_out_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; pFreq_buf_im[k] += tmp_out_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; } } } #else for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[idx_in]; } #endif } #ifdef USE_SYMETRIC_HRIR_FILTERS pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[idx_in][offset]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[idx_in][offset]; #else pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[i][offset]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[i][offset]; #endif #ifdef USE_SYMETRIC_HRIR_FILTERS if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] == 0 ) && ( pIn_d != NULL ) ) Loading @@ -1283,8 +1313,11 @@ static ivas_error ivas_rend_crendConvolver( #else ivas_mdft( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length ); #endif #ifndef USE_SYMETRIC_HRIR_FILTERS i++; } #endif } for ( j = 0; j < nchan_out; j++ ) Loading @@ -1298,25 +1331,27 @@ static ivas_error ivas_rend_crendConvolver( i = 0; for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) { #ifndef USE_SYMETRIC_HRIR_FILTERS if ( idx_in != lfe_idx_in ) { #endif #ifdef USE_SYMETRIC_HRIR_FILTERS if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] < 0 ) || ( j == pCrend->hHrtfCrend->ch_sum_diff[idx_in] ) ) { #endif offset = 0; #ifdef USE_SYMETRIC_HRIR_FILTERS for ( m = 0; m < pCrend->hHrtfCrend->num_iterations[i][idx_j]; m++ ) for ( m = 0; m < pCrend->hHrtfCrend->num_iterations[idx_in][idx_j]; m++ ) { offset_in = ( pCrend->hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[i][idx_j] + m + 1 ); offset_in = ( pCrend->hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[idx_in][idx_j] + m + 1 ); offset_in = offset_in % ( pCrend->hHrtfCrend->max_num_iterations ); offset_in = offset_in * subframe_length; pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[i][offset_in]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[i][offset_in]; pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_re[i][idx_j][offset]; pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_im[i][idx_j][offset]; pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[idx_in][offset_in]; pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[idx_in][offset_in]; pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_re[idx_in][idx_j][offset]; pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_im[idx_in][idx_j][offset]; for ( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max[i][idx_j][m]; k++ ) for ( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max[idx_in][idx_j][m]; k++ ) { 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]; Loading Loading @@ -1347,9 +1382,10 @@ static ivas_error ivas_rend_crendConvolver( #endif #ifdef USE_SYMETRIC_HRIR_FILTERS } #endif #else i++; } #endif } offset = 0; Loading @@ -1374,10 +1410,17 @@ static ivas_error ivas_rend_crendConvolver( ivas_imdft( tmp_out_re, tmp_out_im, pOut, subframe_length ); pFreq_buf_re = &pcm_out[j][i_ts * subframe_length]; #ifdef USE_SYMETRIC_HRIR_FILTERS pFreq_buf_im = &pOut[subframe_length]; #endif for ( k = 0; k < subframe_length; k++ ) { pFreq_buf_re[k] = pOut[k] + pCrend->hCrend->prev_out_buffer[j][k]; #ifdef USE_SYMETRIC_HRIR_FILTERS pCrend->hCrend->prev_out_buffer[j][k] = pFreq_buf_im[k]; #else pCrend->hCrend->prev_out_buffer[j][k] = pOut[k + subframe_length]; #endif } } Loading
lib_rend/ivas_rom_binaural_crend_head.c +4974 −2358 File changed.Preview size limit exceeded, changes collapsed. Show changes
lib_rend/ivas_rom_binaural_crend_head.h +24 −24 Original line number Diff line number Diff line Loading @@ -152,42 +152,42 @@ extern float CRendBin_Combined_BRIR_latency_s; /* Sample Rate = 48000 */ extern int16_t CRendBin_Combined_BRIR_max_num_iterations_48kHz; extern uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[15][1]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[1]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][1][22]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[15][2]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[2]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][2][22]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz; extern float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[1][40]; extern float CRendBin_Combined_BRIR_coeff_re_48kHz[15][1][2984]; extern float CRendBin_Combined_BRIR_coeff_im_48kHz[15][1][2984]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[1][2885]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[1][2885]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[2][40]; extern float CRendBin_Combined_BRIR_coeff_re_48kHz[15][2][2955]; extern float CRendBin_Combined_BRIR_coeff_im_48kHz[15][2][2955]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[2][2885]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[2][2885]; /* Sample Rate = 32000 */ extern int16_t CRendBin_Combined_BRIR_max_num_iterations_32kHz; extern uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[15][1]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[1]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][1][22]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[15][2]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[2]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][2][22]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz; extern float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[1][40]; extern float CRendBin_Combined_BRIR_coeff_re_32kHz[15][1][2845]; extern float CRendBin_Combined_BRIR_coeff_im_32kHz[15][1][2845]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[1][2870]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[1][2870]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[2][40]; extern float CRendBin_Combined_BRIR_coeff_re_32kHz[15][2][2819]; extern float CRendBin_Combined_BRIR_coeff_im_32kHz[15][2][2819]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[2][2870]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[2][2870]; /* Sample Rate = 16000 */ extern int16_t CRendBin_Combined_BRIR_max_num_iterations_16kHz; extern uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[15][1]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[1]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][1][23]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[15][2]; extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[2]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][2][23]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz; extern float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[1][40]; extern float CRendBin_Combined_BRIR_coeff_re_16kHz[15][1][1777]; extern float CRendBin_Combined_BRIR_coeff_im_16kHz[15][1][1777]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[1][2522]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[1][2522]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[2][40]; extern float CRendBin_Combined_BRIR_coeff_re_16kHz[15][2][1774]; extern float CRendBin_Combined_BRIR_coeff_im_16kHz[15][2][1774]; extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[2][2522]; extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[2][2522]; #endif /* _IVAS_ROM_BINAURAL_CREND_HEAD_ */
scripts/binauralRenderer_interface/ivas_crend_binaural_filter_design.c +33 −0 Original line number Diff line number Diff line Loading @@ -929,6 +929,39 @@ ivas_error ivas_crend_binaural_filter_design_set_hrtf_fr( } } /* for ( i_chan = 0; i_chan < pParam->max_num_ir; ++i_chan ) { int pair; if ( i_chan < 2 ) { pair = i_chan == 0 ? 1 : 0; } else if ( i_chan == 2 ) { pair = 2; } else { pair = i_chan % 2 ? i_chan + 1 : i_chan - 1; } for ( i_ear = 0; i_ear < nb_ear; ++i_ear ) { ind_ear = nb_ear == 2 ? i_ear : sym_hrir; for ( i_block = 0; i_block < pParam->num_iterations[i_chan][0]; ++i_block ) { if ( pParam->pIndex_frequency_max[i_chan][i_ear][i_block] > pParam->pIndex_frequency_max[pair][i_ear][i_block] ) { pParam->pIndex_frequency_max[pair][i_ear][i_block] = pParam->pIndex_frequency_max[i_chan][i_ear][i_block]; } else { pParam->pIndex_frequency_max[i_chan][i_ear][i_block] = pParam->pIndex_frequency_max[pair][i_ear][i_block]; } } } } */ /* for ( i_chan = 0; i_chan < pParam->max_num_ir; ++i_chan ) { for ( i_block = pParam->num_iterations[i_chan][0] - 1; i_block > 0; --i_block ) Loading