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

pixels_l2() public static method

public static pixels_l2 ( int opcode, int size, byte dst_base, int dst_offset, byte src1_base, int src1_offset, byte src2_base, int src2_offset, int dst_stride, int src_stride1, int src_stride2, int h ) : void
opcode int
size int
dst_base byte
dst_offset int
src1_base byte
src1_offset int
src2_base byte
src2_offset int
dst_stride int
src_stride1 int
src_stride2 int
h int
return void
        public static void pixels_l2(int opcode, int size, byte[] dst_base, int dst_offset
            , byte[] src1_base, int src1_offset,
            byte[] src2_base, int src2_offset,
            int dst_stride,
            int src_stride1, int src_stride2, int h)
        {
            int i;

            if (size == 8)
            {
                for (i = 0; i < h; i++)
                {
                    long a, b, c;
                    //a= AV_RN32(&src1[i*src_stride1  ]);
                    //b= AV_RN32(&src2[i*src_stride2  ]);
                    a = ((long)src1_base[src1_offset + i * src_stride1] << 0) | ((long)src1_base[src1_offset + i * src_stride1 + 1] << 8) | ((long)src1_base[src1_offset + i * src_stride1 + 2] << 16) | ((long)src1_base[src1_offset + i * src_stride1 + 3] << 24);
                    b = ((long)src2_base[src2_offset + i * src_stride2] << 0) | ((long)src2_base[src2_offset + i * src_stride2 + 1] << 8) | ((long)src2_base[src2_offset + i * src_stride2 + 2] << 16) | ((long)src2_base[src2_offset + i * src_stride2 + 3] << 24);
                    c = ((long)dst_base[dst_offset + i * dst_stride] << 0) | ((long)dst_base[dst_offset + i * dst_stride + 1] << 8) | ((long)dst_base[dst_offset + i * dst_stride + 2] << 16) | ((long)dst_base[dst_offset + i * dst_stride + 3] << 24);
                    if (opcode == 0) // PUT
                        c = rnd_avg32(a, b);

                    else // AVG
                        c = rnd_avg32(c, rnd_avg32(a, b));

                    dst_base[dst_offset + i * dst_stride] = (byte)(c & 0x000000ffL);
                    dst_base[dst_offset + i * dst_stride + 1] = (byte)(((ulong)(c & 0x0000ff00L)) >> 8);
                    dst_base[dst_offset + i * dst_stride + 2] = (byte)(((ulong)(c & 0x00ff0000L)) >> 16);
                    dst_base[dst_offset + i * dst_stride + 3] = (byte)(((ulong)(c & 0xff000000L)) >> 24);
                    //a= AV_RN32(&src1[i*src_stride1+4]);
                    //b= AV_RN32(&src2[i*src_stride2+4]);
                    a = ((long)src1_base[4 + src1_offset + i * src_stride1] << 0) | ((long)src1_base[4 + src1_offset + i * src_stride1 + 1] << 8) | ((long)src1_base[4 + src1_offset + i * src_stride1 + 2] << 16) | ((long)src1_base[4 + src1_offset + i * src_stride1 + 3] << 24);
                    b = ((long)src2_base[4 + src2_offset + i * src_stride2] << 0) | ((long)src2_base[4 + src2_offset + i * src_stride2 + 1] << 8) | ((long)src2_base[4 + src2_offset + i * src_stride2 + 2] << 16) | ((long)src2_base[4 + src2_offset + i * src_stride2 + 3] << 24);
                    c = ((long)dst_base[4 + dst_offset + i * dst_stride] << 0) | ((long)dst_base[4 + dst_offset + i * dst_stride + 1] << 8) | ((long)dst_base[4 + dst_offset + i * dst_stride + 2] << 16) | ((long)dst_base[4 + dst_offset + i * dst_stride + 3] << 24);
                    if (opcode == 0) // PUT
                        c = rnd_avg32(a, b);
                    else // AVG
                        c = rnd_avg32(c, rnd_avg32(a, b));

                    dst_base[4 + dst_offset + i * dst_stride] = (byte)(c & 0x000000ffL);
                    dst_base[4 + dst_offset + i * dst_stride + 1] = (byte)(((ulong)(c & 0x0000ff00L)) >> 8);
                    dst_base[4 + dst_offset + i * dst_stride + 2] = (byte)(((ulong)(c & 0x00ff0000L)) >> 16);
                    dst_base[4 + dst_offset + i * dst_stride + 3] = (byte)(((ulong)(c & 0xff000000L)) >> 24);
                } // for
            } // if
            else if (size == 4)
            {
                for (i = 0; i < h; i++)
                {
                    long a, b, c;
                    //a= AV_RN32(&src1[i*src_stride1  ]);
                    //b= AV_RN32(&src2[i*src_stride2  ]);
                    a = (src1_base[src1_offset + i * src_stride1] << 0) | (src1_base[src1_offset + i * src_stride1 + 1] << 8) | (src1_base[src1_offset + i * src_stride1 + 2] << 16) | (src1_base[src1_offset + i * src_stride1 + 3] << 24);
                    b = (src2_base[src2_offset + i * src_stride2] << 0) | (src2_base[src2_offset + i * src_stride2 + 1] << 8) | (src2_base[src2_offset + i * src_stride2 + 2] << 16) | (src2_base[src2_offset + i * src_stride2 + 3] << 24);
                    c = (dst_base[dst_offset + i * dst_stride] << 0) | (dst_base[dst_offset + i * dst_stride + 1] << 8) | (dst_base[dst_offset + i * dst_stride + 2] << 16) | (dst_base[dst_offset + i * dst_stride + 3] << 24);
                    if (opcode == 0) // PUT
                        c = rnd_avg32(a, b);
                    else // AVG
                        c = rnd_avg32(c, rnd_avg32(a, b));
                    dst_base[dst_offset + i * dst_stride] = (byte)(c & 0x000000ffL);
                    dst_base[dst_offset + i * dst_stride + 1] = (byte)(((ulong)(c & 0x0000ff00L)) >> 8);
                    dst_base[dst_offset + i * dst_stride + 2] = (byte)(((ulong)(c & 0x00ff0000L)) >> 16);
                    dst_base[dst_offset + i * dst_stride + 3] = (byte)(((ulong)(c & 0xff000000L)) >> 24);
                }
            } // if
            else if (size == 2)
            {
                for (i = 0; i < h; i++)
                {
                    long a, b, c;
                    //a= AV_RN16(&src1[i*src_stride1  ]);
                    //b= AV_RN16(&src2[i*src_stride2  ]);
                    a = (src1_base[src1_offset + i * src_stride1] << 0) | (src1_base[src1_offset + i * src_stride1 + 1] << 8);
                    b = (src2_base[src2_offset + i * src_stride2] << 0) | (src2_base[src2_offset + i * src_stride2 + 1] << 8);
                    c = (dst_base[dst_offset + i * dst_stride] << 0) | (dst_base[dst_offset + i * dst_stride + 1] << 8);
                    if (opcode == 0) // PUT
                        c = rnd_avg32(a, b);
                    else // AVG
                        c = rnd_avg32(c, rnd_avg32(a, b));
                    dst_base[dst_offset + i * dst_stride] = (byte)(c & 0x000000ffL);
                    dst_base[dst_offset + i * dst_stride + 1] = (byte)(((ulong)(c & 0x0000ff00L)) >> 8);
                }
            } // if
            else if (size == 16)
            {
                pixels_l2(opcode, 8, dst_base, dst_offset, src1_base, src1_offset, src2_base, src2_offset, dst_stride, src_stride1, src_stride2, h);
                pixels_l2(opcode, 8, dst_base, dst_offset + 8, src1_base, src1_offset + 8, src2_base, src2_offset + 8, dst_stride, src_stride1, src_stride2, h);
            } // if
        }