summaryrefslogtreecommitdiff
path: root/celt/rate.c
diff options
context:
space:
mode:
Diffstat (limited to 'celt/rate.c')
-rw-r--r--celt/rate.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/celt/rate.c b/celt/rate.c
index 7dfa5be8..c37948ed 100644
--- a/celt/rate.c
+++ b/celt/rate.c
@@ -248,7 +248,8 @@ void compute_pulse_cache(CELTMode *m, int LM)
static OPUS_INLINE int interp_bits2pulses(const CELTMode *m, int start, int end, int skip_start,
const int *bits1, const int *bits2, const int *thresh, const int *cap, opus_int32 total, opus_int32 *_balance,
int skip_rsv, int *intensity, int intensity_rsv, int *dual_stereo, int dual_stereo_rsv, int *bits,
- int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth)
+ int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth,
+ int is_transient)
{
opus_int32 psum;
int lo, hi;
@@ -350,10 +351,15 @@ static OPUS_INLINE int interp_bits2pulses(const CELTMode *m, int start, int end,
skip here must be explicitly signaled.*/
/*Choose a threshold with some hysteresis to keep bands from
fluctuating in and out.*/
+ int threshold;
+ if (is_transient)
+ threshold = j<prev?10:20;
+ else
+ threshold = j<prev?2:5;
#ifdef FUZZING
if ((rand()&0x1) == 0)
#else
- if (codedBands<=start+2 || (band_bits > ((j<prev?7:9)*band_width<<LM<<BITRES)>>4 && j<=signalBandwidth))
+ if (codedBands<=start+2 || (band_bits > ((threshold)*band_width<<LM<<BITRES)>>4 && j<=signalBandwidth))
#endif
{
ec_enc_bit_logp(ec, 1, 1);
@@ -525,7 +531,8 @@ static OPUS_INLINE int interp_bits2pulses(const CELTMode *m, int start, int end,
}
int compute_allocation(const CELTMode *m, int start, int end, const int *offsets, const int *cap, int alloc_trim, int *intensity, int *dual_stereo,
- opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth)
+ opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth,
+ int is_transient)
{
int lo, hi, len, j;
int codedBands;
@@ -632,7 +639,7 @@ int compute_allocation(const CELTMode *m, int start, int end, const int *offsets
}
codedBands = interp_bits2pulses(m, start, end, skip_start, bits1, bits2, thresh, cap,
total, balance, skip_rsv, intensity, intensity_rsv, dual_stereo, dual_stereo_rsv,
- pulses, ebits, fine_priority, C, LM, ec, encode, prev, signalBandwidth);
+ pulses, ebits, fine_priority, C, LM, ec, encode, prev, signalBandwidth, is_transient);
RESTORE_STACK;
return codedBands;
}