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

pixels_c() public static method

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