From bb57fe44e2a152ed7539f60d4a705874b7576ba5 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <Jean-Marc.Valin@csiro.au> Date: Fri, 7 Dec 2007 10:56:25 +1100 Subject: [PATCH] Most of the Laplace encoding works, except that ec_decode() is still not giving me what I expect --- libentcode/laplace.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/libentcode/laplace.c b/libentcode/laplace.c index 862eadb64..5c7176176 100644 --- a/libentcode/laplace.c +++ b/libentcode/laplace.c @@ -65,12 +65,12 @@ void ec_laplace_encode(ec_enc *enc, int value, int decay) int ec_laplace_decode(ec_dec *dec, int decay) { - int val; + int val=0; int fl, fh, fs, ft, fm; ft = ec_laplace_get_total(decay); fm = ec_decode(dec, ft); - printf ("dec: %d/%d\n", fm, ft); + printf ("fm: %d/%d\n", fm, ft); fl = 0; fs = 1<<15; fh = fs; @@ -81,14 +81,25 @@ int ec_laplace_decode(ec_dec *dec, int decay) fh += fs*2; val++; } - if (fm >= fl+fs) - val = -val; + if (fl<0) + { + if (fm >= fl+fs) + { + val = -val; + fl += fs; + } else { + fh -= fs; + } + } + printf ("fl/fh: %d/%d\n", fl, fh); ec_dec_update(dec, fl, fh, ft); + return val; } -#if 0 +#if 1 int main() { + int val; ec_enc enc; ec_dec dec; ec_byte_buffer buf; @@ -105,7 +116,13 @@ int main() ec_byte_readinit(&buf,ec_byte_get_buffer(&buf),ec_byte_bytes(&buf)); ec_dec_init(&dec,&buf); - ec_laplace_decode(&dec, 10000); + val = ec_laplace_decode(&dec, 10000); + printf ("dec: %d\n", val); + val = ec_laplace_decode(&dec, 12000); + printf ("dec: %d\n", val); + val = ec_laplace_decode(&dec, 9000); + printf ("dec: %d\n", val); + ec_byte_writeclear(&buf); return 0; -- GitLab