Commit 5b65f28e authored by Arthur Tritthart's avatar Arthur Tritthart
Browse files

removed all provious DEBUG prints, extended tonal component detection with...

removed all provious DEBUG prints, extended tonal component detection with 32-bit F0 and thresholdModification[] for NON-EVS (EVS kept compatible), fixed phase range to -2PI..+2PI with 4 quadrants (see FIX_ISSUE_1966 in tonalMDCTconcealment_fx.c)
parent edbd9692
Loading
Loading
Loading
Loading

lib_com/options.h

100644 → 100755
+2 −0
Original line number Diff line number Diff line
@@ -140,6 +140,8 @@
#define FIX_FMSW_DEC                                    /* float issue 1542: fix JBM issue in format switching */
#define FIX_FMSW_DEC_2                                  /* float issue 1575: fix crash for format switching when bitsream starts with EVS */

#define FIX_ISSUE_1966                                  /* FhG: Basop issue 1966: shift phase range to [-2PI..+2PI[, handle 4 quadrants */
                                                        /* FhG: Basop issue 1966: use 32-bit variables for F0 and thresholdModification */
/* ##################### End NON-BE switches ########################### */

/* ################## End MAINTENANCE switches ######################### */
+260 −544

File changed.

Preview size limit exceeded, changes collapsed.

+0 −25
Original line number Diff line number Diff line
@@ -10,13 +10,6 @@
#include <assert.h>
#include "ivas_prot_fx.h"


//#define DEBUG_ISSUE_1966

#ifdef DEBUG_ISSUE_1966
extern int32_t frame;
#endif

/*  static void setnoiseLevelMemory_fx()
 *
 *      Helper function - updates buffer for minimumStatistics_fx function
@@ -381,9 +374,6 @@ Word16 GetPLCModeDecision_fx(
    TCX_DEC_HANDLE hTcxDec;

    hTcxDec = st->hTcxDec;
#ifdef DEBUG_ISSUE_1966
    printf( "Calling GetPLCModeDecision in frame=%d\n", frame );
#endif

    IF( EQ_16( st->flagGuidedAcelp, 1 ) )
    {
@@ -419,9 +409,6 @@ Word16 GetPLCModeDecision_fx(
        }
        st->tonal_mdct_plc_active = 0;
        move16();
#ifdef DEBUG_ISSUE_1966
        //printf( "-->tonal_mdct_plc_active=%d  F1\n", st->tonal_mdct_plc_active );
#endif
    }
    ELSE
    {
@@ -439,9 +426,6 @@ Word16 GetPLCModeDecision_fx(
            test();
            test();
            test();
#ifdef DEBUG_ISSUE_1966
            printf( "-->tonal_mdct_plc_active=%d  F2\n", st->tonal_mdct_plc_active );
#endif
            IF( !( st->rf_flag && st->use_partial_copy && ( EQ_16( st->rf_frame_type, RF_TCXTD1 ) || EQ_16( st->rf_frame_type, RF_TCXTD2 ) ) ) )
            {
                test();
@@ -474,18 +458,12 @@ Word16 GetPLCModeDecision_fx(
                    test();
                    test();
                    test();
#ifdef DEBUG_ISSUE_1966
                    //printf( "-->pitch=%f  numIndices=%2d\n", (double) pitch / (double) ( 1 << 16 ), numIndices );
#endif
                    IF( ( GT_16( numIndices, 10 ) ) || ( ( GT_16( numIndices, 5 ) ) && ( LT_32( L_abs( L_sub( hTcxDec->tcxltp_third_last_pitch, hTcxDec->tcxltp_second_last_pitch ) ), 32768l /*0.5f Q16*/ ) ) ) || ( ( numIndices > 0 ) && ( ( LE_16( st->last_good, UNVOICED_TRANSITION ) ) || ( LE_16( hTcxDec->tcxltp_last_gain_unmodified, 13107 /*0.4f Q15*/ ) ) ) && ( LT_32( L_abs( L_sub( hTcxDec->tcxltp_third_last_pitch, hTcxDec->tcxltp_second_last_pitch ) ), 32768l /*0.5f Q16*/ ) ) ) )
                    {
                        core = TCX_20_CORE;
                        move16();
                        st->tonal_mdct_plc_active = 1;
                        move16();
#ifdef DEBUG_ISSUE_1966
                        printf( "-->tonal_mdct_plc_active=%d  F21\n", st->tonal_mdct_plc_active );
#endif
                    }
                    ELSE IF( LE_16( st->last_good, UNVOICED_TRANSITION ) || LE_16( hTcxDec->tcxltp_last_gain_unmodified, 13107 /*0.4f Q15*/ ) )
                    {
@@ -505,9 +483,6 @@ Word16 GetPLCModeDecision_fx(
            }
        }
    }
