Commit f6cf1155 authored by multrus's avatar multrus
Browse files

Merge branch 'basop-2411-harmonize-tnsanalysis-_fx-detecttnsfilt-_fx' into 'main'

resolves issue: 2411 Harmonizing functions TNSAnalysis*_fx, DetectTnsFilt*_fx

See merge request !2810
parents 027f716b 250d1f3b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@
#define HARM_LEV_DURBIN                                 /* VA: basop issue 2423: harmonize levinson-Durbin algorithm */
#define HARMONIZE_TBE2                                  /* VA: basop issue 2399: Remove duplicated code: TBE, step 2 */
#define HARM_FD_BWE                                     /* VA: harmonize core-coder FD BWE function duplications */
#define FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT    /* FhG: basop issue 2411: harmonize TNSAnalysis*_fx(), DetectTnsFilt*_fx()*/        

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

+17 −2
Original line number Diff line number Diff line
@@ -135,6 +135,8 @@ void HBAutocorrelation_fx(
    }
}

#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

void TNSAnalysis_fx(
    TCX_CONFIG_HANDLE hTcxCfg, /* i  : configuration of TCX               */
    Word16 L_frame,            /* input: frame length */
@@ -217,8 +219,12 @@ void TNSAnalysis_fx(
        }
    }
}

