Commit 6532f05f authored by emerit's avatar emerit
Browse files

separate convolver in crend

parent 83269b66
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2779,6 +2779,7 @@ const float McMASA_LFEGain_vectors[64] =
    -2.14f,  0.26f,  0.84f,  1.02f
};


/*----------------------------------------------------------------------------------*
 * ISM ROM tables
 *----------------------------------------------------------------------------------*/
+338 −264
Original line number Diff line number Diff line
@@ -1104,7 +1104,7 @@ void ivas_rend_closeCrend(
    return;
}


#ifdef USE_SYMETRIC_HRIR_FILTERS
/*-----------------------------------------------------------------------------------------*
 * Function ivas_crend_convolver()
 *
@@ -1125,13 +1125,9 @@ static ivas_error ivas_rend_crendConvolver(
    int16_t lfe_idx_in;
    int16_t offset, offset_in, offset_diffuse;
    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;
#endif
    float *pFreq_buf_re, *pFreq_buf_im;
    float *pFreq_filt_re, *pFreq_filt_im;
    float pOut[L_FRAME48k * 2];
@@ -1156,7 +1152,6 @@ 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++ )
            {
@@ -1166,8 +1161,6 @@ static ivas_error ivas_rend_crendConvolver(
                    i++;
                }
            }
#endif

            nchan_in = nchan_in - 1;
        }
        else
@@ -1175,7 +1168,6 @@ static ivas_error ivas_rend_crendConvolver(
            assert( 0 && "Custom LS not supported in CRend" );
        }
    }
#ifdef USE_SYMETRIC_HRIR_FILTERS
    else
    {
        for ( idx_in = 0; idx_in < nchan_in; idx_in++ )
@@ -1186,8 +1178,6 @@ static ivas_error ivas_rend_crendConvolver(
            }
        }
    }
#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 ); */
@@ -1198,17 +1188,8 @@ 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];
        if ( idx_in != lfe_idx_in )
        {
#endif
#ifdef USE_SYMETRIC_HRIR_FILTERS
        pIn_s = ppIn[idx_in];
        if ( ( pCrend->hHrtfCrend->ch_sum_diff[idx_in] >= 0 ) && ( idx_in != 2 ) )
        {
@@ -1218,9 +1199,6 @@ static ivas_error ivas_rend_crendConvolver(
        {
            pIn_d = NULL;
        }
#else
        pIn = &pcm_in[idx_in][i_ts * subframe_length];
#endif
        if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 )
        {
            pFreq_buf_re = &pCrend->hCrend->freq_buffer_re_diffuse[offset_diffuse];
@@ -1228,7 +1206,6 @@ static ivas_error ivas_rend_crendConvolver(
            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++ )
@@ -1271,25 +1248,11 @@ static ivas_error ivas_rend_crendConvolver(
                    }
                }
            }
#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 ) )
        {
            for ( k = 0; k < subframe_length; k++ )
@@ -1310,37 +1273,19 @@ static ivas_error ivas_rend_crendConvolver(
        {
            ivas_mdft( pIn_s, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length );
        }
#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++ )
    {
        set_zero( tmp_out_re, subframe_length );
        set_zero( tmp_out_im, subframe_length );
#ifdef USE_SYMETRIC_HRIR_FILTERS
        idx_j = pCrend->hHrtfCrend->ch_sum_diff[0] < 0 ? j : 0;
#endif

        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
            offset = 0;
            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[idx_in][idx_j]; m++ )
                {
                    offset_in = ( pCrend->hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[idx_in][idx_j] + m + 1 );
@@ -1359,7 +1304,163 @@ static ivas_error ivas_rend_crendConvolver(

                    offset = offset + k;
                }
            }
        }

        offset = 0;
        for ( m = 0; m < pCrend->hHrtfCrend->num_iterations_diffuse[j]; m++ )
        {
            offset_diffuse = ( pCrend->hCrend->diffuse_delay_line_rw_index + m + 1 );
            offset_diffuse = offset_diffuse % pCrend->hHrtfCrend->num_iterations_diffuse[0];
            offset_diffuse = offset_diffuse * subframe_length;
            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->hHrtfCrend->pOut_to_bin_diffuse_re[j][offset];
            pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_im[j][offset];

            for ( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max_diffuse[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];
            }
            offset = offset + k;
        }

        ivas_imdft( tmp_out_re, tmp_out_im, pOut, subframe_length );

        pFreq_buf_re = &pcm_out[j][i_ts * subframe_length];
        pFreq_buf_im = &pOut[subframe_length];
        for ( k = 0; k < subframe_length; k++ )
        {
            pFreq_buf_re[k] = pOut[k] + pCrend->hCrend->prev_out_buffer[j][k];
            pCrend->hCrend->prev_out_buffer[j][k] = pFreq_buf_im[k];
        }
    }

    if ( pCrend->hHrtfCrend->ch_sum_diff[0] >= 0 )
    {
        pFreq_buf_re = &pcm_out[0][i_ts * subframe_length];
        pFreq_buf_im = &pcm_out[1][i_ts * subframe_length];
        for ( k = 0; k < subframe_length; k++ )
        {
            tmp_out_re[0] = pFreq_buf_re[k];
            pFreq_buf_re[k] = ( pFreq_buf_re[k] + pFreq_buf_im[k] );
            pFreq_buf_im[k] = ( tmp_out_re[0] - pFreq_buf_im[k] );
        }
    }
    pCrend->hCrend->delay_line_rw_index++;
    pCrend->hCrend->delay_line_rw_index = pCrend->hCrend->delay_line_rw_index % ( pCrend->hHrtfCrend->max_num_iterations );
    if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 )
    {
        pCrend->hCrend->diffuse_delay_line_rw_index++;
        pCrend->hCrend->diffuse_delay_line_rw_index = pCrend->hCrend->diffuse_delay_line_rw_index % ( pCrend->hHrtfCrend->num_iterations_diffuse[0] );
    }

    return IVAS_ERR_OK;
}

