예제 #1
0
        /// <summary>
        /// 64B + 4B flag
        /// </summary>
        protected Matrix4x4?ReadTransformation(ReadBuffer reader)
        {
            var hasValue = reader.ReadInt32() == 1;

            // 4 * 4 * sizeof(float)
            int readOffset;

            reader.ReserveForReading(64, out readOffset);

            if (!hasValue)
            {
                return(null);
            }

            unsafe
            {
                var buffer = reader.GetBuffer();
                fixed(byte *bufferPtr = buffer)
                {
                    Matrix4x4 result;
                    byte *    resultMatrixPtr = (byte *)&result;

                    DataManipulation.Copy(bufferPtr + readOffset, resultMatrixPtr, 64);

                    return(result);
                }
            }
        }
예제 #2
0
        public override bool ReadData(ReadBuffer reader)
        {
            // TODO; validate status
            var operationStatus = (OperationStatus)reader.ReadInt32();
            var systemTime      = reader.ReadInt64();
            var dataLenght      = reader.ReadInt32();
            var bodyData        = new byte[dataLenght];

            int readOffset;

            reader.ReserveForReading(dataLenght, out readOffset);

            unsafe
            {
                var buffer = reader.GetBuffer();
                fixed(byte *bodyDataPtr = bodyData)
                fixed(byte *bufferPtr = buffer)
                {
                    DataManipulation.Copy(bufferPtr + readOffset, bodyDataPtr, (uint)dataLenght);
                }
            }
            BodyFrame = BodyFrame.Parse(bodyData, TimeSpan.FromTicks(systemTime));

            return(true);
        }
예제 #3
0
        public override bool ReadData(ReadBuffer reader)
        {
            if (Bitmap == null)
            {
                // header + CI + transformation mx
                var status      = (OperationStatus)reader.ReadInt32();
                var pixelFormat = (BitmapPixelFormat)reader.ReadInt32();
                var width       = reader.ReadInt32();
                var height      = reader.ReadInt32();
                var bitmapSize  = reader.ReadInt32();

                Bitmap = new SoftwareBitmap(pixelFormat, width, height, BitmapAlphaMode.Ignore);

                CameraIntrinsics      = ReadCameraIntrinsics(reader);
                DepthToColorTransform = ReadTransformation(reader);

                return(false);
            }

            var operationStatus = (OperationStatus)reader.ReadInt32();

            // check?
            var offset     = reader.ReadInt32();
            var dataLength = reader.ReadInt32();

            int readOffset;

            reader.ReserveForReading(dataLength, out readOffset);

            uint bufferCapacity;

            using (var buffer = Bitmap.LockBuffer(BitmapBufferAccessMode.Write))
                using (var bufferRef = buffer.CreateReference())
                {
                    unsafe
                    {
                        byte *targetPtr;
                        ((IMemoryBufferByteAccess)bufferRef).GetBuffer(out targetPtr, out bufferCapacity);

                        targetPtr += _offset;
                        var readBuffer = reader.GetBuffer();
                        fixed(byte *readBufferPtr = readBuffer)
                        {
                            DataManipulation.Copy(readBufferPtr + readOffset, targetPtr, (uint)dataLength);
                            _offset += dataLength;
                        }
                    }
                }
            return(_offset == bufferCapacity);
        }
예제 #4
0
        public override bool ReadData(ReadBuffer reader)
        {
            if (Data == null)
            {
                // header
                var status   = (OperationStatus)reader.ReadInt32();
                var dataSize = reader.ReadInt32();

                Data = new byte[dataSize];
                return(false);
            }

            var operationStatus = (OperationStatus)reader.ReadInt32();

            // check?
            var offset     = reader.ReadInt32();
            var dataLength = reader.ReadInt32();

            int readOffset;

            reader.ReserveForReading(dataLength, out readOffset);

            unsafe
            {
                var data       = Data;
                var readBuffer = reader.GetBuffer();
                fixed(byte *readBufferPtr = readBuffer)
                fixed(byte *targetDataPtr = data)
                {
                    DataManipulation.Copy(readBufferPtr + readOffset, targetDataPtr + _offset, (uint)dataLength);
                    _offset += dataLength;
                }
            }

            return(_offset == Data.Length);
        }