Beispiel #1
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;
     }
 }
Beispiel #2
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;
     }
 }
Beispiel #3
0
        /*public void UpdateModel(uint symbol)
		{
			if (symbol == 0)
				Prob += (kBitModelTotal - Prob) >> kNumMoveBits;
			else
				Prob -= (Prob) >> kNumMoveBits;
		}*/

        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();
            }
        }
Beispiel #4
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;
     }
 }