/// <summary>
        /// Deserialize skeletal frame
        /// </summary>
        /// <param name="reader">Binary reader</param>
        /// <returns>Skeleton frame</returns>
        private SkeletonDataFrame DeserializeSkeletalFrame(BinaryReader reader)
        {
            if (reader.ReadInt32() == 0)
            {
                return(null);
            }

            SkeletonDataFrame frame = new SkeletonDataFrame();

            float value1 = reader.ReadSingle();
            float value2 = reader.ReadSingle();
            float value3 = reader.ReadSingle();
            float value4 = reader.ReadSingle();

            frame.FloorClipPlane = Tuple.Create(value1, value2, value3, value4);

            frame.FrameNumber = reader.ReadInt32();
            frame.Timestamp   = reader.ReadInt64();

            int numSkeletons = reader.ReadInt32();

            frame.SkeletonData = new kinect.Skeleton[numSkeletons];

            for (int i = 0; i < numSkeletons; i++)
            {
                frame.SkeletonData[i] = this.DeserializeSkeleton(reader);
            }

            return(frame);
        }
        /// <summary>
        /// Serialize skeletal frame
        /// </summary>
        /// <param name="frame">Skeletal Frame</param>
        /// <param name="writer">Binary Writer</param>
        private void SerializeSkeletalFrame(SkeletonDataFrame frame, BinaryWriter writer)
        {
            if (frame == null)
            {
                writer.Write(0);
                return;
            }

            writer.Write(1);
            writer.Write(frame.FloorClipPlane.Item1);
            writer.Write(frame.FloorClipPlane.Item2);
            writer.Write(frame.FloorClipPlane.Item3);
            writer.Write(frame.FloorClipPlane.Item4);

            writer.Write(frame.FrameNumber);
            writer.Write(frame.Timestamp);

            writer.Write(frame.SkeletonData.Length);

            for (int i = 0; i < frame.SkeletonData.Length; i++)
            {
                this.SerializeSkeleton(frame.SkeletonData[i], writer);
            }
        }