Commit c937da35 authored by Jan Kiene's avatar Jan Kiene
Browse files

Merge branch 'main' into ci/add-ltv-sanitizer-test

parents bb28e707 bce48f52
Loading
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -57,7 +57,6 @@
/*#define MEM_COUNT_DETAILS*/                   /* Output detailed memory analysis for the worst-case frame (writes to the file "mem_analysis.csv") */

#ifdef DEBUGGING

/*#define DEBUG_MODE_INFO*/                         /* output most important parameters to the subdirectory "res/" */
#ifdef DEBUG_MODE_INFO
/*#define DEBUG_MODE_ACELP*/                    /* output most important ACELP core parameters to the subdirectory "res/" */
@@ -72,6 +71,7 @@
/*#define DEBUG_MODE_INFO_PLC */                /* define to output PLC related parameters */
/*#define DEBUG_MODE_INFO_ALLRAD*/              /* define to output generated HOA decoding mtx */
/*#define DEBUG_MODE_LFE */                     /* define to output LFE relevant parameters */
/*#define DEBUG_MODE_ORIENTATION */             /* define to output combined orientation relevant parameters */               
#endif

#ifdef DEBUG_MODE_MDCT
@@ -161,7 +161,7 @@
#define FIX_1003_PARAMISM_BINAURAL_RECONFIG_USAN        /* FhG: fix for #1003: fix USAN caused by ParamISM reconfig                    */
#define FIX_1001_ARI_HM_OVERFLOW                        /* FhG: fix for undef behaviour in in the harmonic TCX model arithmetic coder */
#define FIX_901_PARAMMC_DEAD_CODE                       /* FhG: issue 901: remove dead ParamMC code             */

#define FIX_1008_EXTORIENT_TARGET_INTERPOLATION          /* FhG: issue #1008, external orientation init was wrong for 5ms */


/* #################### End BE switches ################################## */
@@ -179,6 +179,7 @@
#define NONBE_FIX_984_OMASA_EXT_OUTPUT                        /* Nokia: issue #984: complete the OMASA EXT output implementation */
#define NONBE_FIX_1000_G1_G2_SWB_TBE                          /* VA: issue 1000: avoid div by zero due to g1 + g2 being zero in SWB TBE */
#define NONBE_FIX_999_JBM_MCT_FLUSH                           /* FhG: issue #999: fix wrong flushing for MCT at a JBM rate switch */
#define NONBE_FIX_991_PARAMBIN_BINARY_HRTF                    /* Nokia: issue #991: fix using of binary file HRTF in ParamBin */

/* ##################### End NON-BE switches ########################### */

+4 −0
Original line number Diff line number Diff line
@@ -872,7 +872,11 @@ ivas_error ivas_dirac_dec_config(
            if ( st_ivas->hDiracDecBin == NULL )
#endif
            {
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
                if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, &( st_ivas->hHrtfParambin ) ) ) != IVAS_ERR_OK )
#else
                if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK )
#endif
                {
                    return error;
                }
+4 −0
Original line number Diff line number Diff line
@@ -2006,7 +2006,11 @@ ivas_error ivas_init_decoder(
            }
        }

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
        if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, &( st_ivas->hHrtfParambin ) ) ) != IVAS_ERR_OK )
#else
        if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK )
#endif
        {
            return error;
        }
+8 −0
Original line number Diff line number Diff line
@@ -267,7 +267,11 @@ static ivas_error ivas_ism_bitrate_switching_dec(
                return error;
            }

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, &( st_ivas->hHrtfParambin ) ) ) != IVAS_ERR_OK )
#else
            if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK )
#endif
            {
                return error;
            }
@@ -298,7 +302,11 @@ static ivas_error ivas_ism_bitrate_switching_dec(
                return error;
            }

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, &( st_ivas->hHrtfParambin ) ) ) != IVAS_ERR_OK )
#else
            if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK )
#endif
            {
                return error;
            }