#else

/*-----------------------------------------------------------------------------------------*
 * Function ivas_crend_convolver()
 *
 * Convolver block
 *-----------------------------------------------------------------------------------------*/

static ivas_error ivas_rend_crendConvolver(
    const CREND_WRAPPER *pCrend,
    IVAS_REND_AudioConfig inConfig,
    IVAS_REND_AudioConfig outConfig,
    float pcm_in[][L_FRAME48k],
    float pcm_out[][L_FRAME48k],
    const int32_t output_Fs,
    const int16_t i_ts )
{
    int16_t i, j, k, m;
    int16_t subframe_length, idx_in;
    int16_t lfe_idx_in;
    int16_t offset, offset_in, offset_diffuse;
    int16_t nchan_in, nchan_out;
    float *pIn;
    float *pFreq_buf_re, *pFreq_buf_im;
    float *pFreq_filt_re, *pFreq_filt_im;
    float pOut[L_FRAME48k * 2];
    float tmp_out_re[L_FRAME48k], tmp_out_im[L_FRAME48k];
    ivas_error error;

    if ( ( error = getAudioConfigNumChannels( inConfig, &nchan_in ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    if ( ( error = getAudioConfigNumChannels( outConfig, &nchan_out ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    subframe_length = (int16_t) ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES;

    lfe_idx_in = -1;
    if ( getAudioConfigType( inConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED )
    {
        if ( inConfig != IVAS_REND_AUDIO_CONFIG_LS_CUSTOM )
        {
            lfe_idx_in = LFE_CHANNEL;
        }
        else
        {
            assert( 0 && "Custom LS not supported in CRend" );
        }
    }

    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 ); */

    if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 )
    {
        set_zero( &pCrend->hCrend->freq_buffer_re_diffuse[offset_diffuse], subframe_length );
        set_zero( &pCrend->hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length );
    }

    i = 0;
    for ( idx_in = 0; idx_in < nchan_in; idx_in++ )
    {
        pIn = &pcm_in[idx_in][i_ts * subframe_length];
        if ( idx_in != lfe_idx_in )
        {
            if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 )
            {
                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];

                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 = &pCrend->hCrend->freq_buffer_re[i][offset];
            pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[i][offset];

            ivas_mdft( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length );
            i++;
        }
    }

    for ( j = 0; j < nchan_out; j++ )
    {
        set_zero( tmp_out_re, subframe_length );
        set_zero( tmp_out_im, subframe_length );

        i = 0;
        for ( idx_in = 0; idx_in < nchan_in; idx_in++ )
        {
            if ( idx_in != lfe_idx_in )
            {
                offset = 0;
                for ( m = 0; m < pCrend->hHrtfCrend->num_iterations[i][j]; m++ )
                {
                    offset_in = ( pCrend->hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[i][j] + m + 1 );
@@ -1375,17 +1476,10 @@ 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];
                    }

                    offset = offset + k;
                }

#endif
#ifdef USE_SYMETRIC_HRIR_FILTERS
                }
#else
                i++;
            }
#endif
        }

        offset = 0;
@@ -1410,33 +1504,13 @@ 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
        }
    }

#ifdef USE_SYMETRIC_HRIR_FILTERS
        if ( pCrend->hHrtfCrend->ch_sum_diff[0] >= 0 )
        {
            pFreq_buf_re = &pcm_out[0][i_ts * subframe_length];
            pFreq_buf_im = &pcm_out[1][i_ts * subframe_length];
            for ( k = 0; k < subframe_length; k++ )
            {
                tmp_out_re[0] = pFreq_buf_re[k];
                pFreq_buf_re[k] = ( pFreq_buf_re[k] + pFreq_buf_im[k] );
                pFreq_buf_im[k] = ( tmp_out_re[0] - pFreq_buf_im[k] );
            }
        }
#endif
    pCrend->hCrend->delay_line_rw_index++;
    pCrend->hCrend->delay_line_rw_index = pCrend->hCrend->delay_line_rw_index % ( pCrend->hHrtfCrend->max_num_iterations );
    if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 )
