public static void h264_qpel_h_lowpass(int opcode, int size, byte[] dst_base, int dst_offset, byte[] src_base, int src_offset, int dstStride, int srcStride)
{
switch (size)
{
case 2:
{
int h = 2;
var cm_base = H264DSPContext.ff_cropTbl;
var cm_offset = H264DSPContext.MAX_NEG_CROP;
int i;
for (i = 0; i < h; i++)
{
if (opcode == 0)
{ // PUT
dst_base[dst_offset + 0] = (byte)op_put(dst_base[dst_offset + 0], (src_base[src_offset + 0] + src_base[src_offset + 1]) * 20 - (src_base[src_offset + -1] + src_base[src_offset + 2]) * 5 + (src_base[src_offset + -2] + src_base[src_offset + 3]), cm_base, cm_offset);
dst_base[dst_offset + 1] = (byte)op_put(dst_base[dst_offset + 1], (src_base[src_offset + 1] + src_base[src_offset + 2]) * 20 - (src_base[src_offset + 0] + src_base[src_offset + 3]) * 5 + (src_base[src_offset + -1] + src_base[src_offset + 4]), cm_base, cm_offset);
dst_offset += dstStride;
}
else
{ // AVG
dst_base[dst_offset + 0] = (byte)op_avg(dst_base[dst_offset + 0], (src_base[src_offset + 0] + src_base[src_offset + 1]) * 20 - (src_base[src_offset + -1] + src_base[src_offset + 2]) * 5 + (src_base[src_offset + -2] + src_base[src_offset + 3]), cm_base, cm_offset);
dst_base[dst_offset + 1] = (byte)op_avg(dst_base[dst_offset + 1], (src_base[src_offset + 1] + src_base[src_offset + 2]) * 20 - (src_base[src_offset + 0] + src_base[src_offset + 3]) * 5 + (src_base[src_offset + -1] + src_base[src_offset + 4]), cm_base, cm_offset);
dst_offset += dstStride;
} // if
src_offset += srcStride;
}
} // case
break;
case 4:
{
int h = 4;
byte[] cm_base = H264DSPContext.ff_cropTbl;
int cm_offset = H264DSPContext.MAX_NEG_CROP;
int i;
// DebugTool.printDebugString("h264_qpel4_h_lowpass:\n");
for (i = 0; i < h; i++)
{
if (opcode == 0)
{ // PUT
dst_base[dst_offset + 0] = (byte)op_put(dst_base[dst_offset + 0], (src_base[src_offset + 0] + src_base[src_offset + 1]) * 20 - (src_base[src_offset + -1] + src_base[src_offset + 2]) * 5 + (src_base[src_offset + -2] + src_base[src_offset + 3]), cm_base, cm_offset);
dst_base[dst_offset + 1] = (byte)op_put(dst_base[dst_offset + 1], (src_base[src_offset + 1] + src_base[src_offset + 2]) * 20 - (src_base[src_offset + 0] + src_base[src_offset + 3]) * 5 + (src_base[src_offset + -1] + src_base[src_offset + 4]), cm_base, cm_offset);
dst_base[dst_offset + 2] = (byte)op_put(dst_base[dst_offset + 2], (src_base[src_offset + 2] + src_base[src_offset + 3]) * 20 - (src_base[src_offset + 1] + src_base[src_offset + 4]) * 5 + (src_base[src_offset + 0] + src_base[src_offset + 5]), cm_base, cm_offset);
dst_base[dst_offset + 3] = (byte)op_put(dst_base[dst_offset + 3], (src_base[src_offset + 3] + src_base[src_offset + 4]) * 20 - (src_base[src_offset + 2] + src_base[src_offset + 5]) * 5 + (src_base[src_offset + 1] + src_base[src_offset + 6]), cm_base, cm_offset);
}
else
{ // AVG
dst_base[dst_offset + 0] = (byte)op_avg(dst_base[dst_offset + 0], (src_base[src_offset + 0] + src_base[src_offset + 1]) * 20 - (src_base[src_offset + -1] + src_base[src_offset + 2]) * 5 + (src_base[src_offset + -2] + src_base[src_offset + 3]), cm_base, cm_offset);
dst_base[dst_offset + 1] = (byte)op_avg(dst_base[dst_offset + 1], (src_base[src_offset + 1] + src_base[src_offset + 2]) * 20 - (src_base[src_offset + 0] + src_base[src_offset + 3]) * 5 + (src_base[src_offset + -1] + src_base[src_offset + 4]), cm_base, cm_offset);
dst_base[dst_offset + 2] = (byte)op_avg(dst_base[dst_offset + 2], (src_base[src_offset + 2] + src_base[src_offset + 3]) * 20 - (src_base[src_offset + 1] + src_base[src_offset + 4]) * 5 + (src_base[src_offset + 0] + src_base[src_offset + 5]), cm_base, cm_offset);
dst_base[dst_offset + 3] = (byte)op_avg(dst_base[dst_offset + 3], (src_base[src_offset + 3] + src_base[src_offset + 4]) * 20 - (src_base[src_offset + 2] + src_base[src_offset + 5]) * 5 + (src_base[src_offset + 1] + src_base[src_offset + 6]), cm_base, cm_offset);
} // if
dst_offset += dstStride;
src_offset += srcStride;
}
} // case
break;
case 8:
{
int h = 8;
byte[] cm_base = H264DSPContext.ff_cropTbl;
int cm_offset = H264DSPContext.MAX_NEG_CROP;
int i;
// DebugTool.printDebugString("h264_qpel8_h_lowpass:\n");
for (i = 0; i < h; i++)
{
if (opcode == 0)
{ // PUT
dst_base[dst_offset + 0] = (byte)op_put(dst_base[dst_offset + 0], (src_base[src_offset + 0] + src_base[src_offset + 1]) * 20 - (src_base[src_offset + -1] + src_base[src_offset + 2]) * 5 + (src_base[src_offset + -2] + src_base[src_offset + 3]), cm_base, cm_offset);
dst_base[dst_offset + 1] = (byte)op_put(dst_base[dst_offset + 1], (src_base[src_offset + 1] + src_base[src_offset + 2]) * 20 - (src_base[src_offset + 0] + src_base[src_offset + 3]) * 5 + (src_base[src_offset + -1] + src_base[src_offset + 4]), cm_base, cm_offset);
dst_base[dst_offset + 2] = (byte)op_put(dst_base[dst_offset + 2], (src_base[src_offset + 2] + src_base[src_offset + 3]) * 20 - (src_base[src_offset + 1] + src_base[src_offset + 4]) * 5 + (src_base[src_offset + 0] + src_base[src_offset + 5]), cm_base, cm_offset);
dst_base[dst_offset + 3] = (byte)op_put(dst_base[dst_offset + 3], (src_base[src_offset + 3] + src_base[src_offset + 4]) * 20 - (src_base[src_offset + 2] + src_base[src_offset + 5]) * 5 + (src_base[src_offset + 1] + src_base[src_offset + 6]), cm_base, cm_offset);
dst_base[dst_offset + 4] = (byte)op_put(dst_base[dst_offset + 4], (src_base[src_offset + 4] + src_base[src_offset + 5]) * 20 - (src_base[src_offset + 3] + src_base[src_offset + 6]) * 5 + (src_base[src_offset + 2] + src_base[src_offset + 7]), cm_base, cm_offset);
dst_base[dst_offset + 5] = (byte)op_put(dst_base[dst_offset + 5], (src_base[src_offset + 5] + src_base[src_offset + 6]) * 20 - (src_base[src_offset + 4] + src_base[src_offset + 7]) * 5 + (src_base[src_offset + 3] + src_base[src_offset + 8]), cm_base, cm_offset);
dst_base[dst_offset + 6] = (byte)op_put(dst_base[dst_offset + 6], (src_base[src_offset + 6] + src_base[src_offset + 7]) * 20 - (src_base[src_offset + 5] + src_base[src_offset + 8]) * 5 + (src_base[src_offset + 4] + src_base[src_offset + 9]), cm_base, cm_offset);
dst_base[dst_offset + 7] = (byte)op_put(dst_base[dst_offset + 7], (src_base[src_offset + 7] + src_base[src_offset + 8]) * 20 - (src_base[src_offset + 6] + src_base[src_offset + 9]) * 5 + (src_base[src_offset + 5] + src_base[src_offset + 10]), cm_base, cm_offset);
}
else
{ // AVG
dst_base[dst_offset + 0] = (byte)op_avg(dst_base[dst_offset + 0], (src_base[src_offset + 0] + src_base[src_offset + 1]) * 20 - (src_base[src_offset + -1] + src_base[src_offset + 2]) * 5 + (src_base[src_offset + -2] + src_base[src_offset + 3]), cm_base, cm_offset);
dst_base[dst_offset + 1] = (byte)op_avg(dst_base[dst_offset + 1], (src_base[src_offset + 1] + src_base[src_offset + 2]) * 20 - (src_base[src_offset + 0] + src_base[src_offset + 3]) * 5 + (src_base[src_offset + -1] + src_base[src_offset + 4]), cm_base, cm_offset);
dst_base[dst_offset + 2] = (byte)op_avg(dst_base[dst_offset + 2], (src_base[src_offset + 2] + src_base[src_offset + 3]) * 20 - (src_base[src_offset + 1] + src_base[src_offset + 4]) * 5 + (src_base[src_offset + 0] + src_base[src_offset + 5]), cm_base, cm_offset);
dst_base[dst_offset + 3] = (byte)op_avg(dst_base[dst_offset + 3], (src_base[src_offset + 3] + src_base[src_offset + 4]) * 20 - (src_base[src_offset + 2] + src_base[src_offset + 5]) * 5 + (src_base[src_offset + 1] + src_base[src_offset + 6]), cm_base, cm_offset);
dst_base[dst_offset + 4] = (byte)op_avg(dst_base[dst_offset + 4], (src_base[src_offset + 4] + src_base[src_offset + 5]) * 20 - (src_base[src_offset + 3] + src_base[src_offset + 6]) * 5 + (src_base[src_offset + 2] + src_base[src_offset + 7]), cm_base, cm_offset);
dst_base[dst_offset + 5] = (byte)op_avg(dst_base[dst_offset + 5], (src_base[src_offset + 5] + src_base[src_offset + 6]) * 20 - (src_base[src_offset + 4] + src_base[src_offset + 7]) * 5 + (src_base[src_offset + 3] + src_base[src_offset + 8]), cm_base, cm_offset);
dst_base[dst_offset + 6] = (byte)op_avg(dst_base[dst_offset + 6], (src_base[src_offset + 6] + src_base[src_offset + 7]) * 20 - (src_base[src_offset + 5] + src_base[src_offset + 8]) * 5 + (src_base[src_offset + 4] + src_base[src_offset + 9]), cm_base, cm_offset);
dst_base[dst_offset + 7] = (byte)op_avg(dst_base[dst_offset + 7], (src_base[src_offset + 7] + src_base[src_offset + 8]) * 20 - (src_base[src_offset + 6] + src_base[src_offset + 9]) * 5 + (src_base[src_offset + 5] + src_base[src_offset + 10]), cm_base, cm_offset);
} // if
dst_offset += dstStride;
src_offset += srcStride;
}
} // case
break;
case 16:
{
h264_qpel_h_lowpass(opcode, 8, dst_base, dst_offset, src_base, src_offset, dstStride, srcStride);
h264_qpel_h_lowpass(opcode, 8, dst_base, dst_offset + 8, src_base, src_offset + 8, dstStride, srcStride);
src_offset += 8 * srcStride;
dst_offset += 8 * dstStride;
h264_qpel_h_lowpass(opcode, 8, dst_base, dst_offset, src_base, src_offset, dstStride, srcStride);
h264_qpel_h_lowpass(opcode, 8, dst_base, dst_offset + 8, src_base, src_offset + 8, dstStride, srcStride);
} // case
break;
} // switch
}