public void ReceiveFrame() { lFrameRGB.Clear(); lFrameVerts.Clear(); lBodies.Clear(); int nToRead; byte[] buffer = new byte[1024]; while (oSocket.Available == 0) { if (!SocketConnected()) return; } oSocket.Receive(buffer, 4, SocketFlags.None); //string result = System.Text.Encoding.UTF8.GetString(buffer); //n_to_read = Int32.Parse(result); nToRead = BitConverter.ToInt32(buffer, 0); if (nToRead == -1) { bNoMoreStoredFrames = true; return; } buffer = new byte[nToRead]; int nAlreadyRead = 0; while (nAlreadyRead != nToRead) { while (oSocket.Available == 0) { if (!SocketConnected()) return; } nAlreadyRead += oSocket.Receive(buffer, nAlreadyRead, nToRead - nAlreadyRead, SocketFlags.None); } //Receive depth and color data int startIdx = 0; int n_vertices = BitConverter.ToInt32(buffer, startIdx); startIdx += 4; for (int i = 0; i < n_vertices; i++) { for (int j = 0; j < 3; j++) { lFrameRGB.Add(buffer[startIdx++]); } for (int j = 0; j < 3; j++) { lFrameVerts.Add(BitConverter.ToSingle(buffer, startIdx)); startIdx += 4; } } //Receive body data int nBodies = BitConverter.ToInt32(buffer, startIdx); startIdx += 4; for (int i = 0; i < nBodies; i++) { Body tempBody = new Body(); tempBody.bTracked = BitConverter.ToBoolean(buffer, startIdx++); int nJoints = BitConverter.ToInt32(buffer, startIdx); startIdx += 4; tempBody.lJoints = new List<Joint>(nJoints); tempBody.lJointsInColorSpace = new List<Point2f>(nJoints); for (int j = 0; j < nJoints; j++) { Joint tempJoint = new Joint(); Point2f tempPoint = new Point2f(); tempJoint.jointType = (JointType)BitConverter.ToInt32(buffer, startIdx); startIdx += 4; tempJoint.trackingState = (TrackingState)BitConverter.ToInt32(buffer, startIdx); startIdx += 4; tempJoint.position.X = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempJoint.position.Y = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempJoint.position.Z = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempPoint.X = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempPoint.Y = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempBody.lJoints.Add(tempJoint); tempBody.lJointsInColorSpace.Add(tempPoint); } lBodies.Add(tempBody); } }
public void ReceiveFrame() { lFrameRGB.Clear(); lFrameVerts.Clear(); lBodies.Clear(); int nToRead; byte[] buffer = new byte[1024]; while (oSocket.Available == 0) { if (!SocketConnected()) { return; } } oSocket.Receive(buffer, 8, SocketFlags.None); nToRead = BitConverter.ToInt32(buffer, 0); int iCompressed = BitConverter.ToInt32(buffer, 4); if (nToRead == -1) { bNoMoreStoredFrames = true; return; } buffer = new byte[nToRead]; int nAlreadyRead = 0; while (nAlreadyRead != nToRead) { while (oSocket.Available == 0) { if (!SocketConnected()) { return; } } nAlreadyRead += oSocket.Receive(buffer, nAlreadyRead, nToRead - nAlreadyRead, SocketFlags.None); } if (iCompressed == 1) { buffer = ZSTDDecompressor.Decompress(buffer); } //Receive depth and color data int startIdx = 0; int n_vertices = BitConverter.ToInt32(buffer, startIdx); startIdx += 4; for (int i = 0; i < n_vertices; i++) { for (int j = 0; j < 3; j++) { lFrameRGB.Add(buffer[startIdx++]); } for (int j = 0; j < 3; j++) { float val = BitConverter.ToInt16(buffer, startIdx); //converting from milimeters to meters val /= 1000.0f; lFrameVerts.Add(val); startIdx += 2; } } //Receive body data int nBodies = BitConverter.ToInt32(buffer, startIdx); startIdx += 4; for (int i = 0; i < nBodies; i++) { Body tempBody = new Body(); tempBody.bTracked = BitConverter.ToBoolean(buffer, startIdx++); int nJoints = BitConverter.ToInt32(buffer, startIdx); startIdx += 4; tempBody.lJoints = new List <Joint>(nJoints); tempBody.lJointsInColorSpace = new List <Point2f>(nJoints); for (int j = 0; j < nJoints; j++) { Joint tempJoint = new Joint(); Point2f tempPoint = new Point2f(); tempJoint.jointType = (JointType)BitConverter.ToInt32(buffer, startIdx); startIdx += 4; tempJoint.trackingState = (TrackingState)BitConverter.ToInt32(buffer, startIdx); startIdx += 4; tempJoint.position.X = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempJoint.position.Y = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempJoint.position.Z = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempPoint.X = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempPoint.Y = BitConverter.ToSingle(buffer, startIdx); startIdx += 4; tempBody.lJoints.Add(tempJoint); tempBody.lJointsInColorSpace.Add(tempPoint); } lBodies.Add(tempBody); } }