@@ -1447,7 +1521,7 @@ static ivas_error ivas_rend_crendConvolver(

    return IVAS_ERR_OK;
}

#endif

/*-----------------------------------------------------------------------------------------*
 * Function ivas_rend_crend_Process()
+24 −24

File changed.

Preview size limit exceeded, changes collapsed.

+30 −30
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_48kHz[1];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[15][1][1];
extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_48kHz;
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[15];
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[1];
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS];
extern float CRendBin_Combined_HRIR_coeff_re_48kHz[15][1][240];
extern float CRendBin_Combined_HRIR_coeff_im_48kHz[15][1][240];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz[1];
@@ -77,7 +77,7 @@ extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_32kHz[1];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[15][1][1];
extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_32kHz;
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[15];
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[1];
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS];
extern float CRendBin_Combined_HRIR_coeff_re_32kHz[15][1][160];
extern float CRendBin_Combined_HRIR_coeff_im_32kHz[15][1][160];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz[1];
@@ -91,7 +91,7 @@ extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_16kHz[1];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[15][1][1];
extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_16kHz;
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[15];
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[1];
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS];
extern float CRendBin_Combined_HRIR_coeff_re_16kHz[15][1][80];
extern float CRendBin_Combined_HRIR_coeff_im_16kHz[15][1][80];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz[1];
@@ -110,7 +110,7 @@ extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[1];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[16][1][2];
extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz;
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[16];
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[1];
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA3_HRIR_coeff_re_48kHz[16][1][480];
extern float CRendBin_HOA3_HRIR_coeff_im_48kHz[16][1][480];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[1];
@@ -124,7 +124,7 @@ extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[1];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[16][1][2];
extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz;
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[16];
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[1];
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA3_HRIR_coeff_re_32kHz[16][1][320];
extern float CRendBin_HOA3_HRIR_coeff_im_32kHz[16][1][320];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[1];
@@ -138,7 +138,7 @@ extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[1];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[16][1][2];
extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz;
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[16];
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[1];
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA3_HRIR_coeff_re_16kHz[16][1][160];
extern float CRendBin_HOA3_HRIR_coeff_im_16kHz[16][1][160];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[1];
@@ -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][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_num_iterations_48kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][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[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];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS][40];
extern float CRendBin_Combined_BRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][2955];
extern float CRendBin_Combined_BRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][2955];
extern float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS][2885];
extern float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS][2885];

/* Sample Rate = 32000 */

extern int16_t CRendBin_Combined_BRIR_max_num_iterations_32kHz;
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_num_iterations_32kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][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[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];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS][40];
extern float CRendBin_Combined_BRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][2819];
extern float CRendBin_Combined_BRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][2819];
extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS][2870];
extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS][2870];

/* Sample Rate = 16000 */

extern int16_t CRendBin_Combined_BRIR_max_num_iterations_16kHz;
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_num_iterations_16kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][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[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];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS][40];
extern float CRendBin_Combined_BRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][1774];
extern float CRendBin_Combined_BRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][1774];
extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][2522];
extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2522];
#endif /* _IVAS_ROM_BINAURAL_CREND_HEAD_ */