Ejemplo n.º 1
0
 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;
                    }
                }
Ejemplo n.º 3
0
        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;
            }
        }
Ejemplo n.º 4
0
        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;
            }
        }
Ejemplo n.º 5
0
        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;
                    }
                }
Ejemplo n.º 7
0
        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();
            }
        }