Commit c9d0da04 authored by emerit's avatar emerit
Browse files

add support of multiple HOA order in hrtf binary file and bug fix

parent b50ec406
Loading
Loading
Loading
Loading
+129 −2
Original line number Diff line number Diff line
@@ -195,7 +195,12 @@ static ivas_error check_hrtf_binary_header(
    }

    /* Check the output format of the decoder */

#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
    if ( ( hrtf_header->input_cfg != BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) && ( hrtf_header->input_cfg != BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) && ( hrtf_header->input_cfg != BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) && ( hrtf_header->input_cfg != BINAURAL_INPUT_AUDIO_CONFIG_FOA ) && ( hrtf_header->input_cfg != BINAURAL_INPUT_AUDIO_CONFIG_UNDEFINED ) )
#else
    if ( ( hrtf_header->input_cfg != BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) && ( hrtf_header->input_cfg != BINAURAL_INPUT_AUDIO_CONFIG_HOA ) && ( hrtf_header->input_cfg != BINAURAL_INPUT_AUDIO_CONFIG_UNDEFINED ) )
#endif
    {
        return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Header of HRTF binary file not compliant (input audio configuration)" );
    }
@@ -1103,7 +1108,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata(
            }
        }
    }
    if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA )
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 )
#else
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA )
#endif
    {
        /* HRIR_HOA3 */
        ( *hHRTF )->FASTCONV_HOA3_latency_s = *( (float *) ( hrtf_data_rptr ) );
@@ -1154,8 +1163,112 @@ static ivas_error create_fastconv_HRTF_from_rawdata(
            }
        }
    }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 )
    {
        /* HRIR_HOA2 */
        ( *hHRTF )->FASTCONV_HOA2_latency_s = *( (float *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( float );

        if ( HRTF_SH_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
        {
            return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" );
        }
        hrtf_data_rptr += sizeof( uint16_t );

        if ( BINAURAL_NTAPS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
        {
            return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS)" );
        }
        hrtf_data_rptr += sizeof( uint16_t );

        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                memcpy( ( *hHRTF )->leftHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) );
                hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float );
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                memcpy( ( *hHRTF )->leftHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) );
                hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float );
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                memcpy( ( *hHRTF )->rightHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) );
                hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float );
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                memcpy( ( *hHRTF )->rightHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) );
                hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float );
            }
        }
    }
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA )
    {
        /* HRIR_HOA2 */
        ( *hHRTF )->FASTCONV_FOA_latency_s = *( (float *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( float );

        if ( HRTF_SH_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
        {
            return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" );
        }
        hrtf_data_rptr += sizeof( uint16_t );

        if ( BINAURAL_NTAPS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
        {
            return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS)" );
        }
        hrtf_data_rptr += sizeof( uint16_t );

        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                memcpy( ( *hHRTF )->leftHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) );
                hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float );
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                memcpy( ( *hHRTF )->leftHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) );
                hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float );
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                memcpy( ( *hHRTF )->rightHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) );
                hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float );
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                memcpy( ( *hHRTF )->rightHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) );
                hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float );
            }
        }
    }