#ifdef DEBUG_ISSUE_1966
    printf( "X->tonal_mdct_plc_active=%d  F3\n", st->tonal_mdct_plc_active );
#endif

    return core; /*Q0*/
}
+0 −37
Original line number Diff line number Diff line
@@ -40,11 +40,6 @@
#include "basop_proto_func.h"
#include "ivas_prot_fx.h"

//#define DEBUG_ISSUE_1966

#ifdef DEBUG_ISSUE_1966
extern int32_t frame;
#endif
/*-----------------------------------------------------------------*
 * Function mdct_read_IGF_bits()
 *
@@ -1520,10 +1515,6 @@ void ivas_mdct_core_tns_ns_fx(
    Word16 exp, length;
#endif

#ifdef DEBUG_ISSUE_1966
    printf( "Calling ivas_mdct_core_tns_ns in frame=%d\n", frame );
#endif

    /* Initializations */
    sts = hCPE->hCoreCoder;
    bfi = sts[0]->bfi;
@@ -1537,9 +1528,6 @@ void ivas_mdct_core_tns_ns_fx(
    FOR( ch = 0; ch < CPE_CHANNELS; ch++ )
    {
        st = sts[ch];
#ifdef DEBUG_ISSUE_1966
        printf( "->ch=%d tonal_mdct_plc_active=%d  F1\n", ch, st->tonal_mdct_plc_active );
#endif
#ifdef FIX_BASOP_2555_FRAMELEN_CALC
        IF( EQ_16( st->core, TCX_20_CORE ) )
        {
@@ -1601,9 +1589,6 @@ void ivas_mdct_core_tns_ns_fx(
            IF( st->hTonalMDCTConc != NULL )
            {
                TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, 0, bfi, 0 );
#ifdef DEBUG_ISSUE_1966
                printf( "->ch=%d tonal_mdct_plc_active=%d  F2\n", ch, st->tonal_mdct_plc_active );
#endif
            }

            /* nothing to do for missing LFE */
@@ -1615,10 +1600,6 @@ void ivas_mdct_core_tns_ns_fx(
            init_tcx_info_fx( st, L_frame_global[ch], L_frameTCX_glob[ch], k, bfi, &tcx_offset[ch],
                              &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] );

#ifdef DEBUG_ISSUE_1966
            printf( "->ch=%d tonal_mdct_plc_active=%d  F3 k=%d\n", ch, st->tonal_mdct_plc_active, k );
#endif

            Word16 q_x;
            q_x = sub( 31, x_e );
            IF( bfi == 0 )
@@ -1640,9 +1621,6 @@ void ivas_mdct_core_tns_ns_fx(
                        move16();
                    }
                    TonalMDCTConceal_SaveFreqSignal_ivas_fx( st->hTonalMDCTConc, x_fx[ch][k], x_e, L_frameTCX[ch], L_frame[ch], &scf_fx[0], scf_e, 0, get_igf_startline_fx( st, L_frame[ch], L_frameTCX[ch] ) );
#ifdef DEBUG_ISSUE_1966
                    printf( "->ch=%d tonal_mdct_plc_active=%d  F4 k=%d\n", ch, st->tonal_mdct_plc_active, k );
#endif
                }
            }
            ELSE
@@ -1701,9 +1679,6 @@ void ivas_mdct_core_tns_ns_fx(
            }
            Scale_sig32( &x_fx[ch][k][0], length, -5 );
            decoder_tcx_tns_fx( st, L_frame_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x_fx[ch][k], fUseTns[ch][k], &tnsData[ch][k], bfi, k, 1, &length );
#ifdef DEBUG_ISSUE_1966
            printf( "->ch=%d tonal_mdct_plc_active=%d  F5 k=%d\n", ch, st->tonal_mdct_plc_active, k );
#endif
            norm_x = getScaleFactor32( &x_fx[ch][k][0], length );
            Scale_sig32( &x_fx[ch][k][0], length, norm_x );
            q_x = add( q_x, norm_x );
@@ -1762,9 +1737,6 @@ void ivas_mdct_core_tns_ns_fx(
            }
            Scale_sig32( &x_fx[ch][k][0], length, -5 );
            decoder_tcx_tns_fx( st, L_frame_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], &x_fx[ch][k][0], fUseTns[ch][k], &tnsData[ch][k], bfi, k, 0, &length );
