summaryrefslogtreecommitdiff
path: root/celt
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2016-06-17 20:58:30 -0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2016-06-17 20:58:30 -0400
commitb370a938ca09e5d97ae54159cab779c1b34db8f7 (patch)
tree205b747c4eb214ef8fa97dae793ab6bb3d9c12e1 /celt
parent5ead149cf49cc8d2fd0e1fb3c7cd564ecbbce100 (diff)
downloadopus-b370a938ca09e5d97ae54159cab779c1b34db8f7.tar.gz
Fixes an overflow in the constrained VBR code for bitrate>64000
Diffstat (limited to 'celt')
-rw-r--r--celt/celt_encoder.c9
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);