#endif // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
void TNSAnalysis_ivas_fx(
#else
void TNSAnalysis_fx(
#endif                         // FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
    TCX_CONFIG_HANDLE hTcxCfg, /* i  : configuration of TCX               */
    Word16 L_frame,            /* i  : frame length */
    Word16 L_spec,             /* i  : length of the spectrum                                                                  */
@@ -274,8 +280,14 @@ void TNSAnalysis_ivas_fx(
        }

        move16();
#ifdef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
        *pfUseTns = (Word8) DetectTnsFilt_fx( hTcxCfg->pCurrentTnsConfig, spectrum, pTnsData, hTranDet, (Word8) NE_16( transform_type, TCX_20 ), ltp_gain, predictionGain );

#else
        *pfUseTns = (Word8) DetectTnsFilt_ivas_fx( hTcxCfg->pCurrentTnsConfig, spectrum, pTnsData, hTranDet, (Word8) NE_16( transform_type, TCX_20 ), ltp_gain, predictionGain );

#endif // FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

        /* If TNS should be used then get the residual after applying it inplace in spectrum */
        IF( *pfUseTns != 0 )
        {
@@ -3847,8 +3859,11 @@ void coder_tcx_fx(
    {

        SetTnsConfig( hTcxCfg, sub( L_frame_glob, st->L_frame ) == 0, st->last_core == 0 );

#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
        TNSAnalysis_fx( hTcxCfg, L_frame, L_spec, TCX_20, st->last_core == 0, spectrum, hTcxEnc->tnsData, hTcxEnc->fUseTns, &st->hIGFEnc->tns_predictionGain );
#else
        TNSAnalysis_fx( hTcxCfg, L_frame, L_spec, TCX_20, st->last_core == 0, spectrum, st->hTranDet, -32768, hTcxEnc->tnsData, hTcxEnc->fUseTns, &st->hIGFEnc->tns_predictionGain );
#endif // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
    }
    ELSE
    {
+17 −0
Original line number Diff line number Diff line
@@ -406,10 +406,19 @@ void core_signal_analysis_high_bitrate_fx(
        {
            test();
            test();
#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

            TNSAnalysis_fx( st->hTcxCfg, L_frameTCX,
                            st->hTcxCfg->tcx_coded_lines,
                            transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ),
                            spectrum[frameno], &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL );
#else
            TNSAnalysis_fx( st->hTcxCfg, L_frameTCX,
                            st->hTcxCfg->tcx_coded_lines,
                            transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ),
                            spectrum[frameno], st->hTranDet, -32768, &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL );
#endif // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

            {
                EncodeTnsData_fx( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno],
                                  param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno );
@@ -1198,11 +1207,19 @@ void core_signal_analysis_high_bitrate_ivas_fx(
            test();
            IF( ( frameno == 0 ) && ( st->last_core == ACELP_CORE ) )
            {
#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
                TNSAnalysis_ivas_fx( st->hTcxCfg, L_frameTCX, st->hTcxCfg->tcx_coded_lines, transform_type[frameno], 1, hTcxEnc->spectrum_fx[frameno], st->hTranDet, -32768, &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL );
#else
                TNSAnalysis_fx( st->hTcxCfg, L_frameTCX, st->hTcxCfg->tcx_coded_lines, transform_type[frameno], 1, hTcxEnc->spectrum_fx[frameno], st->hTranDet, -32768, &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL );
#endif // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
            }
            ELSE
            {
#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
                TNSAnalysis_ivas_fx( st->hTcxCfg, L_frameTCX, st->hTcxCfg->tcx_coded_lines, transform_type[frameno], 0, hTcxEnc->spectrum_fx[frameno], st->hTranDet, -32768, &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL );
#else
                TNSAnalysis_fx( st->hTcxCfg, L_frameTCX, st->hTcxCfg->tcx_coded_lines, transform_type[frameno], 0, hTcxEnc->spectrum_fx[frameno], st->hTranDet, -32768, &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL );
#endif // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
            }

            IF( st->hTcxCfg->fIsTNSAllowed )
+14 −0
Original line number Diff line number Diff line
@@ -1546,14 +1546,20 @@ void CalculateTnsFilt_fx(
    const Word16 pSpectrum_e,
    STnsData *pTnsData /* o  : TNS data struct                   */
);
#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

Word16 DetectTnsFilt_fx(
    STnsConfig const *pTnsConfig,
    Word32 const pSpectrum[],
    STnsData *pTnsData,
    Word16 *predictionGain );
#endif // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
#ifdef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

Word16 DetectTnsFilt_fx(
#else
Word16 DetectTnsFilt_ivas_fx(
#endif                            // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
    STnsConfig const *pTnsConfig, /* i  : TNS Configuration struct          */
    Word32 const pSpectrum[],     /* i  : MDCT spectrum                Q=Qx */
    STnsData *pTnsData,           /* o  : TNS data struct                   */
@@ -1563,6 +1569,7 @@ Word16 DetectTnsFilt_ivas_fx(
    Word16 *predictionGain        /* o  : TNS prediction gain        Q=7    */
);


Word16 EncodeTnsData_fx(
    STnsConfig const *pTnsConfig,
    STnsData const *pTnsData,
@@ -2731,6 +2738,7 @@ void IGFEncResetTCX10BitCounter_fx(
    const IGF_ENC_INSTANCE_HANDLE hInstance /**< in:     | instance handle of IGF Encoder */
);

#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
void TNSAnalysis_fx(
    TCX_CONFIG_HANDLE hTcxCfg, /* i  : configuration of TCX               */
    Word16 L_frame,            /* i  : frame length */
@@ -2742,7 +2750,13 @@ void TNSAnalysis_fx(
    Word8 *pfUseTns,    /* o  : Flag indicating if TNS is used */
    Word16 *predictionGain );

#endif // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
void TNSAnalysis_ivas_fx(
#else
void TNSAnalysis_fx(
#endif                         // !FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
    TCX_CONFIG_HANDLE hTcxCfg, /* i  : configuration of TCX               */
    Word16 L_frame,            /* i  : frame length */
    Word16 L_spec,             /* i  : length of the spectrum                                                                  */
+22 −11
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ typedef Word32 ( *TLinearPredictionFilter )( Word16 order, Word16 const parCoeff
/********************************/

#define MAX_SUBDIVISIONS 3
#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

Word16 DetectTnsFilt_fx( STnsConfig const *pTnsConfig,
                         Word32 const pSpectrum[],
@@ -301,7 +302,7 @@ Word16 DetectTnsFilt_fx( STnsConfig const *pTnsConfig,

    return ( pTnsData->nFilters > 0 );
}

#endif // FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
void CalculateTnsFilt_fx(
    STnsConfig const *pTnsConfig, /* i  : TNS Configuration struct          */
    const Word32 pSpectrum[],     /* i  : MDCT spectrum                     */
@@ -409,7 +410,13 @@ void CalculateTnsFilt_fx(
    return;
}

Word16 DetectTnsFilt_ivas_fx( STnsConfig const *pTnsConfig, /* i  : TNS Configuration struct          */
#ifdef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
Word16 DetectTnsFilt_fx(
#else
Word16 DetectTnsFilt_ivas_fx(
#endif // FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT

    STnsConfig const *pTnsConfig, /* i  : TNS Configuration struct          */
    Word32 const pSpectrum[],     /* i  : MDCT spectrum                Q=Qx */
    STnsData *pTnsData,           /* o  : TNS data struct                   */
    TRAN_DET_HANDLE hTranDet,     /* i  : transient detection handle        */
@@ -630,7 +637,11 @@ Word16 DetectTnsFilt_ivas_fx( STnsConfig const *pTnsConfig, /* i : TNS Configur
    }

    /* We check the filter's decisions in the opposite direction */
#ifndef FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
    FOR( iFilter = ( pTnsConfig->nMaxFilters - 1 ); iFilter >= 0; iFilter-- )
#else
    FOR( iFilter = sub( pTnsConfig->nMaxFilters, 1 ); iFilter >= 0; iFilter-- )
#endif // FIX_2411_Harmonize_TNSANALYSIS_DETECTTNSFILT
    {
        STnsFilter *pFilter;
        struct TnsParameters const *pTnsParameters;