コード例 #1
0
ファイル: LzmaEncoder.cs プロジェクト: proxymoron/Sulakore
 public void Encode(Encoder rangeEncoder, byte symbol)
 {
     uint context = 1;
     for (int i = 7; i >= 0; i--)
     {
         uint bit = (uint)((symbol >> i) & 1);
         m_Encoders[context].Encode(rangeEncoder, bit);
         context = (context << 1) | bit;
     }
 }
コード例 #2
0
		public void ReverseEncode(Encoder rangeEncoder, UInt32 symbol)
		{
			UInt32 m = 1;
			for (UInt32 i = 0; i < NumBitLevels; i++)
			{
				UInt32 bit = symbol & 1;
				Models[m].Encode(rangeEncoder, bit);
				m = (m << 1) | bit;
				symbol >>= 1;
			}
		}
コード例 #3
0
		public void Encode(Encoder rangeEncoder, UInt32 symbol)
		{
			UInt32 m = 1;
			for (int bitIndex = NumBitLevels; bitIndex > 0; )
			{
				bitIndex--;
				UInt32 bit = (symbol >> bitIndex) & 1;
				Models[m].Encode(rangeEncoder, bit);
				m = (m << 1) | bit;
			}
		}
コード例 #4
0
ファイル: RangeCoderBit.cs プロジェクト: proxymoron/Sulakore
		public void Encode(Encoder encoder, uint symbol)
		{
			// encoder.EncodeBit(Prob, kNumBitModelTotalBits, symbol);
			// UpdateModel(symbol);
			uint newBound = (encoder.Range >> kNumBitModelTotalBits) * Prob;
			if (symbol == 0)
			{
				encoder.Range = newBound;
				Prob += (kBitModelTotal - Prob) >> kNumMoveBits;
			}
			else
			{
				encoder.Low += newBound;
				encoder.Range -= newBound;
				Prob -= (Prob) >> kNumMoveBits;
			}
			if (encoder.Range < Encoder.kTopValue)
			{
				encoder.Range <<= 8;
				encoder.ShiftLow();
			}
		}
コード例 #5
0
		public static void ReverseEncode(BitEncoder[] Models, UInt32 startIndex,
			Encoder rangeEncoder, int NumBitLevels, UInt32 symbol)
		{
			UInt32 m = 1;
			for (int i = 0; i < NumBitLevels; i++)
			{
				UInt32 bit = symbol & 1;
				Models[startIndex + m].Encode(rangeEncoder, bit);
				m = (m << 1) | bit;
				symbol >>= 1;
			}
		}
コード例 #6
0
ファイル: LzmaEncoder.cs プロジェクト: proxymoron/Sulakore
 public void EncodeMatched(Encoder rangeEncoder, byte matchByte, byte symbol)
 {
     uint context = 1;
     bool same = true;
     for (int i = 7; i >= 0; i--)
     {
         uint bit = (uint)((symbol >> i) & 1);
         uint state = context;
         if (same)
         {
             uint matchBit = (uint)((matchByte >> i) & 1);
             state += ((1 + matchBit) << 8);
             same = (matchBit == bit);
         }
         m_Encoders[state].Encode(rangeEncoder, bit);
         context = (context << 1) | bit;
     }
 }
コード例 #7
0
ファイル: LzmaEncoder.cs プロジェクト: proxymoron/Sulakore
 public new void Encode(Encoder rangeEncoder, uint symbol, uint posState)
 {
     base.Encode(rangeEncoder, symbol, posState);
     if (--_counters[posState] == 0)
         UpdateTable(posState);
 }
コード例 #8
0
ファイル: LzmaEncoder.cs プロジェクト: proxymoron/Sulakore
 public void Encode(Encoder rangeEncoder, uint symbol, uint posState)
 {
     if (symbol < LZMABase.kNumLowLenSymbols)
     {
         _choice.Encode(rangeEncoder, 0);
         _lowCoder[posState].Encode(rangeEncoder, symbol);
     }
     else
     {
         symbol -= LZMABase.kNumLowLenSymbols;
         _choice.Encode(rangeEncoder, 1);
         if (symbol < LZMABase.kNumMidLenSymbols)
         {
             _choice2.Encode(rangeEncoder, 0);
             _midCoder[posState].Encode(rangeEncoder, symbol);
         }
         else
         {
             _choice2.Encode(rangeEncoder, 1);
             _highCoder.Encode(rangeEncoder, symbol - LZMABase.kNumMidLenSymbols);
         }
     }
 }