12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- inline unsigned int RangeCoder::GetChar()
- {
- return(UnpackRead->GetChar());
- }
- void RangeCoder::InitDecoder(Unpack *UnpackRead)
- {
- RangeCoder::UnpackRead=UnpackRead;
- low=code=0;
- range=uint(-1);
- for (int i=0;i < 4;i++)
- code=(code << 8) | GetChar();
- }
- // (int) cast before "low" added only to suppress compiler warnings.
- #define ARI_DEC_NORMALIZE(code,low,range,read) \
- { \
- while ((low^(low+range))<TOP || range<BOT && ((range=-(int)low&(BOT-1)),1)) \
- { \
- code=(code << 8) | read->GetChar(); \
- range <<= 8; \
- low <<= 8; \
- } \
- }
- inline int RangeCoder::GetCurrentCount()
- {
- return (code-low)/(range /= SubRange.scale);
- }
- inline uint RangeCoder::GetCurrentShiftCount(uint SHIFT)
- {
- return (code-low)/(range >>= SHIFT);
- }
- inline void RangeCoder::Decode()
- {
- low += range*SubRange.LowCount;
- range *= SubRange.HighCount-SubRange.LowCount;
- }
|