diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-06-17 20:58:30 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-06-17 20:58:30 -0400 |
commit | b370a938ca09e5d97ae54159cab779c1b34db8f7 (patch) | |
tree | 205b747c4eb214ef8fa97dae793ab6bb3d9c12e1 /celt | |
parent | 5ead149cf49cc8d2fd0e1fb3c7cd564ecbbce100 (diff) | |
download | opus-b370a938ca09e5d97ae54159cab779c1b34db8f7.tar.gz |
Fixes an overflow in the constrained VBR code for bitrate>64000
Diffstat (limited to 'celt')
-rw-r--r-- | celt/celt_encoder.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/celt/celt_encoder.c b/celt/celt_encoder.c index 41fbfd49..9221441d 100644 --- a/celt/celt_encoder.c +++ b/celt/celt_encoder.c @@ -1281,12 +1281,15 @@ static int compute_vbr(const CELTMode *mode, AnalysisInfo *analysis, opus_int32 if ((!has_surround_mask||lfe) && (constrained_vbr || bitrate<64000)) { - opus_val16 rate_factor; + opus_val16 rate_factor = Q15ONE; + if (bitrate < 64000) + { #ifdef FIXED_POINT - rate_factor = MAX16(0,(bitrate-32000)); + rate_factor = MAX16(0,(bitrate-32000)); #else - rate_factor = MAX16(0,(1.f/32768)*(bitrate-32000)); + rate_factor = MAX16(0,(1.f/32768)*(bitrate-32000)); #endif + } if (constrained_vbr) rate_factor = MIN16(rate_factor, QCONST16(0.67f, 15)); target = base_target + (opus_int32)MULT16_32_Q15(rate_factor, target-base_target); |