Exemple #1
0
 public uint ReverseDecode(LZMARangeDecoder rangeDecoder)
 {
     uint m = 1;
     uint symbol = 0;
     for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
     {
         uint bit = Models[m].Decode(rangeDecoder);
         m <<= 1;
         m += bit;
         symbol |= (bit << bitIndex);
     }
     return symbol;
 }
Exemple #2
0
 public static uint ReverseDecode(LZMARangeBitDecoder[] Models, UInt32 startIndex,
     LZMARangeDecoder rangeDecoder, int NumBitLevels)
 {
     uint m = 1;
     uint symbol = 0;
     for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
     {
         uint bit = Models[startIndex + m].Decode(rangeDecoder);
         m <<= 1;
         m += bit;
         symbol |= (bit << bitIndex);
     }
     return symbol;
 }
Exemple #3
0
 public uint Decode(LZMARangeDecoder rangeDecoder)
 {
     uint newBound = (uint)(rangeDecoder.Range >> kNumBitModelTotalBits) * (uint)Prob;
     if (rangeDecoder.Code < newBound)
     {
         rangeDecoder.Range = newBound;
         Prob += (kBitModelTotal - Prob) >> kNumMoveBits;
         if (rangeDecoder.Range < LZMARangeDecoder.kTopValue)
         {
             rangeDecoder.Code = (rangeDecoder.Code << 8) | (byte)rangeDecoder.Stream.ReadByte();
             rangeDecoder.Range <<= 8;
         }
         return 0;
     }
     else
     {
         rangeDecoder.Range -= newBound;
         rangeDecoder.Code -= newBound;
         Prob -= (Prob) >> kNumMoveBits;
         if (rangeDecoder.Range < LZMARangeDecoder.kTopValue)
         {
             rangeDecoder.Code = (rangeDecoder.Code << 8) | (byte)rangeDecoder.Stream.ReadByte();
             rangeDecoder.Range <<= 8;
         }
         return 1;
     }
 }
Exemple #4
0
 public uint Decode(LZMARangeDecoder rangeDecoder)
 {
     uint m = 1;
     for (int bitIndex = NumBitLevels; bitIndex > 0; bitIndex--)
         m = (m << 1) + Models[m].Decode(rangeDecoder);
     return m - ((uint)1 << NumBitLevels);
 }
Exemple #5
0
 public byte DecodeWithMatchByte(LZMARangeDecoder rangeDecoder, uint pos, byte prevByte, byte matchByte)
 { return m_Coders[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); }
Exemple #6
0
 public byte DecodeNormal(LZMARangeDecoder rangeDecoder, uint pos, byte prevByte)
 { return m_Coders[GetState(pos, prevByte)].DecodeNormal(rangeDecoder); }
Exemple #7
0
 public byte DecodeWithMatchByte(LZMARangeDecoder rangeDecoder, byte matchByte)
 {
     uint symbol = 1;
     do
     {
         uint matchBit = (uint)(matchByte >> 7) & 1;
         matchByte <<= 1;
         uint bit = m_Decoders[((1 + matchBit) << 8) + symbol].Decode(rangeDecoder);
         symbol = (symbol << 1) | bit;
         if (matchBit != bit)
         {
             while (symbol < 0x100)
                 symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder);
             break;
         }
     }
     while (symbol < 0x100);
     return (byte)symbol;
 }
Exemple #8
0
 public byte DecodeNormal(LZMARangeDecoder rangeDecoder)
 {
     uint symbol = 1;
     do
         symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder);
     while (symbol < 0x100);
     return (byte)symbol;
 }
Exemple #9
0
 public uint Decode(LZMARangeDecoder rangeDecoder, uint posState)
 {
     if (m_Choice.Decode(rangeDecoder) == 0)
         return m_LowCoder[posState].Decode(rangeDecoder);
     else
     {
         uint symbol = LZMABase.kNumLowLenSymbols;
         if (m_Choice2.Decode(rangeDecoder) == 0)
             symbol += m_MidCoder[posState].Decode(rangeDecoder);
         else
         {
             symbol += LZMABase.kNumMidLenSymbols;
             symbol += m_HighCoder.Decode(rangeDecoder);
         }
         return symbol;
     }
 }