diff options
author | Jean-Marc Valin <Jean-Marc.Valin@csiro.au> | 2008-04-23 07:42:10 +0400 |
---|---|---|
committer | Jean-Marc Valin <Jean-Marc.Valin@csiro.au> | 2008-04-23 07:42:10 +0400 |
commit | 4ce9205f3832f136fc86ee3cd367bcc91359c424 (patch) | |
tree | bf37d829a7c97e6c3646e2e30dbe041ac55c2237 /libcelt/laplace.c | |
parent | e488a1077bb9f0e8563cad4380bea0d9b4fa8495 (diff) |
Optimisation: caching the divisions used in the Laplace encoder.
Diffstat (limited to 'libcelt/laplace.c')
-rw-r--r-- | libcelt/laplace.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/libcelt/laplace.c b/libcelt/laplace.c index 14fd726..b48bfe7 100644 --- a/libcelt/laplace.c +++ b/libcelt/laplace.c @@ -35,15 +35,15 @@ #include "laplace.h" -static int ec_laplace_get_start_freq(int decay) +int ec_laplace_get_start_freq(int decay) { return (((ec_uint32)32767)*(16384-decay))/(16384+decay); } -void ec_laplace_encode(ec_enc *enc, int value, int decay) +void ec_laplace_encode_start(ec_enc *enc, int value, int decay, int fs) { int i; - int fl, fs, ft; + int fl, ft; int s = 0; if (value < 0) { @@ -51,7 +51,6 @@ void ec_laplace_encode(ec_enc *enc, int value, int decay) value = -value; } ft = 32767; - fs = ec_laplace_get_start_freq(decay); fl = -fs; for (i=0;i<value;i++) { @@ -76,13 +75,19 @@ void ec_laplace_encode(ec_enc *enc, int value, int decay) ec_encode(enc, fl, fl+fs, ft); } -int ec_laplace_decode(ec_dec *dec, int decay) +void ec_laplace_encode(ec_enc *enc, int value, int decay) +{ + int fs = ec_laplace_get_start_freq(decay); + ec_laplace_encode_start(enc, value, decay, fs); +} + + +int ec_laplace_decode_start(ec_dec *dec, int decay, int fs) { int val=0; - int fl, fh, fs, ft, fm; + int fl, fh, ft, fm; fl = 0; ft = 32767; - fs = ec_laplace_get_start_freq(decay); fh = fs; fm = ec_decode(dec, ft); /*DEBUG*/ @@ -113,4 +118,8 @@ int ec_laplace_decode(ec_dec *dec, int decay) return val; } - +int ec_laplace_decode(ec_dec *dec, int decay) +{ + int fs = ec_laplace_get_start_freq(decay); + return ec_laplace_decode_start(dec, decay, fs); +} |