summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@amazon.com>2023-01-26 16:25:22 -0500
committerJean-Marc Valin <jmvalin@amazon.com>2023-01-26 16:25:22 -0500
commit6fbe2898cd02fa9e1cc164c328045d29e126b8cb (patch)
tree226a827e93f56b515c00994d8631eac735326feb
parentca92d4d857f63ca933ff446072e25093a15fb931 (diff)
downloadopus-6fbe2898cd02fa9e1cc164c328045d29e126b8cb.tar.gz
Fix encoder infinite loop when decay is too small
-rw-r--r--celt/laplace.c5
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);