Commit 113a18f1 authored by vaclav's avatar vaclav
Browse files

Merge branch 'lfe-plc-precision' of...

Merge branch 'lfe-plc-precision' of https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec into lfe-plc-precision
parents 15b86120 0aac6c12
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1530,6 +1530,9 @@ typedef enum
#define MAX_ANGULAR_STEP_INV                    ( 1.0f / MAX_ANGULAR_STEP )
#define MAX_INTERPOLATION_STEPS                 12

#define RESAMPLE_FACTOR_16_48                   ( 16.0f / 48.0f )
#define RESAMPLE_FACTOR_32_48                   ( 32.0f / 48.0f )

/* ----- Enums - TD Renderer ----- */

typedef enum
+12 −2
Original line number Diff line number Diff line
@@ -959,8 +959,11 @@ void isp2isf(
 *
 * Convert from LPC to reflection coeff
 *-------------------------------------------------------------------*/

#ifndef NONE_BE_FIX_816_LFE_PLC_FLOAT
void a2rc(
#else
int a2rc(
#endif
    const float *a,        /* i  : LPC coefficients            */
    float *refl,           /* o  : Reflection co-efficients    */
    const int16_t lpcorder /* i  : LPC order                   */
@@ -985,8 +988,11 @@ void a2rc(
            {
                refl[j] = 0.f;
            }

#ifndef NONE_BE_FIX_816_LFE_PLC_FLOAT
            return;
#else
            return 0;
#endif
        }

        refl[m] = -km;
@@ -1006,7 +1012,11 @@ void a2rc(
        }
    }

#ifndef NONE_BE_FIX_816_LFE_PLC_FLOAT
    return;
#else
    return 0;
#endif
}


+1 −0
Original line number Diff line number Diff line
@@ -170,6 +170,7 @@
#define FIX_1123_TDREN_16BIT_ROM
#define FIX_1123_FASTCONV_16BIT_ROM                     /* FhG: issue 1123: update FastConv ROM tables and scripts to generate 16 bit tables instead of float */
#define FIX_1123_PARAMBIN_16BIT_ROM                     /* FhG,Nok: issue 1123: update ParamBin ROM tables and scripts to generate 16 bit tables instead of float */
#define FIX_RETURN                                      /* VA: fix location of function returns */
#endif
#define FIX_BASOP_812_NAN_COHSNR                        /* FhG: BASOP issue 812: fix nan values in sparse frames for cohSNR value in ITD estimation*/

+4 −0
Original line number Diff line number Diff line
@@ -2998,7 +2998,11 @@ void a2isf(
    const float *old_isf,
    const int16_t lpcOrder );

#ifndef NONE_BE_FIX_816_LFE_PLC_FLOAT
void a2rc(
#else
int a2rc(
#endif
    const float *a,        /* i  : LPC coefficients                                */
    float *refl,           /* o  : Reflection co-efficients                        */
    const int16_t lpcorder /* i  : LPC order                                       */
+59 −44
Original line number Diff line number Diff line
@@ -720,7 +720,7 @@ ivas_error ivas_allocate_binaural_hrtf(
    }

#ifdef FIX_1123_FASTCONV_16BIT_ROM
    if ( ( ( renderer_type == RENDERER_BINAURAL_FASTCONV ) && ( bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) ) || ( ( renderer_type == RENDERER_BINAURAL_FASTCONV ) && ( input_config != IVAS_AUDIO_CONFIG_INVALID ) ) )
    if ( ( renderer_type == RENDERER_BINAURAL_FASTCONV && bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) || ( renderer_type == RENDERER_BINAURAL_FASTCONV && input_config != IVAS_AUDIO_CONFIG_INVALID ) )
#else
    if ( renderer_type == RENDERER_BINAURAL_FASTCONV || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
#endif
@@ -766,7 +766,7 @@ ivas_error ivas_allocate_binaural_hrtf(
    }

#ifdef FIX_1123_FASTCONV_16BIT_ROM
    if ( ( ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && ( bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) ) || ( ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && ( input_config != IVAS_AUDIO_CONFIG_INVALID ) ) )
    if ( ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) || ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_config != IVAS_AUDIO_CONFIG_INVALID ) )
#else
    if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
#endif
@@ -816,7 +816,7 @@ ivas_error ivas_allocate_binaural_hrtf(


/*-------------------------------------------------------------------------*
 * ivas_binaural_HRTF_open()
 * ivas_binaural_hrtf_open()
 *
 *
 *-------------------------------------------------------------------------*/
@@ -829,13 +829,17 @@ static ivas_error ivas_binaural_hrtf_open(
{
#ifdef FIX_1123_FASTCONV_16BIT_ROM
    int16_t i, j, k;
    float scaleFactor = 1.f;
    float scaleFactorSBA = 1.f;
    float scaleFactor, scaleFactorSBA;
#else
    int16_t i, j;
#endif
    ivas_error error;

#ifdef FIX_1123_FASTCONV_16BIT_ROM
    scaleFactor = 1.f;
    scaleFactorSBA = 1.f;
#endif

    if ( hHrtfFastConv != NULL && *hHrtfFastConv != NULL )
    {
        /* Tables already loaded from file */
@@ -856,7 +860,7 @@ static ivas_error ivas_binaural_hrtf_open(
        if ( input_config == IVAS_AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV )
        {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            HrtfFastConv->FASTCONV_HRIR_latency_s = (float) FASTCONV_HRIR_latency_s * powf( 2.f, -1.f * (float) FASTCONV_FOA_latency_s_factorQ );
            HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s * powf( 2.f, -1.f * FASTCONV_FOA_latency_s_factorQ );
#else
            HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s;
#endif
@@ -864,7 +868,7 @@ static ivas_error ivas_binaural_hrtf_open(
        if ( input_config == IVAS_AUDIO_CONFIG_HOA2 )
        {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            HrtfFastConv->FASTCONV_HOA2_latency_s = (float) FASTCONV_HOA2_latency_s * powf( 2.f, -1.f * (float) FASTCONV_HOA2_latency_s_factorQ );
            HrtfFastConv->FASTCONV_HOA2_latency_s = FASTCONV_HOA2_latency_s * powf( 2.f, -1.f * FASTCONV_HOA2_latency_s_factorQ );
#else
            HrtfFastConv->FASTCONV_HOA2_latency_s = FASTCONV_HOA2_latency_s;
#endif
@@ -872,7 +876,7 @@ static ivas_error ivas_binaural_hrtf_open(
        if ( input_config == IVAS_AUDIO_CONFIG_HOA3 )
        {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            HrtfFastConv->FASTCONV_HOA3_latency_s = (float) FASTCONV_HOA3_latency_s * powf( 2.f, -1.f * (float) FASTCONV_HOA3_latency_s_factorQ );
            HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s * powf( 2.f, -1.f * FASTCONV_HOA3_latency_s_factorQ );
#else
            HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s;
#endif
@@ -880,7 +884,7 @@ static ivas_error ivas_binaural_hrtf_open(
        if ( input_config == IVAS_AUDIO_CONFIG_FOA )
        {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            HrtfFastConv->FASTCONV_FOA_latency_s = (float) FASTCONV_FOA_latency_s * powf( 2.f, -1.f * (float) FASTCONV_HRIR_latency_s_factorQ );
            HrtfFastConv->FASTCONV_FOA_latency_s = FASTCONV_FOA_latency_s * powf( 2.f, -1.f * FASTCONV_HRIR_latency_s_factorQ );
#else
            HrtfFastConv->FASTCONV_FOA_latency_s = FASTCONV_FOA_latency_s;
#endif
@@ -888,7 +892,7 @@ static ivas_error ivas_binaural_hrtf_open(
        if ( input_config == IVAS_AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM )
        {
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            HrtfFastConv->FASTCONV_BRIR_latency_s = (float) FASTCONV_BRIR_latency_s * powf( 2.f, -1.f * (float) FASTCONV_BRIR_latency_s_factorQ );
            HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s * powf( 2.f, -1.f * FASTCONV_BRIR_latency_s_factorQ );
#else
            HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s;
#endif
@@ -897,23 +901,23 @@ 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 );
            scaleFactor = powf( 2.f, -1.f * FASTCONV_HRIR_factorQ );
        }
        else if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM )
        {
            scaleFactor = powf( 2.f, -1.f * (float) FASTCONV_BRIR_factorQ );
            scaleFactor = powf( 2.f, -1.f * FASTCONV_BRIR_factorQ );
        }
        if ( input_config == IVAS_AUDIO_CONFIG_HOA3 )
        {
            scaleFactorSBA = powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA3_factorQ );
            scaleFactorSBA = powf( 2.f, -1.f * FASTCONV_HRIR_HOA3_factorQ );
        }
        else if ( input_config == IVAS_AUDIO_CONFIG_HOA2 )
        {
            scaleFactorSBA = powf( 2.f, -1.f * (float) FASTCONV_HRIR_HOA2_factorQ );
            scaleFactorSBA = powf( 2.f, -1.f * FASTCONV_HRIR_HOA2_factorQ );
        }
        else if ( input_config == IVAS_AUDIO_CONFIG_FOA )
        {
            scaleFactorSBA = powf( 2.f, -1.f * (float) FASTCONV_HRIR_FOA_factorQ );
            scaleFactorSBA = powf( 2.f, -1.f * FASTCONV_HRIR_FOA_factorQ );
        }
#else
        HrtfFastConv->allocate_init_flag = 1;
@@ -927,6 +931,7 @@ static ivas_error ivas_binaural_hrtf_open(
        {
            return error;
        }

        for ( i = 0; i < BINAURAL_CONVBANDS; i++ )
        {
            if ( renderer_type == RENDERER_BINAURAL_FASTCONV )
@@ -936,10 +941,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] * 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;
                        HrtfFastConv->leftHRIRReal[i][j][k] = leftHRIRReal[i][j][k] * scaleFactor;
                        HrtfFastConv->leftHRIRImag[i][j][k] = leftHRIRImag[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRReal[i][j][k] = rightHRIRReal[i][j][k] * scaleFactor;
                        HrtfFastConv->rightHRIRImag[i][j][k] = rightHRIRImag[i][j][k] * scaleFactor;
                    }
#else
                    HrtfFastConv->leftHRIRReal[i][j] = leftHRIRReal[i][j];
@@ -956,10 +961,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] * 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;
                        HrtfFastConv->leftBRIRReal[i][j][k] = leftBRIRReal[i][j][k] * scaleFactor;
                        HrtfFastConv->leftBRIRImag[i][j][k] = leftBRIRImag[i][j][k] * scaleFactor;
                        HrtfFastConv->rightBRIRReal[i][j][k] = rightBRIRReal[i][j][k] * scaleFactor;
                        HrtfFastConv->rightBRIRImag[i][j][k] = rightBRIRImag[i][j][k] * scaleFactor;
                    }
#else
                    HrtfFastConv->leftBRIRReal[i][j] = leftBRIRReal[i][j];
@@ -969,6 +974,7 @@ static ivas_error ivas_binaural_hrtf_open(
#endif
                }
            }

            if ( input_config == IVAS_AUDIO_CONFIG_HOA3 )
            {
                for ( j = 0; j < HOA3_CHANNELS; j++ )
@@ -976,10 +982,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] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRImag_HOA3[i][j][k] = (float) leftHRIRImag_HOA3[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRReal_HOA3[i][j][k] = (float) rightHRIRReal_HOA3[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRImag_HOA3[i][j][k] = (float) rightHRIRImag_HOA3[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRReal_HOA3[i][j][k] = leftHRIRReal_HOA3[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRImag_HOA3[i][j][k] = leftHRIRImag_HOA3[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRReal_HOA3[i][j][k] = rightHRIRReal_HOA3[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRImag_HOA3[i][j][k] = rightHRIRImag_HOA3[i][j][k] * scaleFactorSBA;
                    }
#else
                    HrtfFastConv->leftHRIRReal_HOA3[i][j] = leftHRIRReal_HOA3[i][j];
@@ -990,19 +996,20 @@ static ivas_error ivas_binaural_hrtf_open(
                }
            }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            else
#endif
            else if ( input_config == IVAS_AUDIO_CONFIG_HOA2 )
#else
            if ( input_config == IVAS_AUDIO_CONFIG_HOA2 )
#endif
            {
                for ( j = 0; j < HOA2_CHANNELS; j++ )
                {
#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] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRImag_HOA2[i][j][k] = (float) leftHRIRImag_HOA2[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRReal_HOA2[i][j][k] = (float) rightHRIRReal_HOA2[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRImag_HOA2[i][j][k] = (float) rightHRIRImag_HOA2[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRReal_HOA2[i][j][k] = leftHRIRReal_HOA2[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRImag_HOA2[i][j][k] = leftHRIRImag_HOA2[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRReal_HOA2[i][j][k] = rightHRIRReal_HOA2[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRImag_HOA2[i][j][k] = rightHRIRImag_HOA2[i][j][k] * scaleFactorSBA;
                    }
#else
                    HrtfFastConv->leftHRIRReal_HOA2[i][j] = leftHRIRReal_HOA2[i][j];
@@ -1013,19 +1020,20 @@ static ivas_error ivas_binaural_hrtf_open(
                }
            }
#ifdef FIX_1123_FASTCONV_16BIT_ROM
            else
#endif
            else if ( input_config == IVAS_AUDIO_CONFIG_FOA )
#else
            if ( input_config == IVAS_AUDIO_CONFIG_FOA )
#endif
            {
                for ( j = 0; j < FOA_CHANNELS; j++ )
                {
#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] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRImag_FOA[i][j][k] = (float) leftHRIRImag_FOA[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRReal_FOA[i][j][k] = (float) rightHRIRReal_FOA[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRImag_FOA[i][j][k] = (float) rightHRIRImag_FOA[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRReal_FOA[i][j][k] = leftHRIRReal_FOA[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->leftHRIRImag_FOA[i][j][k] = leftHRIRImag_FOA[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRReal_FOA[i][j][k] = rightHRIRReal_FOA[i][j][k] * scaleFactorSBA;
                        HrtfFastConv->rightHRIRImag_FOA[i][j][k] = rightHRIRImag_FOA[i][j][k] * scaleFactorSBA;
                    }
#else
                    HrtfFastConv->leftHRIRReal_FOA[i][j] = leftHRIRReal_FOA[i][j];
@@ -1036,16 +1044,18 @@ static ivas_error ivas_binaural_hrtf_open(
                }
            }
        }

#ifdef FIX_1123_FASTCONV_16BIT_ROM
        scaleFactor = powf( 2.f, -1.f * (float) fastconvReverberationTimes_factorQ );
        scaleFactor = powf( 2.f, -1.f * fastconvReverberationTimes_factorQ );
        for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ )
        {
            HrtfFastConv->fastconvReverberationTimes[i] = (float) fastconvReverberationTimes[i] * scaleFactor;
            HrtfFastConv->fastconvReverberationTimes[i] = fastconvReverberationTimes[i] * scaleFactor;
        }
        scaleFactor = powf( 2.f, -1.f * (float) fastconvReverberationEneCorrections_factorQ );

        scaleFactor = powf( 2.f, -1.f * fastconvReverberationEneCorrections_factorQ );
        for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ )
        {
            HrtfFastConv->fastconvReverberationEneCorrections[i] = (float) fastconvReverberationEneCorrections[i] * scaleFactor;
            HrtfFastConv->fastconvReverberationEneCorrections[i] = fastconvReverberationEneCorrections[i] * scaleFactor;
        }
#else
        mvr2r( fastconvReverberationTimes, HrtfFastConv->fastconvReverberationTimes, CLDFB_NO_CHANNELS_MAX );
@@ -1053,9 +1063,14 @@ static ivas_error ivas_binaural_hrtf_open(
#endif

        *hHrtfFastConv = HrtfFastConv;
    }

#ifdef FIX_RETURN
        return IVAS_ERR_OK;
#endif
    }
#ifndef FIX_RETURN
    return IVAS_ERR_OK;
#endif
}


Loading