Frapper  1.0a
fsstream.h
Go to the documentation of this file.
1 #ifndef FSSTREAM_H
2 #define FSSTREAM_H
3 
4 #include <QDataStream>
5 #include <QTextStream>
6 #include <QByteArray>
7 #include <vector>
8 
9 #include <OgreQuaternion.h>
10 #include <OgreVector3.h>
11 
12 namespace fs {
13 
16 {
17 public:
19  double m_timestamp;
20 
23 
25  Ogre::Quaternion m_headRotation;
26  Ogre::Vector3 m_headTranslation;
27 
33 
35  std::vector<float> m_coeffs;
36 
38  std::vector< Ogre::Vector3 > m_markers;
39 
41  bool operator==(const fsTrackingData & other);
42 
43 public:
44 
45 };
46 
47 
48 
50 class fsDataStream : public QDataStream
51 {
52 public:
53  fsDataStream( QByteArray * data, QIODevice::OpenMode mode ):QDataStream(data,mode) {
54  setVersion( QDataStream::Qt_4_5 ); // minimum Qt_4_5 stream
55  setByteOrder(QDataStream::LittleEndian); // little endian encoding
56  }
57  fsDataStream( const QByteArray & data):QDataStream(data) {
58  setVersion( QDataStream::Qt_4_5 ); // minimum Qt_4_5 stream
59  setByteOrder(QDataStream::LittleEndian); // little endian encoding
60  }
61  virtual ~fsDataStream() {}
62 };
63 
65 class fsTextStream : public QTextStream
66 {
67 public:
68  fsTextStream( QByteArray * data, QIODevice::OpenMode mode ):QTextStream(data,mode){}
69  fsTextStream( const QByteArray & data ):QTextStream(data){}
70  virtual ~fsTextStream() {}
71 };
72 
73 
76 {
77 public:
78  fsDataBlock();
79  fsDataBlock( quint16 blockID, quint16 version, const QByteArray & data );
80 
82  QByteArray encode();
83 
85  bool decode( const QByteArray & data );
86 
88  static bool headerAvailable( const QByteArray & data );
89 
91  static bool blockAvailable( const QByteArray & data );
92 
94  static quint16 nextBlockID( const QByteArray & data );
95 
96  quint32 getTotalSize() { return m_data.size() + 2*sizeof(quint16) + sizeof(quint32); }
97  quint32 getBlockSize() { return m_data.size(); }
98 
99  quint16 m_blockID;
100  quint16 m_version;
101  QByteArray m_data;
102 };
103 
104 
114 public:
116  void clear() { m_data.clear(); }
117 
119  void append(const QByteArray & data) { m_data.append( data ); }
120 
122  void encode(const fsTrackingData & _trackingData);
123 
128  bool decode( fsTrackingData & _trackingData, bool _removeDataAfterDecoding = true );
129 
131  const QByteArray & getData() { return m_data; }
132 
134  bool isValid() const { return m_valid; }
135 
136 private:
138  QByteArray encodeInfo(const fsTrackingData & _trackingData);
139  QByteArray encodePose(const fsTrackingData & _trackingData);
140  QByteArray encodeBlendshapes(const fsTrackingData & _trackingData);
141  QByteArray encodeEyeGaze(const fsTrackingData & _trackingData);
142  QByteArray encodeMarkers(const fsTrackingData & _trackingData);
143 
145  void decodeInfo(fsTrackingData & _trackingData,const QByteArray & data);
146  void decodePose(fsTrackingData & _trackingData,const QByteArray & data);
147  void decodeBlendshapes(fsTrackingData & _trackingData,const QByteArray & data);
148  void decodeEyeGaze(fsTrackingData & _trackingData,const QByteArray & data);
149  void decodeMarkers(fsTrackingData & _trackingData,const QByteArray & data);
150 
152  QByteArray m_data;
153 
155  bool m_valid;
156 };
157 
158 
159 
169 public:
171  void clear() { m_data.clear(); }
172 
174  void append(const QByteArray & data) { m_data.append( data ); }
175 
177  void encode(const fsTrackingData & _trackingData);
178 
183  bool decode( fsTrackingData & _trackingData, bool _removeDataAfterDecoding = true );
184 
186  const QByteArray & getData() { return m_data; }
187 
189  bool isValid() const { return m_valid; }
190 
191 private:
193  QByteArray encodeInfo(const fsTrackingData & _trackingData);
194  QByteArray encodePose(const fsTrackingData & _trackingData);
195  QByteArray encodeBlendshapes(const fsTrackingData & _trackingData);
196  QByteArray encodeEyeGaze(const fsTrackingData & _trackingData);
197  QByteArray encodeMarkers(const fsTrackingData & _trackingData);
198 
200  void decodeInfo(fsTrackingData & _trackingData, fs::fsTextStream & stream);
201  void decodePose(fsTrackingData & _trackingData, fs::fsTextStream & stream);
202  void decodeBlendshapes(fsTrackingData & _trackingData, fs::fsTextStream & stream);
203  void decodeEyeGaze(fsTrackingData & _trackingData, fs::fsTextStream & stream);
204  void decodeMarkers(fsTrackingData & _trackingData, fs::fsTextStream & stream);
205 
207  QByteArray m_data;
208 
210  bool m_valid;
211 };
212 
213 }
214 
215 #endif // FSSTREAM_H
216