#endif
    /* BRIR */
    if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
    {
        ( *hHRTF )->FASTCONV_BRIR_latency_s = *( (float *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( float );
@@ -1513,10 +1626,24 @@ ivas_error create_SetOfHRTF_from_binary(
                {
                    hHRTF = &( ( *hSetOfHRTF ).hHRTF_hrir_combined );
                }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
                else if ( hrtf_header.input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 )
#else
                else if ( hrtf_header.input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA )
#endif
                {
                    hHRTF = &( ( *hSetOfHRTF ).hHRTF_hrir_hoa3 );
                }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
                else if ( hrtf_header.input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 )
                {
                    hHRTF = &( ( *hSetOfHRTF ).hHRTF_hrir_hoa2 );
                }
                else if ( hrtf_header.input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA )
                {
                    hHRTF = &( ( *hSetOfHRTF ).hHRTF_hrir_foa );
                }
#endif
            }
            else if ( hrtf_header.rend_type == RENDERER_BINAURAL_MIXER_CONV_ROOM )
            {
+259 −2
Original line number Diff line number Diff line
@@ -58,7 +58,11 @@
#define DEFAULT_BIN_FILE_EXT      ".bin"

#define IVAS_NB_RENDERER_TYPE 7
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
#define IVAS_NB_AUDIO_CONFIG 4
#else
#define IVAS_NB_AUDIO_CONFIG 2
#endif
#define IVAS_NB_SAMPLERATE 3

const RENDERER_TYPE rend_types[IVAS_NB_RENDERER_TYPE] = {
@@ -72,8 +76,15 @@ const RENDERER_TYPE rend_types[IVAS_NB_RENDERER_TYPE] = {
};
const BINAURAL_INPUT_AUDIO_CONFIG input_cfgs[IVAS_NB_AUDIO_CONFIG] = {
    BINAURAL_INPUT_AUDIO_CONFIG_COMBINED,
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
    BINAURAL_INPUT_AUDIO_CONFIG_HOA3,
    BINAURAL_INPUT_AUDIO_CONFIG_HOA2,
    BINAURAL_INPUT_AUDIO_CONFIG_FOA
#else
    BINAURAL_INPUT_AUDIO_CONFIG_HOA
#endif
};

const int32_t sample_rates[IVAS_NB_SAMPLERATE] = { 48000, 32000, 16000 }; /* Hz */ /* 8000 Hz not supported by mdft */

#ifdef FILE_HEADER
@@ -820,7 +831,11 @@ char *create_hrtf_fastconv( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG
            cldfb_nchan_max = CLDFB_NO_CHANNELS_MAX;
        }
    }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
    else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 )
#else
    else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA )
#endif
    {
        if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM )
        {
@@ -832,6 +847,32 @@ char *create_hrtf_fastconv( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG
        hrtf_channels = HRTF_SH_CHANNELS;
        num_taps = BINAURAL_NTAPS;
    }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
    else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 )
    {
        if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM )
        {
            /* No HOA2 BRIRs */
            return NULL;
        }

        latency_s = FASTCONV_HOA2_latency_s;
        hrtf_channels = 9;
        num_taps = BINAURAL_NTAPS;
    }
    else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA )
    {
        if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM )
        {
            /* No HOA2 BRIRs */
            return NULL;
        }

        latency_s = FASTCONV_FOA_latency_s;
        hrtf_channels = 4;
        num_taps = BINAURAL_NTAPS;
    }
#endif
    else
    {
        fprintf( stderr, "Unsupported renderer type in create_hrtf_fastconv()\n\n" );
@@ -943,7 +984,11 @@ char *create_hrtf_fastconv( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG
        }
    }
    // HRIR_HOA3
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 )
#else
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA )
#endif
    {
        memcpy( hrtf_wptr, &( latency_s ), sizeof( float ) ); // latency_s => float
        hrtf_wptr += sizeof( float );
@@ -988,6 +1033,99 @@ char *create_hrtf_fastconv( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG
            }
        }
    }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 )
    {
        memcpy( hrtf_wptr, &( latency_s ), sizeof( float ) ); // latency_s => float
        hrtf_wptr += sizeof( float );

        memcpy( hrtf_wptr, &( hrtf_channels ), sizeof( uint16_t ) ); // hrtf_channels => uint16_t
        hrtf_wptr += sizeof( uint16_t );

        memcpy( hrtf_wptr, &( num_taps ), sizeof( uint16_t ) ); // num_taps => uint16_t
        hrtf_wptr += sizeof( uint16_t );

        data_size_tmp = num_taps * sizeof( float );
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < hrtf_channels; j++ )
            {
                memcpy( hrtf_wptr, &leftHRIRReal_HOA2[i][j], data_size_tmp );
                hrtf_wptr += data_size_tmp;
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < hrtf_channels; j++ )
            {
                memcpy( hrtf_wptr, &leftHRIRImag_HOA2[i][j], data_size_tmp );
                hrtf_wptr += data_size_tmp;
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < hrtf_channels; j++ )
            {
                memcpy( hrtf_wptr, &rightHRIRReal_HOA2[i][j], data_size_tmp );
                hrtf_wptr += data_size_tmp;
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < hrtf_channels; j++ )
            {
                memcpy( hrtf_wptr, &rightHRIRImag_HOA2[i][j], data_size_tmp );
                hrtf_wptr += data_size_tmp;
            }
        }
    }
    // FOA
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA )
    {
        memcpy( hrtf_wptr, &( latency_s ), sizeof( float ) ); // latency_s => float
        hrtf_wptr += sizeof( float );

        memcpy( hrtf_wptr, &( hrtf_channels ), sizeof( uint16_t ) ); // hrtf_channels => uint16_t
        hrtf_wptr += sizeof( uint16_t );

        memcpy( hrtf_wptr, &( num_taps ), sizeof( uint16_t ) ); // num_taps => uint16_t
        hrtf_wptr += sizeof( uint16_t );

        data_size_tmp = num_taps * sizeof( float );
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < hrtf_channels; j++ )
            {
                memcpy( hrtf_wptr, &leftHRIRReal_FOA[i][j], data_size_tmp );
                hrtf_wptr += data_size_tmp;
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < hrtf_channels; j++ )
            {
                memcpy( hrtf_wptr, &leftHRIRImag_FOA[i][j], data_size_tmp );
                hrtf_wptr += data_size_tmp;
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < hrtf_channels; j++ )
            {
                memcpy( hrtf_wptr, &rightHRIRReal_FOA[i][j], data_size_tmp );
                hrtf_wptr += data_size_tmp;
            }
        }
        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            for ( j = 0; j < hrtf_channels; j++ )
            {
                memcpy( hrtf_wptr, &rightHRIRImag_FOA[i][j], data_size_tmp );
                hrtf_wptr += data_size_tmp;
            }
        }
    }