+100 −5
Original line number Diff line number Diff line
@@ -119,9 +119,17 @@ static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( COM

static void formulate2x2MixingMatrix( float Ein1, float Ein2, float CinRe, float CinIm, float Eout1, float Eout2, float CoutRe, float CoutIm, float Q[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Mre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Mim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], const float regularizationFactor );

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
static void hrtfShGetHrtf( const int16_t bin, const int16_t aziDeg, const int16_t eleDeg, float *lRealp, float *lImagp, float *rRealp, float *rImagp, PARAMBIN_HRTF_GAIN_CACHE *gainCache, const int16_t useCachedValue, HRTFS_PARAMBIN_HANDLE hHrtfParambin );
#else
static void hrtfShGetHrtf( const int16_t bin, const int16_t aziDeg, const int16_t eleDeg, float *lRealp, float *lImagp, float *rRealp, float *rImagp, PARAMBIN_HRTF_GAIN_CACHE *gainCache, const int16_t useCachedValue );
#endif

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
static void getDirectPartGains( const int16_t bin, int16_t aziDeg, int16_t eleDeg, float *lRealp, float *lImagp, float *rRealp, float *rImagp, const uint8_t stereoMode, float Rmat[3][3], PARAMBIN_HRTF_GAIN_CACHE *gainCache, const int16_t isHeadtracked, HRTFS_PARAMBIN_HANDLE hHrtfParambin );
#else
static void getDirectPartGains( const int16_t bin, int16_t aziDeg, int16_t eleDeg, float *lRealp, float *lImagp, float *rRealp, float *rImagp, const uint8_t stereoMode, float Rmat[3][3], PARAMBIN_HRTF_GAIN_CACHE *gainCache, const int16_t isHeadtracked );
#endif

static void matrixMul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] );

@@ -141,7 +149,11 @@ static void ivas_masa_ext_rend_parambin_internal( MASA_EXT_REND_HANDLE hMasaExtR

ivas_error ivas_dirac_dec_init_binaural_data(
    Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure                  */
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
    HRTFS_PARAMBIN_HANDLE *phHrtfParambin /* i  : HRTF structure for rendering            */
#else
    HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i  : HRTF structure for rendering            */
#endif
)
{
    DIRAC_DEC_BIN_HANDLE hDiracDecBin;
@@ -173,6 +185,9 @@ ivas_error ivas_dirac_dec_init_binaural_data(
            hDiracDecBin->hReverb = NULL;
            hDiracDecBin->h_freq_domain_decorr_ap_params = NULL;
            hDiracDecBin->h_freq_domain_decorr_ap_state = NULL;
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            hDiracDecBin->phHrtfParambin = NULL;
#endif
        }

        output_Fs = st_ivas->hDecoderConfig->output_Fs;
@@ -224,7 +239,11 @@ ivas_error ivas_dirac_dec_init_binaural_data(
        }
        else if ( renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) /* Indication of binaural rendering with room effect */
        {
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            mvr2r( ( *phHrtfParambin )->parametricEarlyPartEneCorrection, hDiracDecBin->earlyPartEneCorrection, nBins );
#else
        mvr2r( hHrtfParambin->parametricEarlyPartEneCorrection, hDiracDecBin->earlyPartEneCorrection, nBins );
#endif

            /* reconfiguration needed when Reverb. parameters are changed -> close and open the handle again */
            if ( hDiracDecBin->hReverb != NULL && ( ( hDiracDecBin->hReverb->numBins != nBins ) ||
@@ -239,7 +258,11 @@ ivas_error ivas_dirac_dec_init_binaural_data(
        if ( hDiracDecBin->hReverb == NULL )
#endif
            {
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
                if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, st_ivas->hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( st_ivas->hRenderConfig->roomAcoustics ), output_Fs, ( *phHrtfParambin )->parametricReverberationTimes, ( *phHrtfParambin )->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK )
#else
            if ( ( error = ivas_binaural_reverb_init( &hDiracDecBin->hReverb, st_ivas->hHrtfStatistics, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( st_ivas->hRenderConfig->roomAcoustics ), output_Fs, st_ivas->hHrtfParambin->parametricReverberationTimes, st_ivas->hHrtfParambin->parametricReverberationEneCorrections ) ) != IVAS_ERR_OK )
#endif
                {
                    return error;
                }
@@ -303,6 +326,10 @@ ivas_error ivas_dirac_dec_init_binaural_data(

        hDiracDecBin->reqularizationFactor = configure_reqularization_factor( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate );

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
        hDiracDecBin->phHrtfParambin = phHrtfParambin;
#endif

#ifdef SPLIT_REND_WITH_HEAD_ROT
        st_ivas->hDiracDecBin[pos_idx] = hDiracDecBin;
    }
@@ -1289,7 +1316,11 @@ static void ivas_dirac_dec_binaural_formulate_target_covariance_matrices(
                spreadCoh = max( spreadCoh, altSpreadCoh );
            }

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex], isHeadtracked, *hDiracDecBin->phHrtfParambin );
#else
            getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex], isHeadtracked );
#endif

            if ( hDiracDecBin->renderStereoOutputInsteadOfBinaural )
            {
@@ -1332,7 +1363,11 @@ static void ivas_dirac_dec_binaural_formulate_target_covariance_matrices(
                rImagp *= centerMul;

                /* Apply the gain for the left source of the three coherent sources */
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
                getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 1], isHeadtracked, *hDiracDecBin->phHrtfParambin );
#else
                getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 1], isHeadtracked );
