Index: third_party/opus/src/celt/rate.c |
diff --git a/third_party/opus/src/celt/rate.c b/third_party/opus/src/celt/rate.c |
index 7dfa5be8a639268415ea1cf46b6e49730e389496..ca4cc870eaa412f52a45f41a938282b5a0c7d4e9 100644 |
--- a/third_party/opus/src/celt/rate.c |
+++ b/third_party/opus/src/celt/rate.c |
@@ -348,12 +348,17 @@ static OPUS_INLINE int interp_bits2pulses(const CELTMode *m, int start, int end, |
/*This if() block is the only part of the allocation function that |
is not a mandatory part of the bitstream: any bands we choose to |
skip here must be explicitly signaled.*/ |
- /*Choose a threshold with some hysteresis to keep bands from |
- fluctuating in and out.*/ |
+ int depth_threshold; |
+ /*We choose a threshold with some hysteresis to keep bands from |
+ fluctuating in and out, but we try not to fold below a certain point. */ |
+ if (codedBands > 17) |
+ depth_threshold = j<prev ? 7 : 9; |
+ else |
+ depth_threshold = 0; |
#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 > (depth_threshold*band_width<<LM<<BITRES)>>4 && j<=signalBandwidth)) |
#endif |
{ |
ec_enc_bit_logp(ec, 1, 1); |