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
}