Fixed Laplace encoder

This commit is contained in:
Jean-Marc Valin 2007-12-07 16:06:27 +11:00
parent 671bf403e6
commit b726185d5b

View file

@ -59,8 +59,8 @@ void ec_laplace_encode(ec_enc *enc, int value, int decay)
fl = 0; fl = 0;
if (s) if (s)
fl += fs; fl += fs;
printf ("enc: %d %d %d\n", fl, fs, ft); //printf ("enc: %d %d %d\n", fl, fs, ft);
ec_encode(enc, fl, fs, ft); ec_encode(enc, fl, fl+fs, ft);
} }
int ec_laplace_decode(ec_dec *dec, int decay) int ec_laplace_decode(ec_dec *dec, int decay)
@ -70,7 +70,7 @@ int ec_laplace_decode(ec_dec *dec, int decay)
ft = ec_laplace_get_total(decay); ft = ec_laplace_get_total(decay);
fm = ec_decode(dec, ft); fm = ec_decode(dec, ft);
printf ("fm: %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,7 +81,7 @@ int ec_laplace_decode(ec_dec *dec, int decay)
fh += fs*2; fh += fs*2;
val++; val++;
} }
if (fl<0) if (fl>0)
{ {
if (fm >= fl+fs) if (fm >= fl+fs)
{ {
@ -91,12 +91,12 @@ int ec_laplace_decode(ec_dec *dec, int decay)
fh -= fs; fh -= fs;
} }
} }
printf ("fl/fh: %d/%d\n", fl, fh); //printf ("fl/fh: %d/%d\n", fl, fh);
ec_dec_update(dec, fl, fh, ft); ec_dec_update(dec, fl, fh, ft);
return val; return val;
} }
#if 1 #if 0
int main() int main()
{ {
int val; int val;
@ -107,9 +107,11 @@ int main()
ec_byte_writeinit(&buf); ec_byte_writeinit(&buf);
ec_enc_init(&enc,&buf); ec_enc_init(&enc,&buf);
ec_laplace_encode(&enc, 0, 10000); ec_laplace_encode(&enc, 9, 10000);
ec_laplace_encode(&enc, 1, 12000); ec_laplace_encode(&enc, -5, 12000);
ec_laplace_encode(&enc, -2, 9000); ec_laplace_encode(&enc, -2, 9000);
ec_laplace_encode(&enc, 20, 15000);
ec_laplace_encode(&enc, 2, 900);
ec_enc_done(&enc); ec_enc_done(&enc);
@ -122,6 +124,10 @@ int main()
printf ("dec: %d\n", val); printf ("dec: %d\n", val);
val = ec_laplace_decode(&dec, 9000); val = ec_laplace_decode(&dec, 9000);
printf ("dec: %d\n", val); printf ("dec: %d\n", val);
val = ec_laplace_decode(&dec, 15000);
printf ("dec: %d\n", val);
val = ec_laplace_decode(&dec, 900);
printf ("dec: %d\n", val);
ec_byte_writeclear(&buf); ec_byte_writeclear(&buf);