LibMultiSense
LibMultiSense Documentation
ImageMessage.hh
Go to the documentation of this file.
1 
37 #ifndef LibMultiSense_ImageMessage
38 #define LibMultiSense_ImageMessage
39 
40 #include <typeinfo>
41 #include <cmath>
42 
43 #include "utility/Portability.hh"
44 
45 namespace crl {
46 namespace multisense {
47 namespace details {
48 namespace wire {
49 
51 public:
52 
54 static CRL_CONSTEXPR VersionType VERSION = 3;
55 
56 #ifdef SENSORPOD_FIRMWARE
57  IdType id;
58  VersionType version;
59 #endif // SENSORPOD_FIRMWARE
60 
61  uint32_t source;
62  uint32_t bitsPerPixel;
63  int64_t frameId;
64  uint16_t width;
65  uint16_t height;
66  uint32_t exposure;
67  float gain;
68  uint32_t sourceExtended;
69 
71  :
72 #ifdef SENSORDPOD_FIRMWARE
73  id(ID),
74  version(VERSION),
75 #endif // SENSORPOD_FIRMWARE
76  source(0),
77  bitsPerPixel(0),
78  frameId(0),
79  width(0),
80  height(0),
81  exposure(0),
82  gain(0.0),
83  sourceExtended(0)
84  {};
85 };
86 
87 #ifndef SENSORPOD_FIRMWARE
88 
89 class Image : public ImageHeader {
90 public:
91 
92  void *dataP;
93 
94  //
95  // Constructors
96 
98  Image() : dataP(NULL) {};
99 
100  //
101  // Serialization routine
102 
103  template<class Archive>
104  void serialize(Archive& message,
105  const VersionType version)
106  {
107  message & source;
108  message & bitsPerPixel;
109  message & frameId;
110  message & width;
111  message & height;
112 
113  const uint32_t imageSize = static_cast<uint32_t> (std::ceil(((double) bitsPerPixel / 8.0) * width * height));
114 
115  if (typeid(Archive) == typeid(utility::BufferStreamWriter)) {
116 
117  message.write(dataP, imageSize);
118 
119  } else {
120 
121  dataP = message.peek();
122  message.seek(message.tell() + imageSize);
123  }
124 
125  if (version >= 2)
126  {
127  message & exposure;
128  message & gain;
129  }
130  else
131  {
132  exposure = 0;
133  gain = Default_Gain;
134  }
135 
136  if (version >= 3)
137  {
138  message & sourceExtended;
139  }
140  else
141  {
142  sourceExtended = 0;
143  }
144  }
145 };
146 
147 #endif // !SENSORPOD_FIRMWARE
148 
149 }}}} // namespaces
150 
151 #endif
crl::multisense::details::wire::Image
Definition: ImageMessage.hh:89
crl::multisense::details::wire::ImageHeader::ImageHeader
ImageHeader()
Definition: ImageMessage.hh:70
crl::multisense::details::wire::ImageHeader::gain
float gain
Definition: ImageMessage.hh:67
Portability.hh
WIRE_HEADER_ATTRIBS_
#define WIRE_HEADER_ATTRIBS_
Definition: Protocol.hh:65
CRL_CONSTEXPR
#define CRL_CONSTEXPR
Definition: Portability.hh:49
crl::multisense::details::wire::ImageHeader::exposure
uint32_t exposure
Definition: ImageMessage.hh:66
crl::multisense::details::wire::ImageHeader::frameId
int64_t frameId
Definition: ImageMessage.hh:63
crl::multisense::details::wire::Image::serialize
void serialize(Archive &message, const VersionType version)
Definition: ImageMessage.hh:104
crl
Definition: BufferStream.hh:51
crl::multisense::details::wire::ImageHeader::bitsPerPixel
uint32_t bitsPerPixel
Definition: ImageMessage.hh:62
crl::multisense::details::wire::ImageHeader::height
uint16_t height
Definition: ImageMessage.hh:65
crl::multisense::details::wire::VersionType
uint16_t VersionType
Definition: Protocol.hh:137
crl::multisense::details::utility::BufferStreamWriter
Definition: BufferStream.hh:259
crl::multisense::details::wire::ImageHeader::width
uint16_t width
Definition: ImageMessage.hh:64
crl::multisense::details::wire::ImageHeader::source
uint32_t source
Definition: ImageMessage.hh:61
crl::multisense::details::wire::Image::dataP
void * dataP
Definition: ImageMessage.hh:92
crl::multisense::details::wire::ID_DATA_IMAGE
static CRL_CONSTEXPR IdType ID_DATA_IMAGE
Definition: Protocol.hh:217
crl::multisense::details::utility::BufferStreamReader
Definition: BufferStream.hh:192
multisense
Definition: MultiSenseChannel.hh:44
crl::multisense::details::wire::Default_Gain
static CRL_CONSTEXPR float Default_Gain
Definition: Protocol.hh:335
crl::multisense::details::wire::ImageHeader::sourceExtended
uint32_t sourceExtended
Definition: ImageMessage.hh:68
crl::multisense::details::wire::ImageHeader
Definition: ImageMessage.hh:50
crl::multisense::details::wire::IdType
uint16_t IdType
Definition: Protocol.hh:136
crl::multisense::details::wire::Image::Image
Image(utility::BufferStreamReader &r, VersionType v)
Definition: ImageMessage.hh:97
crl::multisense::details::wire::Image::Image
Image()
Definition: ImageMessage.hh:98