Commit ddae206f authored by multrus's avatar multrus
Browse files

Merge branch 'basop-2607-harmonize-getfilterparameters' into 'main'

Resolve "Harmonize GetFilterParameters"

Closes #2607

See merge request !3050
parents 457f9707 dc5c63fd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -97,8 +97,8 @@
#define HARMONIZE_2595_reconfig_decoder_LPD             /* FhG: Harmonize reconfig_decoder_LPD with its ivas derivate */
#define HARMONIZE_2596_SetModeIndex                     /* FhG: Harmonize SetModeIndex with its ivas derivate */
#define HARMONIZE_2597_ShapeSpectrum                    /* FhG: Harmonize ShapeSpectrum with its ivas derivate */

#define HARMONIZE_2567_init_functions                   /* FhG: harmonize derivates for evs/ivas regarding functions init_acelp*(),init_tcx_cfg*(), init_tcx*(), init_coder_ace_plus*(), init_core_sig_ana*() and init_modes*() */
#define HARMONIZE_2607_GetFilterParameters              /* FhG: Harmonize GetFilterParameters with its ivas derivate */

/* #################### End BE switches ################################## */

+53 −15
Original line number Diff line number Diff line
@@ -23,9 +23,13 @@
 * @param maxOrder Maximum filter order/number of coefficients.
 * @param pTnsFilter Pointer to the output filter.
 */
#ifndef HARMONIZE_2607_GetFilterParameters
static void GetFilterParameters( Word32 rxx[], Word16 maxOrder, STnsFilter *pTnsFilter );

static void GetFilterParameters_ivas( Word32 rxx[], Word16 maxOrder, STnsFilter *pTnsFilter );
#else
static void GetFilterParameters( Word32 rxx[], Word16 maxOrder, STnsFilter *pTnsFilter, Word16 element_mode );
#endif

/** Quantization for reflection coefficients.
 *
@@ -150,7 +154,11 @@ void CalculateTnsFilt_fx(
            pFilter->spectrumLength = spectrumLength;
            move16();
            /* Limit the maximum order to spectrum length/4 */
#ifdef HARMONIZE_2607_GetFilterParameters
            GetFilterParameters( rxx, s_min( pTnsConfig->maxOrder, shr( pFilter->spectrumLength, 2 ) ), pFilter, 1 /*signal non-EVS*/ );
#else
            GetFilterParameters_ivas( rxx, s_min( pTnsConfig->maxOrder, shr( pFilter->spectrumLength, 2 ) ), pFilter );
#endif
        }
    }

@@ -368,7 +376,11 @@ Word16 DetectTnsFilt_fx(
            pFilter->spectrumLength = spectrumLength;
            move16();
            /* Limit the maximum order to spectrum length/4 */
#ifdef HARMONIZE_2607_GetFilterParameters
            GetFilterParameters( rxx, s_min( pTnsConfig->maxOrder, shr( pFilter->spectrumLength, 2 ) ), pFilter, EVS_MONO );
#else
            GetFilterParameters( rxx, s_min( pTnsConfig->maxOrder, shr( pFilter->spectrumLength, 2 ) ), pFilter );
#endif
        }
    }

@@ -527,10 +539,17 @@ Word16 WriteTnsData_fx( STnsConfig const *pTnsConfig, Word16 const *stream, Word
/********************************/
/*      Private functions       */
/********************************/
#ifdef HARMONIZE_2607_GetFilterParameters
static void GetFilterParameters( Word32 rxx[], Word16 maxOrder, STnsFilter *pTnsFilter, Word16 element_mode )
#else
static void GetFilterParameters_ivas( Word32 rxx[], Word16 maxOrder, STnsFilter *pTnsFilter )
#endif
{
    Word16 i;
    Word16 parCoeff[TNS_MAX_FILTER_ORDER + 1];
#ifdef HARMONIZE_2607_GetFilterParameters
    Word32 epsP[TNS_MAX_FILTER_ORDER + 1];
#endif
    Word32 rxx_0;
    Word32 L_tmp;
#if TNS_COEF_RES == 5
@@ -542,6 +561,18 @@ static void GetFilterParameters_ivas( Word32 rxx[], Word16 maxOrder, STnsFilter
#endif
    Word16 *indexes = pTnsFilter->coefIndex;

#ifdef HARMONIZE_2607_GetFilterParameters
    IF( EQ_16( element_mode, EVS_MONO ) )
    {
        /* compute TNS filter in lattice (ParCor) form with LeRoux-Gueguen algorithm */
        L_tmp = E_LPC_schur( rxx, parCoeff, epsP, maxOrder );
        BASOP_SATURATE_WARNING_OFF_EVS /* Allow saturation, this value is compared against a threshold. */
            pTnsFilter->predictionGain = divide3232( L_shr( epsP[0], PRED_GAIN_E ), L_tmp );
        BASOP_SATURATE_WARNING_ON_EVS
    }
    ELSE
    {
#endif
        rxx_0 = rxx[0];
        move32();
        /* compute TNS filter in lattice (ParCor) form with LeRoux-Gueguen algorithm */
@@ -557,6 +588,9 @@ static void GetFilterParameters_ivas( Word32 rxx[], Word16 maxOrder, STnsFilter
        pTnsFilter->predictionGain = shl_sat( temp, sub( temp_e, PRED_GAIN_E ) ); // Q7
        move16();
        BASOP_SATURATE_WARNING_ON_EVS
#ifdef HARMONIZE_2607_GetFilterParameters
    }
#endif
    /* non-linear quantization of TNS lattice coefficients with given resolution */
    Parcor2Index( parCoeff, indexes, maxOrder );

@@ -566,6 +600,7 @@ static void GetFilterParameters_ivas( Word32 rxx[], Word16 maxOrder, STnsFilter
    test();
    WHILE( ( i >= 0 ) && ( indexes[i] == 0 ) )
    {
        test();
        i = sub( i, 1 );
    }

@@ -590,6 +625,8 @@ static void GetFilterParameters_ivas( Word32 rxx[], Word16 maxOrder, STnsFilter
    /* assert(maxOrder == 8);
     pTnsFilter->avgSqrCoef = shr(pTnsFilter->avgSqrCoef, 3); */
}

#ifndef HARMONIZE_2607_GetFilterParameters
static void GetFilterParameters( Word32 rxx[], Word16 maxOrder, STnsFilter *pTnsFilter )
{
    Word16 i;
@@ -643,6 +680,7 @@ static void GetFilterParameters( Word32 rxx[], Word16 maxOrder, STnsFilter *pTns
    /* assert(maxOrder == 8);
     pTnsFilter->avgSqrCoef = shr(pTnsFilter->avgSqrCoef, 3); */
}
#endif /*HARMONIZE_2607_GetFilterParameters*/

static void Parcor2Index( const Word16 parCoeff[] /*Q15*/, Word16 index[], Word16 order )
{