DecodeUint() public method

public DecodeUint ( int cont, int val ) : int
cont int
val int
return int
Exemplo n.º 1
0
        private void DecodeLineGeneric(ref short[] c, Arithmetic a, int lineOffset,
				       int blockWidth, int qf, int qo)
        {
            int y = (lineOffset - offset)/(stride*frame.Width);
            int x = ((lineOffset)%(frame.Width))/stride;
            int parentLine = (y/2)*(2*frame.Width*stride);
            int parentOffset = (orient == 1 ? stride :
                        (orient == 2 ? stride*frame.Width :
                         stride*frame.Width + stride));
            for(int i = lineOffset; i < blockWidth + lineOffset; i += stride) {
                bool zparent = true, znhood = true;
                if(level > 0) {
                zparent = (c[parentLine + parentOffset+(x/2)*stride*2] == 0);
                }
                if(x > 0) znhood = (znhood && c[i-stride] == 0);
                if(y > 0) znhood = (znhood && c[i-stride*frame.Width] == 0);
                if(x > 0 && y > 0)
                znhood = (znhood && c[i-stride-stride*frame.Width] == 0);
                int cont = 0, sign = 0;
                if(zparent) {
                cont = (znhood ? Context.ZPZN_F1 : Context.ZPNN_F1);
                } else {
                cont = (znhood ? Context.NPZN_F1 : Context.NPNN_F1);
                }
                int v = a.DecodeUint(cont, Context.COEFF_DATA);
                if(orient == 1 && y > 0) {
                sign = c[i - frame.Width*stride];
                } else if(orient == 2 && x > 0) {
                sign = c[i - stride];
                }
                sign = (sign > 0 ? Context.SIGN_POS :
                    (sign < 0 ? Context.SIGN_NEG : Context.SIGN_ZERO));
                if(v > 0) {
                v = (v * qf + qo + 2) >> 2;
                v = (a.DecodeBool(sign) ? -v : v);
                }
                c[i] = (short)v;
                x++;
            }
        }