public override bool WriteData(WriteBuffer writer) { if (_init) { writer.Write((int)OperationCode.UserFrameTransfer); writer.Write((int)OperationStatus.PushInit); writer.Write(Data.Length); _init = false; return(false); } writer.Write((int)OperationCode.UserFrameTransfer); writer.Write((int)OperationStatus.Push); // just for check? writer.Write(_offset); // todo configurable chunks size support // account for 4 bytes taken by chunkSize info!! var dataChunkSize = Math.Min(Data.Length - _offset, writer.RemainingPacketWriteCapacity - 4); writer.Write(dataChunkSize); int writeOffset; writer.ReserveForWrite(dataChunkSize, out writeOffset); unsafe { var data = Data; var buffer = writer.GetBuffer(); fixed(byte *bufferPtr = buffer) fixed(byte *dataSourcePtr = data) { DataManipulation.Copy(dataSourcePtr + _offset, bufferPtr + writeOffset, (uint)dataChunkSize); } } _offset += dataChunkSize; return(_offset == Data.Length); }
/// <summary> /// 64B + 4B flag /// </summary> protected void WriteTransformation(WriteBuffer writer, Matrix4x4?transformation) { writer.Write(transformation.HasValue ? 1 : 0); // 4 * 4 * sizeof(float) int writeOffset; // todo: check for fail of reservation? writer.ReserveForWrite(64, out writeOffset); if (transformation.HasValue) { var transMatrix = transformation.Value; var buffer = writer.GetBuffer(); unsafe { fixed(byte *bufferPtr = buffer) { byte *transformationPtr = (byte *)&transMatrix; DataManipulation.Copy(transformationPtr, bufferPtr + writeOffset, 64); } } } }
public override bool WriteData(WriteBuffer writer) { // frame packet generic header writer.Write((int)OperationCode.BodyFrameTransfer); writer.Write((int)OperationStatus.PushInit); writer.Write(BodyFrame.SystemRelativeTime.Value.Ticks); writer.Write(BodyFrame.BinaryData.Length); int writeOffset; writer.ReserveForWrite(BodyFrame.BinaryData.Length, out writeOffset); unsafe { var buffer = writer.GetBuffer(); fixed(byte *bufferPtr = buffer) fixed(byte *sourceDataPtr = BodyFrame.BinaryData) { DataManipulation.Copy(sourceDataPtr, bufferPtr + writeOffset, (uint)BodyFrame.BinaryData.Length); } } return(true); }
public override bool WriteData(WriteBuffer writer) { if (_data == null) { using (var buffer = Bitmap.LockBuffer(BitmapBufferAccessMode.Read)) using (var bufferRef = buffer.CreateReference()) { unsafe { byte *bufferPtr; uint bufferCapacity; ((IMemoryBufferByteAccess)bufferRef).GetBuffer(out bufferPtr, out bufferCapacity); _data = new byte[bufferCapacity]; fixed(byte *dataPtr = _data) { DataManipulation.Copy(bufferPtr, dataPtr, bufferCapacity); } } } writer.Write((int)OperationCode.BodyIndexFrameTransfer); writer.Write((int)OperationStatus.PushInit); writer.Write((int)Bitmap.BitmapPixelFormat); writer.Write(Bitmap.PixelWidth); writer.Write(Bitmap.PixelHeight); writer.Write(_data.Length); // camera intrinsics WriteIntrinsics(writer, CameraIntrinsics); // todo write transformation WriteTransformation(writer, DepthToColorTransform); return(false); } writer.Write((int)OperationCode.BodyIndexFrameTransfer); writer.Write((int)OperationStatus.Push); // just for check? writer.Write(_offset); // todo configurable chunks size support var dataChunkSize = Math.Min(_data.Length - _offset, writer.RemainingPacketWriteCapacity - 4); writer.Write(dataChunkSize); // account for 4 bytes taken by chunkSize info!! int writeOffset; writer.ReserveForWrite(dataChunkSize, out writeOffset); unsafe { var buffer = writer.GetBuffer(); fixed(byte *bufferPtr = buffer) fixed(byte *dataSourcePtr = _data) { DataManipulation.Copy(dataSourcePtr + _offset, bufferPtr + writeOffset, (uint)dataChunkSize); } } _offset += dataChunkSize; return(_offset == _data.Length); }
public abstract bool WriteData(WriteBuffer writer);
public void WriteCommand(WriteBuffer writer) { writer.Write((int)OperationCode.CloseReader); writer.Write((int)Status); writer.Write((int)Type); }
public override bool WriteData(WriteBuffer writer) { if (_init) { // downsize? // Bitmap = Bitmap.Downsize(); // todo: handle different pixelformats _dataCapacity = Bitmap.PixelHeight * Bitmap.PixelWidth * 2; writer.Write((int)OperationCode.ColorFrameTransfer); writer.Write((int)OperationStatus.PushInit); writer.Write((int)Bitmap.BitmapPixelFormat); writer.Write(Bitmap.PixelWidth); writer.Write(Bitmap.PixelHeight); writer.Write(_dataCapacity); // camera intrinsics WriteIntrinsics(writer, CameraIntrinsics); // write transformation WriteTransformation(writer, ColorToDepthTransform); _init = false; return(false); } writer.Write((int)OperationCode.ColorFrameTransfer); writer.Write((int)OperationStatus.Push); // just for check? writer.Write(_offset); // todo configurable chunks size support // account for 4 bytes taken by chunkSize info!! var dataChunkSize = Math.Min(_dataCapacity - _offset, writer.RemainingPacketWriteCapacity - 4); writer.Write(dataChunkSize); int writeOffset; writer.ReserveForWrite(dataChunkSize, out writeOffset); unsafe { using (var bitBuffer = Bitmap.LockBuffer(BitmapBufferAccessMode.Read)) using (var bufferRef = bitBuffer.CreateReference()) { byte *dataSourcePtr; uint bufferCapacity; ((IMemoryBufferByteAccess)bufferRef).GetBuffer(out dataSourcePtr, out bufferCapacity); var buffer = writer.GetBuffer(); fixed(byte *bufferPtr = buffer) { DataManipulation.Copy(dataSourcePtr + _offset, bufferPtr + writeOffset, (uint)dataChunkSize); } } } _offset += dataChunkSize; return(_offset == _dataCapacity); }