#endif
    // BRIR
    else if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
    {
@@ -1251,7 +1389,11 @@ int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CON
            hrtf_table_dims_out.max_num_iterations_diffuse = 0;
            hrtf_table_dims_out.max_total_num_fsamp_per_iteration_diff = 0;*/
        }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
        else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 )
#else
        else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA )
#endif
        {
            if ( frequency == 48000 )
            {
@@ -1269,6 +1411,7 @@ int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CON

                hrtf_table_dims_out.max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_48kHz;


                result = 0;
            }
            else if ( frequency == 32000 )
@@ -1315,6 +1458,115 @@ int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CON
            hrtf_table_dims_out.max_num_iterations_diffuse = 0;
            hrtf_table_dims_out.max_total_num_fsamp_per_iteration_diff = 0;*/
        }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
        else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 )
        {
            if ( frequency == 48000 )
            {
                hrtf_table_ptrs_out.latency_s = &CRendBin_HOA2_HRIR_latency_s;
                hrtf_table_ptrs_out.num_iterations = (uint16_t *) ( &CRendBin_HOA2_HRIR_num_iterations_48kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max = (uint16_t *) ( &CRendBin_HOA2_HRIR_pIndex_frequency_max_48kHz );
                hrtf_table_ptrs_out.num_iterations_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_num_iterations_diffuse_48kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_48kHz );
                hrtf_table_ptrs_out.index_frequency_max_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_index_frequency_max_diffuse_48kHz );
                hrtf_table_ptrs_out.inv_diffuse_weight = (float *) ( &CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz );
                hrtf_table_ptrs_out.coeff_re = (float *) ( &CRendBin_HOA2_HRIR_coeff_re_48kHz );
                hrtf_table_ptrs_out.coeff_im = (float *) ( &CRendBin_HOA2_HRIR_coeff_im_48kHz );
                hrtf_table_ptrs_out.coeff_diffuse_re = (float *) ( &CRendBin_HOA2_HRIR_coeff_diffuse_re_48kHz );
                hrtf_table_ptrs_out.coeff_diffuse_im = (float *) ( &CRendBin_HOA2_HRIR_coeff_diffuse_im_48kHz );

                hrtf_table_dims_out.max_num_iterations = CRendBin_HOA2_HRIR_max_num_iterations_48kHz;
                result = 0;
            }
            else if ( frequency == 32000 )
            {
                hrtf_table_ptrs_out.latency_s = &CRendBin_HOA2_HRIR_latency_s;
                hrtf_table_ptrs_out.num_iterations = (uint16_t *) ( &CRendBin_HOA2_HRIR_num_iterations_32kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max = (uint16_t *) ( &CRendBin_HOA2_HRIR_pIndex_frequency_max_32kHz );
                hrtf_table_ptrs_out.num_iterations_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_num_iterations_diffuse_32kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_32kHz );
                hrtf_table_ptrs_out.index_frequency_max_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_index_frequency_max_diffuse_32kHz );
                hrtf_table_ptrs_out.inv_diffuse_weight = (float *) ( &CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz );
                hrtf_table_ptrs_out.coeff_re = (float *) ( &CRendBin_HOA2_HRIR_coeff_re_32kHz );
                hrtf_table_ptrs_out.coeff_im = (float *) ( &CRendBin_HOA2_HRIR_coeff_im_32kHz );
                hrtf_table_ptrs_out.coeff_diffuse_re = (float *) ( &CRendBin_HOA2_HRIR_coeff_diffuse_re_32kHz );
                hrtf_table_ptrs_out.coeff_diffuse_im = (float *) ( &CRendBin_HOA2_HRIR_coeff_diffuse_im_32kHz );

                hrtf_table_dims_out.max_num_iterations = CRendBin_HOA2_HRIR_max_num_iterations_32kHz;
                result = 0;
            }
            else if ( frequency == 16000 )
            {
                hrtf_table_ptrs_out.latency_s = &CRendBin_HOA2_HRIR_latency_s;
                hrtf_table_ptrs_out.num_iterations = (uint16_t *) ( &CRendBin_HOA2_HRIR_num_iterations_16kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max = (uint16_t *) ( &CRendBin_HOA2_HRIR_pIndex_frequency_max_16kHz );
                hrtf_table_ptrs_out.num_iterations_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_num_iterations_diffuse_16kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_16kHz );
                hrtf_table_ptrs_out.index_frequency_max_diffuse = (uint16_t *) ( &CRendBin_HOA2_HRIR_index_frequency_max_diffuse_16kHz );
                hrtf_table_ptrs_out.inv_diffuse_weight = (float *) ( &CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz );
                hrtf_table_ptrs_out.coeff_re = (float *) ( &CRendBin_HOA2_HRIR_coeff_re_16kHz );
                hrtf_table_ptrs_out.coeff_im = (float *) ( &CRendBin_HOA2_HRIR_coeff_im_16kHz );
                hrtf_table_ptrs_out.coeff_diffuse_re = (float *) ( &CRendBin_HOA2_HRIR_coeff_diffuse_re_16kHz );
                hrtf_table_ptrs_out.coeff_diffuse_im = (float *) ( &CRendBin_HOA2_HRIR_coeff_diffuse_im_16kHz );

                hrtf_table_dims_out.max_num_iterations = CRendBin_HOA2_HRIR_max_num_iterations_16kHz;
                result = 0;
            }
        }
        else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA )
        {
            if ( frequency == 48000 )
            {
                hrtf_table_ptrs_out.latency_s = &CRendBin_FOA_HRIR_latency_s;
                hrtf_table_ptrs_out.num_iterations = (uint16_t *) ( &CRendBin_FOA_HRIR_num_iterations_48kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max = (uint16_t *) ( &CRendBin_FOA_HRIR_pIndex_frequency_max_48kHz );
                hrtf_table_ptrs_out.num_iterations_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_num_iterations_diffuse_48kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_48kHz );
                hrtf_table_ptrs_out.index_frequency_max_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_index_frequency_max_diffuse_48kHz );
                hrtf_table_ptrs_out.inv_diffuse_weight = (float *) ( &CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz );
                hrtf_table_ptrs_out.coeff_re = (float *) ( &CRendBin_FOA_HRIR_coeff_re_48kHz );
                hrtf_table_ptrs_out.coeff_im = (float *) ( &CRendBin_FOA_HRIR_coeff_im_48kHz );
                hrtf_table_ptrs_out.coeff_diffuse_re = (float *) ( &CRendBin_FOA_HRIR_coeff_diffuse_re_48kHz );
                hrtf_table_ptrs_out.coeff_diffuse_im = (float *) ( &CRendBin_FOA_HRIR_coeff_diffuse_im_48kHz );

                hrtf_table_dims_out.max_num_iterations = CRendBin_FOA_HRIR_max_num_iterations_48kHz;
                result = 0;
            }
            else if ( frequency == 32000 )
            {
                hrtf_table_ptrs_out.latency_s = &CRendBin_FOA_HRIR_latency_s;
                hrtf_table_ptrs_out.num_iterations = (uint16_t *) ( &CRendBin_FOA_HRIR_num_iterations_32kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max = (uint16_t *) ( &CRendBin_FOA_HRIR_pIndex_frequency_max_32kHz );
                hrtf_table_ptrs_out.num_iterations_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_num_iterations_diffuse_32kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_32kHz );
                hrtf_table_ptrs_out.index_frequency_max_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_index_frequency_max_diffuse_32kHz );
                hrtf_table_ptrs_out.inv_diffuse_weight = (float *) ( &CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz );
                hrtf_table_ptrs_out.coeff_re = (float *) ( &CRendBin_FOA_HRIR_coeff_re_32kHz );
                hrtf_table_ptrs_out.coeff_im = (float *) ( &CRendBin_FOA_HRIR_coeff_im_32kHz );
                hrtf_table_ptrs_out.coeff_diffuse_re = (float *) ( &CRendBin_FOA_HRIR_coeff_diffuse_re_32kHz );
                hrtf_table_ptrs_out.coeff_diffuse_im = (float *) ( &CRendBin_FOA_HRIR_coeff_diffuse_im_32kHz );

                hrtf_table_dims_out.max_num_iterations = CRendBin_FOA_HRIR_max_num_iterations_32kHz;
            }
            else if ( frequency == 16000 )
            {
                hrtf_table_ptrs_out.latency_s = &CRendBin_FOA_HRIR_latency_s;
                hrtf_table_ptrs_out.num_iterations = (uint16_t *) ( &CRendBin_FOA_HRIR_num_iterations_16kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max = (uint16_t *) ( &CRendBin_FOA_HRIR_pIndex_frequency_max_16kHz );
                hrtf_table_ptrs_out.num_iterations_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_num_iterations_diffuse_16kHz );
                hrtf_table_ptrs_out.pIndex_frequency_max_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_16kHz );
                hrtf_table_ptrs_out.index_frequency_max_diffuse = (uint16_t *) ( &CRendBin_FOA_HRIR_index_frequency_max_diffuse_16kHz );
                hrtf_table_ptrs_out.inv_diffuse_weight = (float *) ( &CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz );
                hrtf_table_ptrs_out.coeff_re = (float *) ( &CRendBin_FOA_HRIR_coeff_re_16kHz );
                hrtf_table_ptrs_out.coeff_im = (float *) ( &CRendBin_FOA_HRIR_coeff_im_16kHz );
                hrtf_table_ptrs_out.coeff_diffuse_re = (float *) ( &CRendBin_FOA_HRIR_coeff_diffuse_re_16kHz );
                hrtf_table_ptrs_out.coeff_diffuse_im = (float *) ( &CRendBin_FOA_HRIR_coeff_diffuse_im_16kHz );

                hrtf_table_dims_out.max_num_iterations = CRendBin_FOA_HRIR_max_num_iterations_16kHz;
                result = 0;
            }
        }
#endif
    }
    else if ( rend_type == RENDERER_BINAURAL_MIXER_CONV_ROOM )
    {
@@ -1382,7 +1634,11 @@ int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CON
            hrtf_table_dims_out.max_num_iterations_diffuse = 0;
            hrtf_table_dims_out.max_total_num_fsamp_per_iteration_diff = 0;*/
        }
#ifdef UPDATE_SBA_FILTER_WITH_SUPPORT_FOA_HOA2_FILTERS
        else if ( ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) || ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) || ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) )
#else
        else if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA )
#endif
        {
            result = 0;
        }
@@ -1458,6 +1714,7 @@ int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CON
        }
    }


    // Copy the results
    if ( ( result == 0 ) && ( hrtf_table_ptrs != NULL ) )
    {