示例#1
0
文件: Decoder.cs 项目: Casidi/GARbro
 public Proba()
 {
     BandsPtr = new BandProbas[NumTypes][];
     for (int i = 0; i < NumTypes; ++i)
         BandsPtr[i] = new BandProbas[17];
 }
示例#2
0
文件: Decoder.cs 项目: Casidi/GARbro
 public void Reset()
 {
     for (int i = 0; i < Segments.Length; ++i)
         Segments[i] = 0xFF;
     for (int t = 0; t < NumTypes; ++t)
     for (int b = 0; b < NumBands; ++b)
     {
         Bands[t,b] = new BandProbas();
     }
 }
示例#3
0
文件: Decoder.cs 项目: Casidi/GARbro
        int GetCoeffs(BitReader br, BandProbas[] prob, int ctx, int[] dq, int n, short[] out_ptr, int dst)
        {
            var p = prob[n].Probas[ctx];
            for (; n < 16; ++n)
            {
                if (0 == br.GetBit (p[0]))
                    return n;  // previous coeff was last non-zero coeff

                while (0 == br.GetBit (p[1]))         // sequence of zero coeffs
                {
                    p = prob[++n].Probas[0];
                    if (16 == n) return 16;
                }
                // non zero coeff
                var p_ctx = prob[n + 1].Probas;
                int v;
                if (0 == br.GetBit (p[2]))
                {
                    v = 1;
                    p = p_ctx[1];
                }
                else
                {
                    v = br.GetLargeValue (p);
                    p = p_ctx[2];
                }
                out_ptr[dst+kZigzag[n]] = (short)(br.GetSigned (v) * dq[n > 0 ? 1 : 0]);
            }
            return 16;
        }