Commit 0d90b30a authored by emerit's avatar emerit
Browse files

BE version

parent 326b4961
Loading
Loading
Loading
Loading
+143 −14
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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
            }
@@ -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
            }
@@ -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;
@@ -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
            }
@@ -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 );
@@ -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 )
            {
@@ -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];
@@ -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;
@@ -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];
@@ -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];

@@ -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;
        }
+3 −3
Original line number Diff line number Diff line
@@ -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]={
@@ -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]={
@@ -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]={
+5 −0
Original line number Diff line number Diff line
@@ -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;
+0 −8
Original line number Diff line number Diff line
@@ -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