cscodec.h264.decoder.DSPContext.put_h264_chroma_mc4_c C# (CSharp) Method

put_h264_chroma_mc4_c() public method

public put_h264_chroma_mc4_c ( byte dst_base, int dst_offset, byte src_base, int src_offset, int stride, int h, int x, int y ) : void
dst_base byte
dst_offset int
src_base byte
src_offset int
stride int
h int
x int
y int
return void
        public void put_h264_chroma_mc4_c(byte[] dst_base/*align 8*/, int dst_offset, byte[] src_base/*align 1*/, int src_offset, int stride, int h, int x, int y)
        {
            int A = (8 - x) * (8 - y);
            int B = (x) * (8 - y);
            int C = (8 - x) * (y);
            int D = (x) * (y);
            int i;

            ////assert(x<8 && y<8 && x>=0 && y>=0);

            if (D != 0)
            {
                for (i = 0; i < h; i++)
                {
                    dst_base[dst_offset + 0] = (byte)OP_PUT(dst_base[dst_offset + 0], (A * src_base[src_offset + 0] + B * src_base[src_offset + 1] + C * src_base[src_offset + stride + 0] + D * src_base[src_offset + stride + 1]));
                    dst_base[dst_offset + 1] = (byte)OP_PUT(dst_base[dst_offset + 1], (A * src_base[src_offset + 1] + B * src_base[src_offset + 2] + C * src_base[src_offset + stride + 1] + D * src_base[src_offset + stride + 2]));
                    dst_base[dst_offset + 2] = (byte)OP_PUT(dst_base[dst_offset + 2], (A * src_base[src_offset + 2] + B * src_base[src_offset + 3] + C * src_base[src_offset + stride + 2] + D * src_base[src_offset + stride + 3]));
                    dst_base[dst_offset + 3] = (byte)OP_PUT(dst_base[dst_offset + 3], (A * src_base[src_offset + 3] + B * src_base[src_offset + 4] + C * src_base[src_offset + stride + 3] + D * src_base[src_offset + stride + 4]));
                    dst_offset += stride;
                    src_offset += stride;
                }
            }
            else
            {
                int E = B + C;
                int step = (C != 0 ? stride : 1);
                for (i = 0; i < h; i++)
                {
                    dst_base[dst_offset + 0] = (byte)OP_PUT(dst_base[dst_offset + 0], (A * src_base[src_offset + 0] + E * src_base[src_offset + step + 0]));
                    dst_base[dst_offset + 1] = (byte)OP_PUT(dst_base[dst_offset + 1], (A * src_base[src_offset + 1] + E * src_base[src_offset + step + 1]));
                    dst_base[dst_offset + 2] = (byte)OP_PUT(dst_base[dst_offset + 2], (A * src_base[src_offset + 2] + E * src_base[src_offset + step + 2]));
                    dst_base[dst_offset + 3] = (byte)OP_PUT(dst_base[dst_offset + 3], (A * src_base[src_offset + 3] + E * src_base[src_offset + step + 3]));
                    dst_offset += stride;
                    src_offset += stride;
                }
            }
        }