示例#1
0
 public Decoder(int sampleRate)
 {
     peakDetector  = new PeakDetector(this);
     bitDecoder    = new BitDecoder(this, sampleRate);
     symbolDecoder = new SymbolDecoder(this);
     Clear();
 }
示例#2
0
        public byte[] Decompress(byte[] input, int len)
        {
            for (int i = 0; i < SymbolProbabilities.Length; i++)
            {
                SymbolProbabilities[i].Init();
            }
            for (int i = 0; i < DistanceSizeProbabilities.Length; i++)
            {
                DistanceSizeProbabilities[i].Init();
            }

            Decoder = new BitDecoder(input);
            var output = new byte[len];

            output[0] = (byte)DecodeSymbol(0);
            for (int i = 1; i < len;)
            {
                int symbol = DecodeSymbol(output[i - 1]);
                if (symbol < 256)   // Literal
                {
                    output[i++] = (byte)symbol;
                }
                else     // Match
                {
                    int matchLen = symbol - 256;
                    int distance = DecodeDistance();
                    while (matchLen-- > 0)
                    {
                        byte data = output[i - distance];
                        output[i++] = data;
                    }
                }
            }
            return(output);
        }
示例#3
0
            public LenDecoder()
            {
                BitDecoder decoder = new BitDecoder();

                this.m_Choice = decoder;
                BitDecoder decoder2 = new BitDecoder();

                this.m_Choice2   = decoder2;
                this.m_LowCoder  = new BitTreeDecoder[0x10];
                this.m_MidCoder  = new BitTreeDecoder[0x10];
                this.m_HighCoder = new BitTreeDecoder(8);
            }
示例#4
0
 public static uint ReverseDecode(BitDecoder[] Models, UInt32 startIndex,
     RangeCoder.Decoder rangeDecoder, int NumBitLevels)
 {
     uint m = 1;
     uint symbol = 0;
     for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
     {
         uint bit = Models[startIndex + m].Decode(rangeDecoder);
         m <<= 1;
         m += bit;
         symbol |= (bit << bitIndex);
     }
     return symbol;
 }
示例#5
0
 public static uint ReverseDecode(BitDecoder[] models, uint startIndex,
                                  Decoder rangeDecoder, int numBitLevels)
 {
     uint m = 1;
     uint symbol = 0;
     for (var bitIndex = 0; bitIndex < numBitLevels; bitIndex++)
     {
         var bit = models[startIndex + m].Decode(rangeDecoder);
         m <<= 1;
         m += bit;
         symbol |= (bit << bitIndex);
     }
     return symbol;
 }
示例#6
0
 private static StringBuilder DoDecompress(string inputStream, DataEncoding encoding)
 {
     if ("" == inputStream)
     {
         return(null);
     }
     else
     {
         var result = new StringBuilder();
         if (null == inputStream)
         {
             return(result);
         }
         else
         {
             var decompressor = new Decompressor(result);
             var decoder      = new BitDecoder(inputStream, encoding);
             decompressor.Decompress(decoder);
             return(result);
         }
     }
 }