public new void Encode(RangeCoder.Encoder rangeEncoder, uint symbol, uint posState) { base.Encode(rangeEncoder, symbol, posState); if (--_counters[posState] == 0) { UpdateTable(posState); } }
public void Encode(RangeCoder.Encoder rangeEncoder, byte symbol) { uint context = 1; for (int i = 7; i >= 0; i--) { uint bit = (uint)((symbol >> i) & 1); _encoders[context].Encode(rangeEncoder, bit); context = (context << 1) | bit; } }
public void ReverseEncode(RangeCoder.Encoder rangeEncoder, uint symbol) { uint m = 1; for (uint i = 0; i < NumBitLevels; i++) { uint bit = symbol & 1; Models[m].Encode(rangeEncoder, bit); m = (m << 1) | bit; symbol >>= 1; } }
public void Encode(RangeCoder.Encoder rangeEncoder, uint symbol) { uint m = 1; for (int bitIndex = NumBitLevels; bitIndex > 0;) { bitIndex--; uint bit = (symbol >> bitIndex) & 1; Models[m].Encode(rangeEncoder, bit); m = (m << 1) | bit; } }
public static void ReverseEncode(BitEncoder[] Models, uint startIndex, RangeCoder.Encoder rangeEncoder, int NumBitLevels, uint symbol) { uint m = 1; for (int i = 0; i < NumBitLevels; i++) { uint bit = symbol & 1; Models[startIndex + m].Encode(rangeEncoder, bit); m = (m << 1) | bit; symbol >>= 1; } }
public void EncodeMatched(RangeCoder.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); } _encoders[state].Encode(rangeEncoder, bit); context = (context << 1) | bit; } }
public void Encode(RangeCoder.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 < RangeCoder.Encoder.kTopValue) { encoder.Range <<= 8; encoder.ShiftLow(); } }