Most of the Laplace encoding works, except that ec_decode() is still not giving

me what I expect
This commit is contained in:
Jean-Marc Valin 2007-12-07 10:56:25 +11:00
parent 468c5395b4
commit bb57fe44e2

View file

@ -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 ec_laplace_decode(ec_dec *dec, int decay)
{ {
int val; int val=0;
int fl, fh, fs, ft, fm; int fl, fh, fs, ft, fm;
ft = ec_laplace_get_total(decay); ft = ec_laplace_get_total(decay);
fm = ec_decode(dec, ft); fm = ec_decode(dec, ft);
printf ("dec: %d/%d\n", fm, ft); printf ("fm: %d/%d\n", fm, ft);
fl = 0; fl = 0;
fs = 1<<15; fs = 1<<15;
fh = fs; fh = fs;
@ -81,14 +81,25 @@ int ec_laplace_decode(ec_dec *dec, int decay)
fh += fs*2; fh += fs*2;
val++; val++;
} }
if (fl<0)
{
if (fm >= fl+fs) if (fm >= fl+fs)
{
val = -val; val = -val;
fl += fs;
} else {
fh -= fs;
}
}
printf ("fl/fh: %d/%d\n", fl, fh);
ec_dec_update(dec, fl, fh, ft); ec_dec_update(dec, fl, fh, ft);
return val;
} }
#if 0 #if 1
int main() int main()
{ {
int val;
ec_enc enc; ec_enc enc;
ec_dec dec; ec_dec dec;
ec_byte_buffer buf; ec_byte_buffer buf;
@ -105,7 +116,13 @@ int main()
ec_byte_readinit(&buf,ec_byte_get_buffer(&buf),ec_byte_bytes(&buf)); ec_byte_readinit(&buf,ec_byte_get_buffer(&buf),ec_byte_bytes(&buf));
ec_dec_init(&dec,&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); ec_byte_writeclear(&buf);
return 0; return 0;