shithub: opus

Download patch

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);
--