14 #if defined(__GNUC__) // GCC compiler
15 # pragma GCC diagnostic push // Save warning levels for later restoration
16 # pragma GCC diagnostic ignored "-Wpragmas"
17 # pragma GCC diagnostic ignored "-Wsign-conversion"
18 # pragma GCC diagnostic ignored "-Wold-style-cast"
19 # pragma GCC diagnostic ignored "-Wdeprecated-copy"
20 # pragma GCC diagnostic ignored "-Wshadow"
21 # pragma GCC diagnostic ignored "-Wparentheses"
22 # pragma GCC diagnostic ignored "-Wcast-align"
23 # pragma GCC diagnostic ignored "-Wstrict-overflow"
24 # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
30 #if defined(__GNUC__) // GCC compiler
31 # pragma GCC diagnostic pop // Restore previous warning levels
45 , m_distanceByteDepth(0)
46 , m_intensityByteDepth(0)
47 , m_confidenceByteDepth(0)
48 , m_angleFirstScanPoint(0)
49 , m_angularResolution(0)
51 , m_numCartesianValues(0)
71 std::istringstream ss(xmlString);
78 std::cout <<
"Reading XML tree in BLOB failed." << std::endl;
101 dataStreamTree.
get_child(
"CameraToWorldTransform"))
129 const auto distanceDecimalExponent = dataStreamTree.
get<
int>(
"Distance.<xmlattr>.decimalexponent", 0);
130 m_scaleZ = powf(10.0
f,
static_cast<float>(distanceDecimalExponent));
134 dataSetsTree.
get_child(
"DataSetPolar2D.FormatDescription.DataStream.<xmlattr>.datalength",
empty_ptree())
141 dataSetsTree.
get_child(
"DataSetCartesian.FormatDescriptionCartesian.DataStream",
empty_ptree());
142 if (
"uint32" != dataStreamTree.
get<std::string>(
"Length",
"")
143 ||
"float32" != dataStreamTree.
get<std::string>(
"X",
"")
144 ||
"float32" != dataStreamTree.
get<std::string>(
"Y",
"")
145 ||
"float32" != dataStreamTree.
get<std::string>(
"Z",
"")
146 ||
"float32" != dataStreamTree.
get<std::string>(
"Intensity",
""))
148 std::cout <<
"DataSet Cartesian does not contain the expected format. Won't be used" << std::endl;
152 assert(
sizeof(
float) == 4);
162 std::cout << __FUNCTION__ <<
": Invalid image size" << std::endl;
165 size_t dataSetslength = 0;
166 auto remainingSize = size;
175 const size_t headerSize = 4u + 8u + 2u;
176 if (remainingSize < headerSize)
178 std::cout <<
"Malformed data. Did not receive enough data to parse header of binary segment" << std::endl;
181 remainingSize -= headerSize;
186 const auto length = readUnalignLittleEndian<uint32_t>(&*itBuf);
188 if (dataSetslength > size)
190 std::cout <<
"Malformed data, length in depth map header does not match package size." << std::endl;
193 itBuf +=
sizeof(uint32_t);
196 itBuf +=
sizeof(uint64_t);
198 const auto version = readUnalignLittleEndian<uint16_t>(&*itBuf);
199 itBuf +=
sizeof(uint16_t);
205 const size_t extendedHeaderSize = 4u + 1u + 1u;
206 if (remainingSize < extendedHeaderSize)
208 std::cout <<
"Malformed data. Did not receive enough Data to parse extended header of binary segment"
212 remainingSize -= extendedHeaderSize;
214 m_frameNum = readUnalignLittleEndian<uint32_t>(&*itBuf);
215 itBuf +=
sizeof(uint32_t);
218 itBuf +=
sizeof(uint8_t);
221 itBuf +=
sizeof(uint8_t);
230 const auto imageSetSize = (numBytesDistance + numBytesIntensity + numBytesConfidence);
231 if (remainingSize < imageSetSize)
233 std::cout <<
"Malformed data. Did not receive enough Data to parse images of binary Segment" << std::endl;
236 remainingSize -= imageSetSize;
239 std::advance(itBuf, numBytesDistance);
243 std::advance(itBuf, numBytesIntensity);
247 std::advance(itBuf, numBytesConfidence);
249 const auto footerSize = (4u + 4u);
250 if (remainingSize < footerSize)
252 std::cout <<
"Malformed data. Did not receive enough Data to parse images of binary Segment" << std::endl;
259 itBuf +=
sizeof(uint32_t);
261 const auto lengthCopy = readUnalignLittleEndian<uint32_t>(&*itBuf);
262 itBuf +=
sizeof(uint32_t);
266 std::cout <<
"Malformed data, length in header does not match package size." << std::endl;
279 const auto length = readUnalignLittleEndian<uint32_t>(&*itBuf);
281 if (dataSetslength > size)
283 std::cout <<
"Malformed data, length in polar scan header does not match package size." << std::endl;
286 itBuf +=
sizeof(uint32_t);
288 itBuf +=
sizeof(uint64_t);
291 itBuf +=
sizeof(uint16_t);
293 itBuf +=
sizeof(uint32_t);
295 itBuf +=
sizeof(uint32_t);
297 itBuf +=
sizeof(float);
299 itBuf +=
sizeof(float);
302 itBuf +=
sizeof(float);
304 itBuf +=
sizeof(float);
306 itBuf +=
sizeof(float);
308 itBuf +=
sizeof(float);
316 itBuf +=
sizeof(float);
318 itBuf +=
sizeof(float);
320 itBuf +=
sizeof(float);
322 itBuf +=
sizeof(float);
331 itBuf +=
sizeof(uint32_t);
333 const auto lengthCopy = readUnalignLittleEndian<uint32_t>(&*itBuf);
334 itBuf +=
sizeof(uint32_t);
338 std::cout <<
"Malformed data, length in header does not match package size." << std::endl;
351 const auto length = readUnalignLittleEndian<uint32_t>(&*itBuf);
353 if (dataSetslength > size)
355 std::cout <<
"Malformed data, length in cartesian header does not match package size." << std::endl;
358 itBuf +=
sizeof(uint32_t);
360 itBuf +=
sizeof(uint64_t);
362 itBuf +=
sizeof(uint16_t);
365 itBuf +=
sizeof(uint32_t);
374 itBuf +=
sizeof(uint32_t);
376 const auto lengthCopy = readUnalignLittleEndian<uint32_t>(&*itBuf);
377 itBuf +=
sizeof(uint32_t);
381 std::cout <<
"Malformed data, length in header does not match package size." << std::endl;