Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/celt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2009-05-23 22:17:02 +0400
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2009-05-23 22:17:02 +0400
commitbe607256398ef5494063e23c7d0f528939e4d8d8 (patch)
treed3a92f4c8869f4b24a0da2febafd5f75660b4f9e /libcelt/laplace.c
parentce02e1b49dc13fbf29359f4634beef8022e6f128 (diff)
Making use of previously unused range of the laplace encoder to have a slightly
wider range of values.
Diffstat (limited to 'libcelt/laplace.c')
-rw-r--r--libcelt/laplace.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/libcelt/laplace.c b/libcelt/laplace.c
index a87d873..db4e5fc 100644
--- a/libcelt/laplace.c
+++ b/libcelt/laplace.c
@@ -63,13 +63,18 @@ void ec_laplace_encode_start(ec_enc *enc, int *value, int decay, int fs)
fs = (fs*(ec_int32)decay)>>14;
if (fs == 0)
{
- fs = tmp_s;
- fl = tmp_l;
- if (s)
- *value = -i;
- else
- *value = i;
- break;
+ if (fl+2 <= ft)
+ {
+ fs = 1;
+ } else {
+ fs = tmp_s;
+ fl = tmp_l;
+ if (s)
+ *value = -i;
+ else
+ *value = i;
+ break;
+ }
}
}
if (fl < 0)
@@ -103,6 +108,10 @@ int ec_laplace_decode_start(ec_dec *dec, int decay, int fs)
{
fl = fh;
fs = (fs*(ec_int32)decay)>>14;
+ if (fs == 0 && fh+2 <= ft)
+ {
+ fs = 1;
+ }
fh += fs*2;
val++;
}