public static void pixels_c(int opcode, int size, byte[] dst_base, int dst_offset, byte[] src_base, int src_offset, int stride, int height)
{
//(uint8_t *dest,const uint8_t *ref, const int stride,int height)
switch (size)
{
case 2:
if (opcode == 0)
{ // PUT
for (int i = 0; i < height; i++)
{
Array.Copy(src_base, src_offset, dst_base, dst_offset, 2);
dst_offset += stride;
src_offset += stride;
} // for
}
else
{ // AVG
for (int i = 0; i < height; i++)
{
long a = (src_base[src_offset] << 0) | (src_base[src_offset + 1] << 8);
long b = (dst_base[dst_offset] << 0) | (dst_base[dst_offset + 1] << 8);
b = rnd_avg32(b, a);
dst_base[dst_offset] = (byte)(b & 0x000000ffL);
dst_base[dst_offset + 1] = (byte)(((ulong)(b & 0x0000ff00L)) >> 8);
dst_offset += stride;
src_offset += stride;
} // for
} // if
break;
case 4:
if (opcode == 0)
{ // PUT
for (int i = 0; i < height; i++)
{
Array.Copy(src_base, src_offset, dst_base, dst_offset, 4);
dst_offset += stride;
src_offset += stride;
} // for
}
else
{ // AVG
for (int i = 0; i < height; i++)
{
long a = (src_base[src_offset] << 0) | (src_base[src_offset + 1] << 8) | (src_base[src_offset + 2] << 16) | (src_base[src_offset + 3] << 24);
long b = (dst_base[dst_offset] << 0) | (dst_base[dst_offset + 1] << 8) | (dst_base[dst_offset + 2] << 16) | (dst_base[dst_offset + 3] << 24);
b = rnd_avg32(b, a);
dst_base[dst_offset] = (byte)(b & 0x000000ffL);
dst_base[dst_offset + 1] = (byte)(((ulong)(b & 0x0000ff00L)) >> 8);
dst_base[dst_offset + 2] = (byte)(((ulong)(b & 0x00ff0000L)) >> 16);
dst_base[dst_offset + 3] = (byte)(((ulong)(b & 0xff000000L)) >> 24);
dst_offset += stride;
src_offset += stride;
} // for
} // if
break;
case 8:
if (opcode == 0)
{ // PUT
for (int i = 0; i < height; i++)
{
//// DebugTool.printDebugString("Copy offset: "+(src_offset-8208)+"=>"+(dst_offset-8208)+"\n");
Array.Copy(src_base, src_offset, dst_base, dst_offset, 8);
dst_offset += stride;
src_offset += stride;
} // for
}
else
{ // AVG
for (int i = 0; i < height; i++)
{
long a = (src_base[src_offset] << 0) | (src_base[src_offset + 1] << 8) | (src_base[src_offset + 2] << 16) | (src_base[src_offset + 3] << 24);
long b = (dst_base[dst_offset] << 0) | (dst_base[dst_offset + 1] << 8) | (dst_base[dst_offset + 2] << 16) | (dst_base[dst_offset + 3] << 24);
b = rnd_avg32(b, a);
dst_base[dst_offset] = (byte)(b & 0x000000ff);
dst_base[dst_offset + 1] = (byte)(((ulong)(b & 0x0000ff00L)) >> 8);
dst_base[dst_offset + 2] = (byte)(((ulong)(b & 0x00ff0000L)) >> 16);
dst_base[dst_offset + 3] = (byte)(((ulong)(b & 0xff000000L)) >> 24);
a = (src_base[4 + src_offset] << 0) | (src_base[4 + src_offset + 1] << 8) | (src_base[4 + src_offset + 2] << 16) | (src_base[4 + src_offset + 3] << 24);
b = (dst_base[4 + dst_offset] << 0) | (dst_base[4 + dst_offset + 1] << 8) | (dst_base[4 + dst_offset + 2] << 16) | (dst_base[4 + dst_offset + 3] << 24);
b = rnd_avg32(b, a);
dst_base[4 + dst_offset] = (byte)(b & 0x000000ffL);
dst_base[4 + dst_offset + 1] = (byte)(((ulong)(b & 0x0000ff00L)) >> 8);
dst_base[4 + dst_offset + 2] = (byte)(((ulong)(b & 0x00ff0000L)) >> 16);
dst_base[4 + dst_offset + 3] = (byte)(((ulong)(b & 0xff000000L)) >> 24);
dst_offset += stride;
src_offset += stride;
} // for
} // if
break;
case 16:
{
pixels_c(opcode, 8, dst_base, dst_offset, src_base, src_offset, stride, height);
pixels_c(opcode, 8, dst_base, dst_offset + 8, src_base, src_offset + 8, stride, height);
break;
}
} // switch
}