diff --git a/libcelt/entdec.c b/libcelt/entdec.c index 003b5ff209c2b8c53586d55aef5701641e7c5f80..722c85188f8d36f7d2436d52b7ae6288027cd85e 100644 --- a/libcelt/entdec.c +++ b/libcelt/entdec.c @@ -128,13 +128,13 @@ ec_uint32 ec_dec_bits(ec_dec *_this,int _ftb){ unsigned ft; t=0; while(_ftb>EC_UNIT_BITS){ - s=ec_decode_bin(_this,EC_UNIT_BITS); + s=ec_decode_raw(_this,EC_UNIT_BITS); /*ec_dec_update(_this,s,s+1,EC_UNIT_MASK+1);*/ t=t<<EC_UNIT_BITS|s; _ftb-=EC_UNIT_BITS; } ft=1U<<_ftb; - s=ec_decode_bin(_this,_ftb); + s=ec_decode_raw(_this,_ftb); /*ec_dec_update(_this,s,s+1,ft);*/ t=t<<_ftb|s; return t; diff --git a/libcelt/entdec.h b/libcelt/entdec.h index 57bfebca83cd9270e85f3000f2e048bf85f10c42..8c6de86c21c6fb462f04875f4ee05a78c208c1ef 100644 --- a/libcelt/entdec.h +++ b/libcelt/entdec.h @@ -78,7 +78,9 @@ void ec_dec_init(ec_dec *_this,ec_byte_buffer *_buf); up to and including the one encoded is fh, then the returned value will fall in the range [fl,fh).*/ unsigned ec_decode(ec_dec *_this,unsigned _ft); -unsigned ec_decode_bin(ec_dec *_this,unsigned bits); +unsigned ec_decode_bin(ec_dec *_this,unsigned _bits); +unsigned ec_decode_raw(ec_dec *_this,unsigned bits); + /*Advance the decoder past the next symbol using the frequency information the symbol was encoded with. Exactly one call to ec_decode() must have been made so that all necessary diff --git a/libcelt/entenc.c b/libcelt/entenc.c index 0c902ae796b4c7129e775626695baf666ff1fa0a..1ff10360b912ab5055584bd9ca72b72f1c619000 100644 --- a/libcelt/entenc.c +++ b/libcelt/entenc.c @@ -131,11 +131,11 @@ void ec_enc_bits(ec_enc *_this,ec_uint32 _fl,int _ftb){ while(_ftb>EC_UNIT_BITS){ _ftb-=EC_UNIT_BITS; fl=(unsigned)(_fl>>_ftb)&EC_UNIT_MASK; - ec_encode_bin(_this,fl,fl+1,EC_UNIT_BITS); + ec_encode_raw(_this,fl,fl+1,EC_UNIT_BITS); } ft=1<<_ftb; fl=(unsigned)_fl&ft-1; - ec_encode_bin(_this,fl,fl+1,_ftb); + ec_encode_raw(_this,fl,fl+1,_ftb); } void ec_enc_uint(ec_enc *_this,ec_uint32 _fl,ec_uint32 _ft){ diff --git a/libcelt/entenc.h b/libcelt/entenc.h index 5c082ab8ffbb43e64de7e7a5d82695228d021134..10647eb3659a9f1836cd13fc25ebd4d64355f5d2 100644 --- a/libcelt/entenc.h +++ b/libcelt/entenc.h @@ -78,7 +78,8 @@ void ec_enc_init(ec_enc *_this,ec_byte_buffer *_buf); decoded value will fall. _ft: The sum of the frequencies of all the symbols*/ void ec_encode(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _ft); -void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned bits); +void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _bits); +void ec_encode_raw(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned bits); /*Encodes a sequence of raw bits in the stream. _fl: The bits to encode. _ftb: The number of bits to encode. diff --git a/libcelt/laplace.c b/libcelt/laplace.c index 5a09fece3172dc08ef2deadcabe0490122176536..1eda29cae20b9603dae7bfb1b5d849de61078168 100644 --- a/libcelt/laplace.c +++ b/libcelt/laplace.c @@ -84,7 +84,7 @@ void ec_laplace_encode_start(ec_enc *enc, int *value, int decay, int fs) fl = 0; if (s) fl += fs; - ec_encode(enc, fl, fl+fs, ft); + ec_encode_bin(enc, fl, fl+fs, 15); } void ec_laplace_encode(ec_enc *enc, int *value, int decay) @@ -102,7 +102,7 @@ int ec_laplace_decode_start(ec_dec *dec, int decay, int fs) fl = 0; ft = 32768; fh = fs; - fm = ec_decode(dec, ft); + fm = ec_decode_bin(dec, 15); while (fm >= fh && fs != 0) { fl = fh; diff --git a/libcelt/rangedec.c b/libcelt/rangedec.c index 48cd3a4ea712a86c1700a4c4427e4b2b0c28a788..901cb79e40278708a719db083a5014b4a421619b 100644 --- a/libcelt/rangedec.c +++ b/libcelt/rangedec.c @@ -154,15 +154,14 @@ unsigned ec_decode(ec_dec *_this,unsigned _ft){ return _ft-EC_MINI(s+1,_ft); } -unsigned ec_decode_bin(ec_dec *_this,unsigned bits){ -#if 0 +unsigned ec_decode_bin(ec_dec *_this,unsigned _bits){ unsigned s; - ec_uint32 ft; - ft = (ec_uint32)1<<bits; - _this->nrm=_this->rng>>bits; + _this->nrm=_this->rng>>_bits; s=(unsigned)((_this->dif-1)/_this->nrm); - return ft-EC_MINI(s+1,ft); -#else + return (1<<_bits)-EC_MINI(s+1,1<<_bits); +} + +unsigned ec_decode_raw(ec_dec *_this,unsigned bits){ unsigned value=0; int count=0; _this->nb_end_bits += bits; @@ -177,7 +176,6 @@ unsigned ec_decode_bin(ec_dec *_this,unsigned bits){ value |= ((_this->end_byte>>(8-_this->end_bits_left))&((1<<bits)-1))<<count; _this->end_bits_left -= bits; return value; -#endif } void ec_dec_update(ec_dec *_this,unsigned _fl,unsigned _fh,unsigned _ft){ diff --git a/libcelt/rangeenc.c b/libcelt/rangeenc.c index 6f8682d5a5a90cb8e2879a419360a8386e765bb0..51ef9c00a05edc7206908c80a6d028fb485d3f55 100644 --- a/libcelt/rangeenc.c +++ b/libcelt/rangeenc.c @@ -127,18 +127,18 @@ void ec_encode(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _ft){ ec_enc_normalize(_this); } -void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned bits){ -#if 0 - ec_uint32 r, ft; - r=_this->rng>>bits; - ft = (ec_uint32)1<<bits; +void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _bits){ + ec_uint32 r; + r=_this->rng>>_bits; if(_fl>0){ - _this->low+=_this->rng-IMUL32(r,(ft-_fl)); - _this->rng=IMUL32(r,(_fh-_fl)); + _this->low+=_this->rng-IMUL32(r,((1<<_bits)-_fl)); + _this->rng=IMUL32(r,(_fh-_fl)); } - else _this->rng-=IMUL32(r,(ft-_fh)); + else _this->rng-=IMUL32(r,((1<<_bits)-_fh)); ec_enc_normalize(_this); -#else +} + +void ec_encode_raw(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned bits){ _this->nb_end_bits += bits; while (bits >= _this->end_bits_left) { @@ -151,7 +151,6 @@ void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned bits){ } _this->end_byte |= (_fl<<(8-_this->end_bits_left)) & 0xff; _this->end_bits_left -= bits; -#endif } long ec_enc_tell(ec_enc *_this,int _b){