public void Encode(BinaryCoder enc, uint value) { ++value; int magnitude = 0; while (value >= (2u << magnitude)) { ++magnitude; } m_magnitude.Encode(enc, magnitude); uint mask = (uint)(magnitude == 0 ? 1u << (magnitude - 1) : 0); if (mask != 0) { int top = (magnitude < MAX_TOP) ? magnitude : MAX_TOP; m_bitPositions[top].Encode(enc, ((value & mask) != 0) ? 1:0); mask >>= 1; while (mask != 0) { int bit = (value & mask) != 0 ? 1 : 0; enc.Encode(bit, CoderConstants.PROB_MAX / 2); mask >>= 1; } } }
public void Encode(BinaryCoder enc, int bit) { enc.Encode(bit, m_prob); Adapt(bit); }