#ifdef DEBUG_ISSUE_1966
            printf( "->ch=%d tonal_mdct_plc_active=%d  F6 k=%d\n", ch, st->tonal_mdct_plc_active, k );
#endif
            Scale_sig32( &x_fx[ch][k][0], length, sub( sub( 31, q_x ), x_e ) );
        }

@@ -1777,9 +1749,6 @@ void ivas_mdct_core_tns_ns_fx(
            }

            TonalMDCTConceal_Apply_ivas_fx( st->hTonalMDCTConc, x_fx[ch][0], x_e, st->hTcxCfg->psychParamsCurrent );
#ifdef DEBUG_ISSUE_1966
            printf( "->ch=%d tonal_mdct_plc_active=%d  F7\n", ch, st->tonal_mdct_plc_active );
#endif
        }

        test();
@@ -1789,16 +1758,10 @@ void ivas_mdct_core_tns_ns_fx(
            IF( st->hTcxDec->tcxltp_last_gain_unmodified > 0 )
            {
                TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, L_frameTCX[ch], st->old_fpitch, bfi, (Word8) s_and( bfi, st->tonal_mdct_plc_active ) );
#ifdef DEBUG_ISSUE_1966
                printf( "->ch=%d tonal_mdct_plc_active=%d  bfi=%d  F8-A\n", ch, st->tonal_mdct_plc_active, bfi );
#endif
            }
            ELSE
            {
                TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, L_frameTCX[ch], 0, bfi, (Word8) s_and( bfi, st->tonal_mdct_plc_active ) );
#ifdef DEBUG_ISSUE_1966
                printf( "->ch=%d tonal_mdct_plc_active=%d  bfi=%d  F8-B\n", ch, st->tonal_mdct_plc_active, bfi );
#endif
            }
        }
    }
+16 −86
Original line number Diff line number Diff line
@@ -13,12 +13,6 @@
#include "stat_com.h"
#include "ivas_prot_fx.h"

//#define DEBUG_ISSUE_1966

#ifdef DEBUG_ISSUE_1966
extern int32_t frame;
#endif

#define CROSSFADE_THRESHOLD ( 32762 ) // close to 1.0f in Q15 such that (x == 1.0f) is true

/************************************************************************************
@@ -523,10 +517,6 @@ void TonalMDCTConceal_UpdateState_fx(
    const Word8 tonalConcealmentActive )
{
    Word8 newBlockIsValid;
#ifdef DEBUG_ISSUE_1966
    printf( "Calling TonalMDCTConceal_UpdateState in frame=%d: ns=%d pl=%f bB=%d tCA=%d\n",
            frame, nNewSamples, (double) pitchLag / (double) ( 1 << 16 ), badBlock, tonalConcealmentActive );
#endif

    assert( !( !badBlock && tonalConcealmentActive ) );

@@ -616,11 +606,6 @@ static void FindPhaseDifferences(
    Word16 divi, s, j;
    Word32 a, Q, L_tmp, m, n;

#ifdef DEBUG_ISSUE_1966
    int a_way;
    printf( "Calling FindPhaseDifferences: numIndexes=%d  frame=%d\n", hTonalMDCTConc->pTCI->numIndexes, frame );
#endif

    s = SS;
    move16();
    j = J;
@@ -642,13 +627,7 @@ static void FindPhaseDifferences(
        {
            phaseDiff[i] = 0; /*(float)tan(0.0f*EVS_PI/bandwidth);*/
            move16();
#ifndef FIX_ISSUE_1966 
            if ( s_and( k, 1 ) != 0 )
            {
                phaseDiff[i] = -12868 /*-EVS_PI 3Q12*/;
                move16();
            }
