Commit bd0d56df authored by Fabian Bauer's avatar Fabian Bauer
Browse files

add macro and code HARMONIZE_2508_InitSubblockEnergies

parent e4fe6183
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@
#define FIX_2489_HARMONIZE_FdCng_encodeSID              /* FhG: harmonize FdCng_encodeSID_fx() and FdCng_encodeSID_ivas_fx()  */
#define FIX_1527_CMR_BITRATE_IDX                        /* Fix for incorrect bitrate idx packed in rtp CMR E-byte */
#define HARMONIZE_2508_GetAttackForTCXDecision          /* FhG: harmonize GetAttackForTCXDecision derivates for evs/ivas  */
#define HARMONIZE_2508_InitSubblockEnergies             /* FhG: harmonize InitSubblockEnergies derivates for evs/ivas  */

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

+45 −14
Original line number Diff line number Diff line
@@ -42,8 +42,12 @@
/************************************************/

static void InitDelayBuffer( const Word16 nFrameLength, const Word16 nDelay, DelayBuffer *pDelayBuffer );
#ifdef HARMONIZE_2508_InitSubblockEnergies
static void InitSubblockEnergies( const Word16 nFrameLength, const Word16 nDelay, DelayBuffer *pDelayBuffer, SubblockEnergies *pSubblockEnergies, Word16 element_mode );
#else
static void InitSubblockEnergies( const Word16 nFrameLength, const Word16 nDelay, DelayBuffer *pDelayBuffer, SubblockEnergies *pSubblockEnergies );
static void InitSubblockEnergies_ivas_fx( const Word16 nFrameLength, const Word16 nDelay, DelayBuffer *pDelayBuffer, SubblockEnergies *pSubblockEnergies );
#endif
static void InitTransientDetector_fx( SubblockEnergies *pSubblockEnergies, const Word16 nDelay, const Word16 nSubblocksToCheck, const TCheckSubblocksForAttack_fx pCheckSubblocksForAttack, const Word16 attackRatioThreshold, TransientDetector *pTransientDetector );
static void InitTransientDetector_ivas_fx( SubblockEnergies *pSubblockEnergies, const Word16 nDelay, const Word16 nSubblocksToCheck, const TCheckSubblocksForAttack_fx pCheckSubblocksForAttack, const Word16 attackRatioThreshold, TransientDetector *pTransientDetector );
static void UpdateDelayBuffer( Word16 const *input, const Word16 nSamplesAvailable, DelayBuffer *pDelayBuffer );
@@ -369,7 +373,11 @@ void InitTransientDetection_fx(
    InitDelayBuffer( nFrameLength, nTCXDelay, &hTranDet->delayBuffer );

    /* Init a subblock energies buffer used for the TCX Short/Long decision. */
#ifdef HARMONIZE_2508_InitSubblockEnergies
    InitSubblockEnergies( nFrameLength, nTCXDelay, &hTranDet->delayBuffer, &hTranDet->subblockEnergies, EVS_MONO );
#else
    InitSubblockEnergies( nFrameLength, nTCXDelay, &hTranDet->delayBuffer, &hTranDet->subblockEnergies );
#endif

    /* Init the TCX Short/Long transient detector. */
    InitTCXTransientDetector( nTCXDelay, &hTranDet->subblockEnergies, &hTranDet->transientDetector );
@@ -393,7 +401,11 @@ void InitTransientDetection_ivas_fx(


    /* Init a subblock energies buffer used for the TCX Short/Long decision. */
#ifdef HARMONIZE_2508_InitSubblockEnergies
    InitSubblockEnergies_ivas_fx( nFrameLength, nTCXDelay, &hTranDet->delayBuffer, &hTranDet->subblockEnergies, 1 );
#else
    InitSubblockEnergies_ivas_fx( nFrameLength, nTCXDelay, &hTranDet->delayBuffer, &hTranDet->subblockEnergies );
#endif


    /* Init the TCX Short/Long transient detector. */
@@ -1157,7 +1169,7 @@ static void InitDelayBuffer(
    return;
}


#ifndef HARMONIZE_2508_InitSubblockEnergies
static void InitSubblockEnergies(
    const Word16 nFrameLength,
    const Word16 nDelay,
@@ -1189,33 +1201,55 @@ static void InitSubblockEnergies(

    return;
}
#endif


#ifdef HARMONIZE_2508_InitSubblockEnergies
static void InitSubblockEnergies_fx(
    const Word16 nFrameLength,
    const Word16 nDelay,
    DelayBuffer *pDelayBuffer,
    SubblockEnergies *pSubblockEnergies,
    Word16 element_mode )
#else
static void InitSubblockEnergies_ivas_fx(
    const Word16 nFrameLength,
    const Word16 nDelay,
    DelayBuffer *pDelayBuffer,
    SubblockEnergies *pSubblockEnergies )
#endif
{
    Word16 const nMaxBuffSize = NSUBBLOCKS + MAX_TD_DELAY;
    move16();

    assert( ( pDelayBuffer != NULL ) && ( pSubblockEnergies != NULL ) && ( pDelayBuffer->nSubblockSize * NSUBBLOCKS == nFrameLength ) && ( pDelayBuffer->nSubblockSize > 0 ) );

    set32_fx( pSubblockEnergies->subblockNrg, 54 /* 107.37 in Q(-1) */, nMaxBuffSize );
    set32_fx( pSubblockEnergies->accSubblockNrg, 54 /* 107.37 in Q(-1) */, nMaxBuffSize + 1 );
    set32_fx( pSubblockEnergies->subblockNrgChange_32fx, ONE_IN_Q15, nMaxBuffSize );
    set16_fx( pSubblockEnergies->subblockNrgChange_exp, 16, nMaxBuffSize );
    IF( nDelay != 0 )
    Word16 nMaxBuffSize;

#ifdef HARMONIZE_2508_InitSubblockEnergies
    IF( EQ_16( element_mode, EVS_MONO ) )
    {
        pSubblockEnergies->nDelay = idiv1616( nDelay, pDelayBuffer->nSubblockSize );
        nMaxBuffSize = sizeof( pSubblockEnergies->subblockNrg ) / sizeof( pSubblockEnergies->subblockNrg[0] );
        move16();

        set32_fx( pSubblockEnergies->subblockNrg, MIN_BLOCK_ENERGY, nMaxBuffSize );
        set32_fx( pSubblockEnergies->accSubblockNrg, MIN_BLOCK_ENERGY, nMaxBuffSize + 1 );
        set16_fx( pSubblockEnergies->subblockNrgChange, 0x7fff, nMaxBuffSize );
    }
    ELSE
    {
        pSubblockEnergies->nDelay = 0;
#endif
        nMaxBuffSize = NSUBBLOCKS + MAX_TD_DELAY;
        move16();


        set32_fx( pSubblockEnergies->subblockNrg, 54 /* 107.37 in Q(-1) */, nMaxBuffSize );
        set32_fx( pSubblockEnergies->accSubblockNrg, 54 /* 107.37 in Q(-1) */, nMaxBuffSize + 1 );
        set32_fx( pSubblockEnergies->subblockNrgChange_32fx, ONE_IN_Q15, nMaxBuffSize );
        set16_fx( pSubblockEnergies->subblockNrgChange_exp, 16, nMaxBuffSize );
        pSubblockEnergies->q_firState = 15;
        move16();
#ifdef HARMONIZE_2508_InitSubblockEnergies
    }
#endif
    pSubblockEnergies->nDelay = idiv1616_1( nDelay, pDelayBuffer->nSubblockSize );
    assert( pSubblockEnergies->nDelay < nMaxBuffSize );
    pSubblockEnergies->nPartialDelay = nDelay % pDelayBuffer->nSubblockSize;
    move16();
@@ -1225,8 +1259,6 @@ static void InitSubblockEnergies_ivas_fx(
    move16();
    pSubblockEnergies->firState2 = 0;
    move16();
    pSubblockEnergies->q_firState = 15;
    move16();

    pSubblockEnergies->pDelayBuffer = pDelayBuffer;
    pDelayBuffer->nDelay = s_max( pDelayBuffer->nDelay, pSubblockEnergies->nPartialDelay );
@@ -1235,7 +1267,6 @@ static void InitSubblockEnergies_ivas_fx(
    return;
}


/** Init transient detector.
 * Fills TransientDetector structure with sensible content and enable it.
 * @param pSubblockEnergies Subblock energies used in this transient detector.