| OLD | NEW |
| 1 /* Copyright (c) 2001-2011 Timothy B. Terriberry | 1 /* Copyright (c) 2001-2011 Timothy B. Terriberry |
| 2 Copyright (c) 2008-2009 Xiph.Org Foundation */ | 2 Copyright (c) 2008-2009 Xiph.Org Foundation */ |
| 3 /* | 3 /* |
| 4 Redistribution and use in source and binary forms, with or without | 4 Redistribution and use in source and binary forms, with or without |
| 5 modification, are permitted provided that the following conditions | 5 modification, are permitted provided that the following conditions |
| 6 are met: | 6 are met: |
| 7 | 7 |
| 8 - Redistributions of source code must retain the above copyright | 8 - Redistributions of source code must retain the above copyright |
| 9 notice, this list of conditions and the following disclaimer. | 9 notice, this list of conditions and the following disclaimer. |
| 10 | 10 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 unsigned sym; | 91 unsigned sym; |
| 92 sym=(EC_SYM_MAX+carry)&EC_SYM_MAX; | 92 sym=(EC_SYM_MAX+carry)&EC_SYM_MAX; |
| 93 do _this->error|=ec_write_byte(_this,sym); | 93 do _this->error|=ec_write_byte(_this,sym); |
| 94 while(--(_this->ext)>0); | 94 while(--(_this->ext)>0); |
| 95 } | 95 } |
| 96 _this->rem=_c&EC_SYM_MAX; | 96 _this->rem=_c&EC_SYM_MAX; |
| 97 } | 97 } |
| 98 else _this->ext++; | 98 else _this->ext++; |
| 99 } | 99 } |
| 100 | 100 |
| 101 static void ec_enc_normalize(ec_enc *_this){ | 101 static OPUS_INLINE void ec_enc_normalize(ec_enc *_this){ |
| 102 /*If the range is too small, output some bits and rescale it.*/ | 102 /*If the range is too small, output some bits and rescale it.*/ |
| 103 while(_this->rng<=EC_CODE_BOT){ | 103 while(_this->rng<=EC_CODE_BOT){ |
| 104 ec_enc_carry_out(_this,(int)(_this->val>>EC_CODE_SHIFT)); | 104 ec_enc_carry_out(_this,(int)(_this->val>>EC_CODE_SHIFT)); |
| 105 /*Move the next-to-high-order symbol into the high-order position.*/ | 105 /*Move the next-to-high-order symbol into the high-order position.*/ |
| 106 _this->val=(_this->val<<EC_SYM_BITS)&(EC_CODE_TOP-1); | 106 _this->val=(_this->val<<EC_SYM_BITS)&(EC_CODE_TOP-1); |
| 107 _this->rng<<=EC_SYM_BITS; | 107 _this->rng<<=EC_SYM_BITS; |
| 108 _this->nbits_total+=EC_SYM_BITS; | 108 _this->nbits_total+=EC_SYM_BITS; |
| 109 } | 109 } |
| 110 } | 110 } |
| 111 | 111 |
| 112 void ec_enc_init(ec_enc *_this,unsigned char *_buf,opus_uint32 _size){ | 112 void ec_enc_init(ec_enc *_this,unsigned char *_buf,opus_uint32 _size){ |
| 113 _this->buf=_buf; | 113 _this->buf=_buf; |
| 114 _this->end_offs=0; | 114 _this->end_offs=0; |
| 115 _this->end_window=0; | 115 _this->end_window=0; |
| 116 _this->nend_bits=0; | 116 _this->nend_bits=0; |
| 117 /*This is the offset from which ec_tell() will subtract partial bits.*/ | 117 /*This is the offset from which ec_tell() will subtract partial bits.*/ |
| 118 _this->nbits_total=EC_CODE_BITS+1; | 118 _this->nbits_total=EC_CODE_BITS+1; |
| 119 _this->offs=0; | 119 _this->offs=0; |
| 120 _this->rng=EC_CODE_TOP; | 120 _this->rng=EC_CODE_TOP; |
| 121 _this->rem=-1; | 121 _this->rem=-1; |
| 122 _this->val=0; | 122 _this->val=0; |
| 123 _this->ext=0; | 123 _this->ext=0; |
| 124 _this->storage=_size; | 124 _this->storage=_size; |
| 125 _this->error=0; | 125 _this->error=0; |
| 126 } | 126 } |
| 127 | 127 |
| 128 void ec_encode(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _ft){ | 128 void ec_encode(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _ft){ |
| 129 opus_uint32 r; | 129 opus_uint32 r; |
| 130 r=_this->rng/_ft; | 130 r=celt_udiv(_this->rng,_ft); |
| 131 if(_fl>0){ | 131 if(_fl>0){ |
| 132 _this->val+=_this->rng-IMUL32(r,(_ft-_fl)); | 132 _this->val+=_this->rng-IMUL32(r,(_ft-_fl)); |
| 133 _this->rng=IMUL32(r,(_fh-_fl)); | 133 _this->rng=IMUL32(r,(_fh-_fl)); |
| 134 } | 134 } |
| 135 else _this->rng-=IMUL32(r,(_ft-_fh)); | 135 else _this->rng-=IMUL32(r,(_ft-_fh)); |
| 136 ec_enc_normalize(_this); | 136 ec_enc_normalize(_this); |
| 137 } | 137 } |
| 138 | 138 |
| 139 void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _bits){ | 139 void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _bits){ |
| 140 opus_uint32 r; | 140 opus_uint32 r; |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 would corrupt the range coder data, and that's more important.*/ | 285 would corrupt the range coder data, and that's more important.*/ |
| 286 if(_this->offs+_this->end_offs>=_this->storage&&l<used){ | 286 if(_this->offs+_this->end_offs>=_this->storage&&l<used){ |
| 287 window&=(1<<l)-1; | 287 window&=(1<<l)-1; |
| 288 _this->error=-1; | 288 _this->error=-1; |
| 289 } | 289 } |
| 290 _this->buf[_this->storage-_this->end_offs-1]|=(unsigned char)window; | 290 _this->buf[_this->storage-_this->end_offs-1]|=(unsigned char)window; |
| 291 } | 291 } |
| 292 } | 292 } |
| 293 } | 293 } |
| 294 } | 294 } |
| OLD | NEW |