#endif

                hrtfEneSides = ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp );
                lRealp += sidesMul * lRealpTmp;
@@ -1342,7 +1377,11 @@ static void ivas_dirac_dec_binaural_formulate_target_covariance_matrices(

                /* Apply the gain for the right source of the three coherent sources.
                 * -30 degrees to 330 wrapping due to internal functions. */
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
                getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 2], isHeadtracked, *hDiracDecBin->phHrtfParambin );
#else
                getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 2], isHeadtracked );
#endif
                hrtfEneSides += ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp );
                lRealp += sidesMul * lRealpTmp;
                lImagp += sidesMul * lImagpTmp;
@@ -1731,7 +1770,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric
                spreadCoh = max( spreadCoh, altSpreadCoh );
            }

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex], isHeadtracked, *hDiracDecBin->phHrtfParambin );
#else
            getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex], isHeadtracked );
#endif

            if ( hDiracDecBin->renderStereoOutputInsteadOfBinaural )
            {
@@ -1774,7 +1817,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric
                rImagp *= centerMul;

                /* Apply the gain for the left source of the three coherent sources */
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
                getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 1], isHeadtracked, *hDiracDecBin->phHrtfParambin );
#else
                getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 1], isHeadtracked );
#endif

                hrtfEneSides = ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp );
                lRealp += sidesMul * lRealpTmp;
@@ -1784,7 +1831,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric

                /* Apply the gain for the right source of the three coherent sources.
                 * -30 degrees to 330 wrapping due to internal functions. */
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
                getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 2], isHeadtracked, *hDiracDecBin->phHrtfParambin );
#else
                getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 2], isHeadtracked );
#endif
                hrtfEneSides += ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp );
                lRealp += sidesMul * lRealpTmp;
                lImagp += sidesMul * lImagpTmp;
@@ -2168,7 +2219,11 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices(
                    hDiracDecBin->processMtxImPrev[chA][chB + 2][bin] = hDiracDecBin->processMtxIm[chA][chB + 2][bin];
                }

#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
                getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[chB], isHeadtracked, *hDiracDecBin->phHrtfParambin );
#else
                getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[chB], isHeadtracked );
#endif

                hDiracDecBin->processMtxRe[0][chB + 2][bin] = lRealp * gainFactor;
                hDiracDecBin->processMtxIm[0][chB + 2][bin] = lImagp * gainFactor;
