Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 ################################## */ Loading lib_enc/transient_detection_fx.c +45 −14 Original line number Diff line number Diff line Loading @@ -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 ); Loading Loading @@ -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 ); Loading @@ -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. */ Loading Loading @@ -1157,7 +1169,7 @@ static void InitDelayBuffer( return; } #ifndef HARMONIZE_2508_InitSubblockEnergies static void InitSubblockEnergies( const Word16 nFrameLength, const Word16 nDelay, Loading Loading @@ -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(); Loading @@ -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 ); Loading @@ -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. Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 ################################## */ Loading
lib_enc/transient_detection_fx.c +45 −14 Original line number Diff line number Diff line Loading @@ -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 ); Loading Loading @@ -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 ); Loading @@ -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. */ Loading Loading @@ -1157,7 +1169,7 @@ static void InitDelayBuffer( return; } #ifndef HARMONIZE_2508_InitSubblockEnergies static void InitSubblockEnergies( const Word16 nFrameLength, const Word16 nDelay, Loading Loading @@ -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(); Loading @@ -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 ); Loading @@ -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. Loading