#else
#ifdef FIX_ISSUE_1966
            if ( EQ_16( s_and( k, 3 ), 1 ) )
            {
                phaseDiff[i] = 12868 /* 1*EVS_PI 3Q12*/;
@@ -664,10 +643,13 @@ static void FindPhaseDifferences(
                phaseDiff[i] = -12868 /*-1*EVS_PI 3Q12*/;
                move16();
            }
#endif
#ifdef DEBUG_ISSUE_1966
            fractional = 0; // only for debug
            a_way = 1;

#else
            if ( s_and( k, 1 ) != 0 )
            {
                phaseDiff[i] = -12868 /*-EVS_PI 3Q12*/;
                move16();
            }
#endif
        }
        ELSE
@@ -676,13 +658,7 @@ static void FindPhaseDifferences(
            {
                phaseDiff[i] = 12868 /*EVS_PI 3Q12*/; /*(float)tan(2.0f*PI/bandwidth);*/
                move16();
#ifndef FIX_ISSUE_1966
                if ( s_and( k, 1 ) != 0 )
                {
                    phaseDiff[i] = 0 /*0 Q13*/; /*2Q13*/
                    move16();
                }
#else
#ifdef FIX_ISSUE_1966
                if ( EQ_16( s_and( k, 3 ), 1 ) )
                {
                    phaseDiff[i] = -25736 /*-2*EVS_PI 3Q12*/;
@@ -698,10 +674,12 @@ static void FindPhaseDifferences(
                    phaseDiff[i] = 0 /* 0*EVS_PI 3Q12*/;
                    move16();
                }
#endif
#ifdef DEBUG_ISSUE_1966
                fractional = 0; // only for debug
                a_way = 2;
#else
                if ( s_and( k, 1 ) != 0 )
                {
                    phaseDiff[i] = 0 /*0 Q13*/; /*2Q13*/
                    move16();
                }
#endif
            }
            ELSE
@@ -762,20 +740,8 @@ static void FindPhaseDifferences(
                }
                phaseDiff[i] = round_fx( L_shl( L_tmp, 1 ) ); /*3Q12*/
                move16();
#ifdef DEBUG_ISSUE_1966
                a_way = 3;
#endif
            }
        }
#ifdef DEBUG_ISSUE_1966
        printf( "phaseDiff[%3d]=%15.15f  frac=%15.15f  a_way=%d\n  l/r=%15.15f  k=%d\n",
                i,
                (double) phaseDiff[i] / (double) ( 1 << 12 ),
                ( a_way == 3 ) ? (double) L_mult( fractional, 28672 ) / (double) ( 1 << 27 ) : 0.f,
                a_way,
                (double) powerSpectrum[k - 1] / (double) powerSpectrum[k + 1],
                hTonalMDCTConc->pTCI->indexOfTonalPeak[i] );
#endif
    }

    return;
@@ -848,9 +814,6 @@ static void CalcPowerSpecAndDetectTonalComponents_fx(
        spectralData_exp = add( hTonalMDCTConc->lastBlockData.spectralData_exp, hTonalMDCTConc->lastBlockData.gain_tcx_exp );
    }

#ifdef DEBUG_ISSUE_1966
    //printf( "Before DetectTonalComponents_fx: hTonalMDCTConc->pTCI->numIndexes=%d\n", hTonalMDCTConc->pTCI->numIndexes );