@@ -2943,7 +2998,13 @@ static void getDirectPartGains(
    const uint8_t renderStereoOutputInsteadOfBinaural,
    float Rmat[3][3],
    PARAMBIN_HRTF_GAIN_CACHE *gainCache,
    const int16_t isHeadtracked )
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
    const int16_t isHeadtracked,
    HRTFS_PARAMBIN_HANDLE hHrtfParambin
#else
    const int16_t isHeadtracked
#endif
)
{
    float aziRad, eleRad;
    float y, mappedX, aziRadMapped, A, A2, A3;
@@ -2988,7 +3049,11 @@ static void getDirectPartGains(
    {
        if ( aziDeg == gainCache->azi && eleDeg == gainCache->ele )
        {
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            hrtfShGetHrtf( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, TRUE, hHrtfParambin );
#else
            hrtfShGetHrtf( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, TRUE );
#endif
        }
        else
        {
@@ -2998,7 +3063,11 @@ static void getDirectPartGains(
            {
                rotateAziEle( (float) aziDeg, (float) eleDeg, &aziDeg, &eleDeg, Rmat, 0 );
            }
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            hrtfShGetHrtf( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, FALSE, hHrtfParambin );
#else
            hrtfShGetHrtf( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, FALSE );
#endif
        }
    }

@@ -3015,9 +3084,21 @@ static void hrtfShGetHrtf(
    float *rRealp,
    float *rImagp,
    PARAMBIN_HRTF_GAIN_CACHE *gainCache,
    const int16_t useCachedValue )
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
    const int16_t useCachedValue,
    HRTFS_PARAMBIN_HANDLE hHrtfParambin
#else
    const int16_t useCachedValue
#endif
)
{
    int16_t k;
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
    float( *hrtfShCoeffsReInt )[16][60];
    float( *hrtfShCoeffsImInt )[16][60];
    hrtfShCoeffsReInt = hHrtfParambin->hrtfShCoeffsRe;
    hrtfShCoeffsImInt = hHrtfParambin->hrtfShCoeffsIm;
#endif

    *lRealp = 0.0f;
    *lImagp = 0.0f;
@@ -3031,10 +3112,17 @@ static void hrtfShGetHrtf(

        for ( k = 0; k < HRTF_SH_CHANNELS; k++ )
        {
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            *lRealp += hrtfShCoeffsReInt[0][k][bin] * shVec[k];
            *lImagp += hrtfShCoeffsImInt[0][k][bin] * shVec[k];
            *rRealp += hrtfShCoeffsReInt[1][k][bin] * shVec[k];
            *rImagp += hrtfShCoeffsImInt[1][k][bin] * shVec[k];
#else
            *lRealp += hrtfShCoeffsRe[0][k][bin] * shVec[k];
            *lImagp += hrtfShCoeffsIm[0][k][bin] * shVec[k];
            *rRealp += hrtfShCoeffsRe[1][k][bin] * shVec[k];
            *rImagp += hrtfShCoeffsIm[1][k][bin] * shVec[k];
#endif
        }
    }
    else
@@ -3048,10 +3136,17 @@ static void hrtfShGetHrtf(

        for ( k = 0; k < HRTF_SH_CHANNELS; k++ )
        {
#ifdef NONBE_FIX_991_PARAMBIN_BINARY_HRTF
            *lRealp += hrtfShCoeffsReInt[0][k][bin] * shVec[k];
            *lImagp += hrtfShCoeffsImInt[0][k][bin] * shVec[k];
            *rRealp += hrtfShCoeffsReInt[1][k][bin] * shVec[k];
            *rImagp += hrtfShCoeffsImInt[1][k][bin] * shVec[k];
#else
            *lRealp += hrtfShCoeffsRe[0][k][bin] * shVec[k];
            *lImagp += hrtfShCoeffsIm[0][k][bin] * shVec[k];
            *rRealp += hrtfShCoeffsRe[1][k][bin] * shVec[k];
            *rImagp += hrtfShCoeffsIm[1][k][bin] * shVec[k];
#endif

            gainCache->shVec[k] = shVec[k];
        }
Loading