Commit e7aae6fe authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

EVS encoder BE fix

parent 12a75978
Loading
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@

static void InitDelayBuffer( Word16 nFrameLength, Word16 nDelay, DelayBuffer *pDelayBuffer );
static void InitSubblockEnergies( Word16 nFrameLength, Word16 nDelay, DelayBuffer *pDelayBuffer, SubblockEnergies *pSubblockEnergies );
static void InitSubblockEnergies_ivas_fx( Word16 nFrameLength, Word16 nDelay, DelayBuffer *pDelayBuffer, SubblockEnergies *pSubblockEnergies );
static void InitTransientDetector_fx( SubblockEnergies *pSubblockEnergies, Word16 nDelay, Word16 nSubblocksToCheck, TCheckSubblocksForAttack_fx pCheckSubblocksForAttack, Word16 attackRatioThreshold, TransientDetector *pTransientDetector );
static void UpdateDelayBuffer( Word16 const *input, Word16 nSamplesAvailable, DelayBuffer *pDelayBuffer );
static void HighPassFilter( Word16 const *input, Word16 length, Word16 *pFirState1, Word16 *pFirState2, Word16 *output );
@@ -255,7 +256,7 @@ void InitTransientDetection_ivas_fx( Word16 nFrameLength,
    /* Init the delay buffer. */
    InitDelayBuffer( nFrameLength, nTCXDelay, &pTransientDetection->delayBuffer );
    /* Init a subblock energies buffer used for the TCX Short/Long decision. */
    InitSubblockEnergies( nFrameLength, nTCXDelay, &pTransientDetection->delayBuffer, &pTransientDetection->subblockEnergies );
    InitSubblockEnergies_ivas_fx( nFrameLength, nTCXDelay, &pTransientDetection->delayBuffer, &pTransientDetection->subblockEnergies );
    /* Init the TCX Short/Long transient detector. */
    InitTCXTransientDetector( nTCXDelay, &pTransientDetection->subblockEnergies, &pTransientDetection->transientDetector );
    /* We need two past subblocks for the TCX TD and NSUBBLOCKS+1 for the temporal flatness measure FOR the TCX LTP. */
@@ -940,6 +941,28 @@ static void InitSubblockEnergies( Word16 nFrameLength, Word16 nDelay, DelayBuffe
    (void) nFrameLength;


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

    set32_fx( pSubblockEnergies->subblockNrg, MIN_BLOCK_ENERGY, nMaxBuffSize );
    set32_fx( pSubblockEnergies->accSubblockNrg, MIN_BLOCK_ENERGY, nMaxBuffSize + 1 );
    set16_fx( pSubblockEnergies->subblockNrgChange, 0x7fff, nMaxBuffSize );
    pSubblockEnergies->nDelay = nDelay / pDelayBuffer->nSubblockSize;
    assert( pSubblockEnergies->nDelay < nMaxBuffSize );
    pSubblockEnergies->nPartialDelay = nDelay % pDelayBuffer->nSubblockSize;
    pSubblockEnergies->facAccSubblockNrg = 26624 /*0.8125f Q15*/; /* Energy accumulation factor */
    pSubblockEnergies->firState1 = 0;
    pSubblockEnergies->firState2 = 0;

    pSubblockEnergies->pDelayBuffer = pDelayBuffer;
    pDelayBuffer->nDelay = s_max( pDelayBuffer->nDelay, pSubblockEnergies->nPartialDelay );
}

static void InitSubblockEnergies_ivas_fx( Word16 nFrameLength, Word16 nDelay, DelayBuffer *pDelayBuffer, SubblockEnergies *pSubblockEnergies )
{
    Word16 const nMaxBuffSize = sizeof( pSubblockEnergies->subblockNrg ) / sizeof( pSubblockEnergies->subblockNrg[0] );
    (void) nFrameLength;


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

    set32_fx( pSubblockEnergies->subblockNrg, 13743, nMaxBuffSize );