#endif
    DetectTonalComponents_fx( (Word16 *) hTonalMDCTConc->pTCI->indexOfTonalPeak,
                              (Word16 *) hTonalMDCTConc->pTCI->lowerIndex,
                              (Word16 *) hTonalMDCTConc->pTCI->upperIndex,
@@ -867,9 +830,6 @@ static void CalcPowerSpecAndDetectTonalComponents_fx(
                              nSamples,
                              hTonalMDCTConc->nSamplesCore,
                              floorPowerSpectrum, psychParamsCurrent, element_mode );
#ifdef DEBUG_ISSUE_1966
    //printf( "Behind DetectTonalComponents_fx: hTonalMDCTConc->pTCI->numIndexes=%d\n", hTonalMDCTConc->pTCI->numIndexes );
#endif
    FindPhases( hTonalMDCTConc, secondLastMDCT, secondLastMDST, sub( secondLastMDST_exp, secondLastMDCT_exp ) );

    FindPhaseDifferences( hTonalMDCTConc, powerSpectrum );
@@ -1020,10 +980,7 @@ void TonalMDCTConceal_Detect_fx(
    Word16 i, powerSpectrum_exp, secondLastMDST_exp, s;
    Word16 nSamples;
    Word32 sns_int_scf_fx[FDNS_NPTS];
#ifdef DEBUG_ISSUE_1966
    Word32 det_way = 0;
    printf( "Calling TonalMDCTConceal_Detect in frame=%d\n", frame);
#endif

    set32_fx( sns_int_scf_fx, 0, FDNS_NPTS );

    nSamples = hTonalMDCTConc->nSamples;
@@ -1054,10 +1011,6 @@ void TonalMDCTConceal_Detect_fx(
        {
            IF( hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive == 0 )
            {
#ifdef DEBUG_ISSUE_1966
                det_way = 1;
#endif

                CalcMDXT( hTonalMDCTConc, 0, hTonalMDCTConc->secondLastPcmOut, secondLastMDST, &secondLastMDST_exp );
                CalcMDXT( hTonalMDCTConc, 1, hTonalMDCTConc->secondLastPcmOut, secondLastMDCT, &secondLastMDCT_exp );
                hTonalMDCTConc->nNonZeroSamples = 0;
@@ -1106,9 +1059,6 @@ void TonalMDCTConceal_Detect_fx(
            }
            ELSE
            {
#ifdef DEBUG_ISSUE_1966
                det_way = 2;
#endif
                /* If the second last frame was also lost, it is expected that pastTimeSignal could hold a bit different signal (e.g. including fade-out) from the one stored in TonalMDCTConceal_SaveTimeSignal. */
                /* That is why we reuse the already stored information about the concealed spectrum in the second last frame */
                Word16 temp_power_spectrum_q = 0;
@@ -1121,9 +1071,6 @@ void TonalMDCTConceal_Detect_fx(
                }
                IF( psychParamsCurrent == NULL )
                {
#ifdef DEBUG_ISSUE_1966
                    det_way = 21;
#endif
                    mdct_shaping_16( hTonalMDCTConc->secondLastPowerSpectrum, hTonalMDCTConc->nSamplesCore, nSamples,
                                     hTonalMDCTConc->secondLastBlockData.scaleFactors, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp,
                                     hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e, powerSpectrum );
@@ -1143,9 +1090,6 @@ void TonalMDCTConceal_Detect_fx(
                }
                ELSE
                {
#ifdef DEBUG_ISSUE_1966
                    det_way = 22;
#endif
                    FOR( i = 0; i < FDNS_NPTS; i++ )
                    {
                        sns_int_scf_fx[i] = L_shl( hTonalMDCTConc->secondLastBlockData.scaleFactors[i], add( 1, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp[i] ) ); // Q16
@@ -1162,9 +1106,6 @@ void TonalMDCTConceal_Detect_fx(
                    }
                    powerSpectrum_exp = sub( 31, sub( shl( sub( Q31 - 3, powerSpectrum_exp ), 1 ), 31 ) );
                }
#ifdef DEBUG_ISSUE_1966
                //printf( "Before RefineTonalComponents: hTonalMDCTConc->pTCI->numIndexes=%d\n", hTonalMDCTConc->pTCI->numIndexes );
#endif
                RefineTonalComponents_fx( (Word16 *) hTonalMDCTConc->pTCI->indexOfTonalPeak,
                                          (Word16 *) hTonalMDCTConc->pTCI->lowerIndex,
                                          (Word16 *) hTonalMDCTConc->pTCI->upperIndex,
@@ -1183,26 +1124,15 @@ void TonalMDCTConceal_Detect_fx(
                                          nSamples,
                                          hTonalMDCTConc->nSamplesCore,
                                          extract_l( Mpy_32_16_1( L_mult0( hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamples ), 82 ) ), element_mode, psychParamsCurrent ); /* floorPowerSpectrum */
#ifdef DEBUG_ISSUE_1966
                //printf( "After RefineTonalComponents: hTonalMDCTConc->pTCI->numIndexes=%d\n", hTonalMDCTConc->pTCI->numIndexes );
#endif
            }
        }
    }
    ELSE
    {
#ifdef DEBUG_ISSUE_1966
        det_way = 3;
#endif

        hTonalMDCTConc->pTCI->numIndexes = 0;
        move16();
    }

#ifdef DEBUG_ISSUE_1966
    printf( "Using TonalMDCTConceal_Detect in path=%d\n", det_way );
#endif

    *numIndices = hTonalMDCTConc->pTCI->numIndexes;
    move16();