diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2022-07-24 02:12:03 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2022-07-24 02:12:03 -0400 |
commit | 5413ef784941652448e703688fbe3b96ef6d7e86 (patch) | |
tree | 8fa2dbd5c2d4c60ff1d2d22a2f72246f008d50f0 /silk/float/LTP_scale_ctrl_FLP.c | |
parent | 378b4e5fc31b63c1f1a9f6a87a62609c5a083724 (diff) | |
download | opus-5413ef784941652448e703688fbe3b96ef6d7e86.tar.gz |
Re-tuning the use of LTP scaling
Making LTP scaling depend on the bitrate and whether FEC is on.
The thresholds for scaling 1 and 2 are now independent.
Diffstat (limited to 'silk/float/LTP_scale_ctrl_FLP.c')
-rw-r--r-- | silk/float/LTP_scale_ctrl_FLP.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/silk/float/LTP_scale_ctrl_FLP.c b/silk/float/LTP_scale_ctrl_FLP.c index 8dbe29d0..1fed0993 100644 --- a/silk/float/LTP_scale_ctrl_FLP.c +++ b/silk/float/LTP_scale_ctrl_FLP.c @@ -42,7 +42,13 @@ void silk_LTP_scale_ctrl_FLP( if( condCoding == CODE_INDEPENDENTLY ) { /* Only scale if first frame in packet */ round_loss = psEnc->sCmn.PacketLoss_perc + psEnc->sCmn.nFramesPerPacket; - psEnc->sCmn.indices.LTP_scaleIndex = (opus_int8)silk_LIMIT( round_loss * psEncCtrl->LTPredCodGain * 0.1f, 0.0f, 2.0f ); + if ( psEnc->sCmn.LBRR_flag ) { + /* LBRR reduces the effective loss. In practice, it does not square the loss because + losses aren't independent, but that still seems to work best. We also never go below 2%. */ + round_loss = 2 + silk_SMULBB( round_loss, round_loss) / 100; + } + psEnc->sCmn.indices.LTP_scaleIndex = silk_SMULBB( psEncCtrl->LTPredCodGain, round_loss ) > silk_log2lin( 2900 - psEnc->sCmn.SNR_dB_Q7 ); + psEnc->sCmn.indices.LTP_scaleIndex += silk_SMULBB( psEncCtrl->LTPredCodGain, round_loss ) > silk_log2lin( 3900 - psEnc->sCmn.SNR_dB_Q7 ); } else { /* Default is minimum scaling */ psEnc->sCmn.indices.LTP_scaleIndex = 0; |