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

h264_qpel_h_lowpass() public static method

public static h264_qpel_h_lowpass ( int opcode, int size, byte dst_base, int dst_offset, byte src_base, int src_offset, int dstStride, int srcStride ) : void
opcode int
size int
dst_base byte
dst_offset int
src_base byte
src_offset int
dstStride int
srcStride int
return void
        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
        }