ref: 2c74526b65c15b62981224d196c292e5bba4b007
parent: 05942e77a23efcda10c0b8d0c08aaf23221a044b
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Thu Jan 26 11:25:22 EST 2023
Fix encoder infinite loop when decay is too small
--- a/celt/laplace.c
+++ b/celt/laplace.c
@@ -133,7 +133,6 @@
return val;
}
-
void ec_laplace_encode_p0(ec_enc *enc, int value, opus_uint16 p0, opus_uint16 decay)
{
int s;
@@ -148,7 +147,7 @@
{
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 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);
--
⑨