Commit d7c86071 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

[fix] remove powf() out of loops for FastConv table loading

parent a0e0f483
Loading
Loading
Loading
Loading
Loading
+54 −24
Original line number Diff line number Diff line
@@ -809,6 +809,7 @@ static ivas_error ivas_binaural_hrtf_open(
{
#ifdef FIX_1123_FASTCONV_16BIT_ROM
    int16_t i, j, k;
    float scaleFactor;
#else
    int16_t i, j;
#endif
@@ -873,6 +874,27 @@ static ivas_error ivas_binaural_hrtf_open(
        }

#ifdef FIX_1123_FASTCONV_16BIT_ROM
        if ( renderer_type == RENDERER_BINAURAL_FASTCONV )
        {
            scaleFactor = powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
        }
        else if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM )
        {
            scaleFactor = powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
        }
        if ( input_config == IVAS_AUDIO_CONFIG_HOA3 )
        {
            scaleFactor = powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA3_factorQ );
        }
        else if ( input_config == IVAS_AUDIO_CONFIG_HOA2 )
        {
            scaleFactor = powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA2_factorQ );
        }
        else if ( input_config == IVAS_AUDIO_CONFIG_FOA )
        {
            scaleFactor = powf( 2.f, -1.f * (float) FASTCONV_HRIR_FOA_factorQ );
        }

        HrtfFastConv->allocate_init_flag = 0; /* TODO: consider getting rid of this flag entirely? */
#else
        HrtfFastConv->allocate_init_flag = 1;
