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
56 std::istringstream ss(xmlString);
63 std::cout <<
"Reading XML tree in BLOB failed." << std::endl;
68 xmlTree.
get_child(
"SickRecord.DataSets.DataSetStereo.FormatDescriptionDepthMap.DataStream");
78 dataStreamTree.
get_child(
"CameraToWorldTransform"))
101 const auto distanceDecimalExponent = dataStreamTree.
get<
int>(
"Z.<xmlattr>.decimalexponent", 0);
102 m_scaleZ = powf(10.0
f,
static_cast<float>(distanceDecimalExponent));
111 std::cout << __FUNCTION__ <<
": Invalid Image size" << std::endl;
114 auto remainingSize = size;
116 const size_t numBytesZ = numPixel *
static_cast<size_t>(
m_zByteDepth);
117 const size_t numBytesRGBA = numPixel *
static_cast<size_t>(
m_rgbaByteDepth);
119 const size_t headerSize = 4u + 8u + 2u;
121 if (remainingSize < headerSize)
123 std::cout <<
"Malformed data. Did not receive enough data to parse header of binary segment" << std::endl;
126 remainingSize -= headerSize;
131 const auto length = readUnalignLittleEndian<uint32_t>(&*itBuf);
134 std::cout <<
"Malformed data, length in depth map header does not match package size." << std::endl;
138 itBuf +=
sizeof(uint32_t);
141 itBuf +=
sizeof(uint64_t);
143 const auto version = readUnalignLittleEndian<uint16_t>(&*itBuf);
144 itBuf +=
sizeof(uint16_t);
150 const size_t extendedHeaderSize = 4u + 1u + 1u;
151 if (remainingSize < extendedHeaderSize)
153 std::cout <<
"Malformed data. Did not receive enough data to parse extended header of binary segment"
157 remainingSize -= extendedHeaderSize;
159 m_frameNum = readUnalignLittleEndian<uint32_t>(&*itBuf);
160 itBuf +=
sizeof(uint32_t);
163 itBuf +=
sizeof(uint8_t);
166 itBuf +=
sizeof(uint8_t);
175 const auto imageSetSize = (numBytesZ + numBytesRGBA + numBytesConfidence);
176 if (remainingSize < imageSetSize)
178 std::cout <<
"Malformed data. Did not receive enough data to parse images of binary segment" << std::endl;
181 remainingSize -= imageSetSize;
184 std::advance(itBuf, numBytesZ);
188 std::advance(itBuf, numBytesRGBA);
192 std::advance(itBuf, numBytesConfidence);
194 const auto footerSize = (4u + 4u);
195 if (remainingSize < footerSize)
197 std::cout <<
"Malformed data. Did not receive enough data to parse images of binary segment" << std::endl;
204 itBuf +=
sizeof(uint32_t);
206 const auto lengthCopy = readUnalignLittleEndian<uint32_t>(&*itBuf);
207 itBuf +=
sizeof(uint32_t);
211 std::cout <<
"Malformed data, length in header does not match package size." << std::endl;