diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2023-01-27 00:25:22 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2023-01-27 00:25:22 +0300 |
commit | 6fbe2898cd02fa9e1cc164c328045d29e126b8cb (patch) | |
tree | 226a827e93f56b515c00994d8631eac735326feb | |
parent | ca92d4d857f63ca933ff446072e25093a15fb931 (diff) |
Fix encoder infinite loop when decay is too small
-rw-r--r-- | celt/laplace.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/celt/laplace.c b/celt/laplace.c index 3c45c3eb..21809666 100644 --- a/celt/laplace.c +++ b/celt/laplace.c @@ -133,7 +133,6 @@ int ec_laplace_decode(ec_dec *dec, unsigned fs, int decay) return val; } - void ec_laplace_encode_p0(ec_enc *enc, int value, opus_uint16 p0, opus_uint16 decay) { int s; @@ -148,7 +147,7 @@ void ec_laplace_encode_p0(ec_enc *enc, int value, opus_uint16 p0, opus_uint16 de { int i; opus_uint16 icdf[8]; - icdf[0] = decay; + icdf[0] = IMAX(7, decay); for (i=1;i<7;i++) { icdf[i] = IMAX(7-i, (icdf[i-1] * (opus_int32)decay) >> 15); @@ -177,7 +176,7 @@ int ec_laplace_decode_p0(ec_dec *dec, opus_uint16 p0, opus_uint16 decay) int i; int v; opus_uint16 icdf[8]; - icdf[0] = decay; + icdf[0] = IMAX(7, decay); for (i=1;i<7;i++) { icdf[i] = IMAX(7-i, (icdf[i-1] * (opus_int32)decay) >> 15); |