@@ -891,10 +913,10 @@ static ivas_error ivas_binaural_hrtf_open(
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    for ( k = 0; k < HrtfFastConv->ntaps_hrir; k++ )
                    {
                        HrtfFastConv->leftHRIRReal[i][j][k] = (float) leftHRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                        HrtfFastConv->leftHRIRImag[i][j][k] = (float) leftHRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                        HrtfFastConv->rightHRIRReal[i][j][k] = (float) rightHRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                        HrtfFastConv->rightHRIRImag[i][j][k] = (float) rightHRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_factorQ );
                        HrtfFastConv->leftHRIRReal[i][j][k] = (float) leftHRIRReal[i][j][k] * scaleFactor;
                        HrtfFastConv->leftHRIRImag[i][j][k] = (float) leftHRIRImag[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRReal[i][j][k] = (float) rightHRIRReal[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRImag[i][j][k] = (float) rightHRIRImag[i][j][k] * scaleFactor;
                    }
#else
                    HrtfFastConv->leftHRIRReal[i][j] = leftHRIRReal[i][j];
@@ -911,10 +933,10 @@ static ivas_error ivas_binaural_hrtf_open(
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    for ( k = 0; k < HrtfFastConv->ntaps_brir; k++ )
                    {
                        HrtfFastConv->leftBRIRReal[i][j][k] = (float) leftBRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                        HrtfFastConv->leftBRIRImag[i][j][k] = (float) leftBRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                        HrtfFastConv->rightBRIRReal[i][j][k] = (float) rightBRIRReal[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                        HrtfFastConv->rightBRIRImag[i][j][k] = (float) rightBRIRImag[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
                        HrtfFastConv->leftBRIRReal[i][j][k] = (float) leftBRIRReal[i][j][k] * scaleFactor;
                        HrtfFastConv->leftBRIRImag[i][j][k] = (float) leftBRIRImag[i][j][k] * scaleFactor;
                        HrtfFastConv->rightBRIRReal[i][j][k] = (float) rightBRIRReal[i][j][k] * scaleFactor;
                        HrtfFastConv->rightBRIRImag[i][j][k] = (float) rightBRIRImag[i][j][k] * scaleFactor;
                    }
#else
                    HrtfFastConv->leftBRIRReal[i][j] = leftBRIRReal[i][j];
@@ -931,10 +953,10 @@ static ivas_error ivas_binaural_hrtf_open(
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    for ( k = 0; k < HrtfFastConv->ntaps_hrir_hoa3; k++ )
                    {
                        HrtfFastConv->leftHRIRReal_HOA3[i][j][k] = (float) leftHRIRReal_HOA3[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA3_factorQ );
                        HrtfFastConv->leftHRIRImag_HOA3[i][j][k] = (float) leftHRIRImag_HOA3[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA3_factorQ );
                        HrtfFastConv->rightHRIRReal_HOA3[i][j][k] = (float) rightHRIRReal_HOA3[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA3_factorQ );
                        HrtfFastConv->rightHRIRImag_HOA3[i][j][k] = (float) rightHRIRImag_HOA3[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA3_factorQ );
                        HrtfFastConv->leftHRIRReal_HOA3[i][j][k] = (float) leftHRIRReal_HOA3[i][j][k] * scaleFactor;
                        HrtfFastConv->leftHRIRImag_HOA3[i][j][k] = (float) leftHRIRImag_HOA3[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRReal_HOA3[i][j][k] = (float) rightHRIRReal_HOA3[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRImag_HOA3[i][j][k] = (float) rightHRIRImag_HOA3[i][j][k] * scaleFactor;
                    }
#else
                    HrtfFastConv->leftHRIRReal_HOA3[i][j] = leftHRIRReal_HOA3[i][j];
@@ -944,6 +966,9 @@ static ivas_error ivas_binaural_hrtf_open(
#endif
                }
            }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            else
#endif
                if ( input_config == IVAS_AUDIO_CONFIG_HOA2 )
            {
                for ( j = 0; j < HOA2_CHANNELS; j++ )
@@ -951,10 +976,10 @@ static ivas_error ivas_binaural_hrtf_open(
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    for ( k = 0; k < HrtfFastConv->ntaps_hrir_hoa2; k++ )
                    {
                        HrtfFastConv->leftHRIRReal_HOA2[i][j][k] = (float) leftHRIRReal_HOA2[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA2_factorQ );
                        HrtfFastConv->leftHRIRImag_HOA2[i][j][k] = (float) leftHRIRImag_HOA2[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA2_factorQ );
                        HrtfFastConv->rightHRIRReal_HOA2[i][j][k] = (float) rightHRIRReal_HOA2[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA2_factorQ );
                        HrtfFastConv->rightHRIRImag_HOA2[i][j][k] = (float) rightHRIRImag_HOA2[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA2_factorQ );
                        HrtfFastConv->leftHRIRReal_HOA2[i][j][k] = (float) leftHRIRReal_HOA2[i][j][k] * scaleFactor;
                        HrtfFastConv->leftHRIRImag_HOA2[i][j][k] = (float) leftHRIRImag_HOA2[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRReal_HOA2[i][j][k] = (float) rightHRIRReal_HOA2[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRImag_HOA2[i][j][k] = (float) rightHRIRImag_HOA2[i][j][k] * scaleFactor;
                    }
#else
                    HrtfFastConv->leftHRIRReal_HOA2[i][j] = leftHRIRReal_HOA2[i][j];
@@ -964,6 +989,9 @@ static ivas_error ivas_binaural_hrtf_open(
#endif
                }
            }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            else
#endif
                if ( input_config == IVAS_AUDIO_CONFIG_FOA )
            {
                for ( j = 0; j < FOA_CHANNELS; j++ )
@@ -971,10 +999,10 @@ static ivas_error ivas_binaural_hrtf_open(
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    for ( k = 0; k < HrtfFastConv->ntaps_hrir_foa; k++ )
                    {
                        HrtfFastConv->leftHRIRReal_FOA[i][j][k] = (float) leftHRIRReal_FOA[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_FOA_factorQ );
                        HrtfFastConv->leftHRIRImag_FOA[i][j][k] = (float) leftHRIRImag_FOA[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_FOA_factorQ );
                        HrtfFastConv->rightHRIRReal_FOA[i][j][k] = (float) rightHRIRReal_FOA[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_FOA_factorQ );
                        HrtfFastConv->rightHRIRImag_FOA[i][j][k] = (float) rightHRIRImag_FOA[i][j][k] * powf( 2.f, -1.f * (float) FASTCONV_HRIR_FOA_factorQ );
                        HrtfFastConv->leftHRIRReal_FOA[i][j][k] = (float) leftHRIRReal_FOA[i][j][k] * scaleFactor;
                        HrtfFastConv->leftHRIRImag_FOA[i][j][k] = (float) leftHRIRImag_FOA[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRReal_FOA[i][j][k] = (float) rightHRIRReal_FOA[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRImag_FOA[i][j][k] = (float) rightHRIRImag_FOA[i][j][k] * scaleFactor;
                    }
#else
                    HrtfFastConv->leftHRIRReal_FOA[i][j] = leftHRIRReal_FOA[i][j];
@@ -986,13 +1014,15 @@ static ivas_error ivas_binaural_hrtf_open(
            }
        }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) fastconvReverberationTimes_factorQ );
        for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ )
        {
            HrtfFastConv->fastconvReverberationTimes[i] = (float) fastconvReverberationTimes[i] * powf( 2.f, -1.f * (float) fastconvReverberationTimes_factorQ );
            HrtfFastConv->fastconvReverberationTimes[i] = (float) fastconvReverberationTimes[i] * scaleFactor;
        }
        scaleFactor = powf( 2.f, -1.f * (float) fastconvReverberationEneCorrections_factorQ );
        for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ )
        {
            HrtfFastConv->fastconvReverberationEneCorrections[i] = (float) fastconvReverberationEneCorrections[i] * powf( 2.f, -1.f * (float) fastconvReverberationEneCorrections_factorQ );
            HrtfFastConv->fastconvReverberationEneCorrections[i] = (float) fastconvReverberationEneCorrections[i] * scaleFactor;
        }
#else
        mvr2r( fastconvReverberationTimes, HrtfFastConv->fastconvReverberationTimes, CLDFB_NO_CHANNELS_MAX );
+53 −22
Original line number Diff line number Diff line
@@ -1850,7 +1850,9 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
    char *hrtf_data_rptr;
    ivas_error error;
    Word16 factorQ;
#ifndef FIX_1123_FASTCONV_16BIT_ROM
#ifdef FIX_1123_FASTCONV_16BIT_ROM
    float scaleFactor;
#else
    int32_t *ptW32;
#endif
    int16_t *ptW16;
@@ -1923,6 +1925,9 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
        /* HRIR Q factor*/
        factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) factorQ );
#endif

        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
@@ -1937,7 +1942,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftHRIRReal[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftHRIRReal[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftHRIRReal[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -1962,7 +1967,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftHRIRImag[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftHRIRImag[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftHRIRImag[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -1987,7 +1992,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightHRIRReal[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightHRIRReal[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightHRIRReal[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2012,7 +2017,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightHRIRImag[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightHRIRImag[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightHRIRImag[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2067,6 +2072,9 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
        /* HRIR Q factor*/
        factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) factorQ );
#endif

        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
@@ -2081,7 +2089,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftHRIRReal_HOA3[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftHRIRReal_HOA3[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftHRIRReal_HOA3[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2106,7 +2114,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftHRIRImag_HOA3[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftHRIRImag_HOA3[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftHRIRImag_HOA3[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2131,7 +2139,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightHRIRReal_HOA3[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightHRIRReal_HOA3[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightHRIRReal_HOA3[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2156,7 +2164,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightHRIRImag_HOA3[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightHRIRImag_HOA3[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightHRIRImag_HOA3[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2211,6 +2219,9 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
        /* HRIR Q factor*/
        factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) factorQ );
#endif

        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
@@ -2225,7 +2236,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftHRIRReal_HOA2[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftHRIRReal_HOA2[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftHRIRReal_HOA2[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2250,7 +2261,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftHRIRImag_HOA2[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftHRIRImag_HOA2[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftHRIRImag_HOA2[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2275,7 +2286,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightHRIRReal_HOA2[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightHRIRReal_HOA2[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightHRIRReal_HOA2[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2300,7 +2311,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightHRIRImag_HOA2[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightHRIRImag_HOA2[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightHRIRImag_HOA2[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2356,6 +2367,9 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
        /* HRIR Q factor*/
        factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) factorQ );
#endif

        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
@@ -2370,7 +2384,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftHRIRReal_FOA[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftHRIRReal_FOA[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftHRIRReal_FOA[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2395,7 +2409,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftHRIRImag_FOA[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftHRIRImag_FOA[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftHRIRImag_FOA[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2420,7 +2434,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightHRIRReal_FOA[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightHRIRReal_FOA[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightHRIRReal_FOA[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2445,7 +2459,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightHRIRImag_FOA[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightHRIRImag_FOA[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightHRIRImag_FOA[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2501,6 +2515,9 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
        /* BRIR Q factor*/
        factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) factorQ );
#endif

        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
@@ -2515,7 +2532,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftBRIRReal[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftBRIRReal[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftBRIRReal[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2540,7 +2557,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->leftBRIRImag[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->leftBRIRImag[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->leftBRIRImag[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2565,7 +2582,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightBRIRReal[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightBRIRReal[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightBRIRReal[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2590,7 +2607,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
#endif
                {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
                    ( *hHRTF )->rightBRIRImag[i][j][k] = (float) ptW16[k] * powf( 2.f, -1.f * (float) factorQ );
                    ( *hHRTF )->rightBRIRImag[i][j][k] = (float) ptW16[k] * scaleFactor;
#else
                    ( *hHRTF )->rightBRIRImag[i][j][k] = (float) ptW32[k] * powf( 2.f, -1.f * (float) factorQ );
#endif
@@ -2613,22 +2630,36 @@ static ivas_error create_fastconv_HRTF_from_rawdata_fx(
        /* fastconvReverberationTimes Q factor*/
        factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) factorQ );
#endif

        ptW16 = (int16_t *) hrtf_data_rptr;
        for ( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ )
        {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            ( *hHRTF )->fastconvReverberationTimes[j] = (float) ptW16[j] * powf( 2.f, -1.f * factorQ );
#else
            ( *hHRTF )->fastconvReverberationTimes[j] = (float) ptW16[j] * scaleFactor;
#endif
        }
        hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( int16_t );

        /* fastconvReverberationEneCorrections Q factor */
        factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
        hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) factorQ );
#endif

        ptW16 = (int16_t *) hrtf_data_rptr;
        for ( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ )
        {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            ( *hHRTF )->fastconvReverberationEneCorrections[j] = (float) ptW16[j] * powf( 2.f, -1.f * factorQ );
#else
            ( *hHRTF )->fastconvReverberationEneCorrections[j] = (float) ptW16[j] * scaleFactor;
#endif 
        }
        hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( int16_t );
    }