7 #ifndef IFM3D_DESERIALIZE_STRUCT_RGB_INFO_V1_HPP
8 #define IFM3D_DESERIALIZE_STRUCT_RGB_INFO_V1_HPP
10 #include <ifm3d/deserialize/deserialize_utils.hpp>
11 #include <ifm3d/deserialize/struct_calibration.hpp>
12 #include <ifm3d/device/device.h>
13 #include <ifm3d/device/err.h>
14 #include <ifm3d/fg/buffer.h>
15 #include <ifm3d/fg/organizer_utils.h>
21 constexpr
auto RGB_INFO_VERSION_INDEX = 0x0000;
22 constexpr
auto RGB_INFO_FRAME_COUNTER_INDEX = 0x0004;
23 constexpr
auto RGB_INFO_TIMESTAMPS_INDEX = 0x0008;
24 constexpr
auto RGB_INFO_EXPOSURE_TIMES_INDEX = 0x0010;
25 constexpr
auto RGB_INFO_EXTRINSIC_OPTICAL_TO_USER_INDEX = 0x0014;
26 constexpr
auto RGB_INFO_INTRINSIC_CALIBRATION_INDEX = 0x002C;
27 constexpr
auto RGB_INFO_INVERSE_INTRINSIC_CALIBRATION_INDEX = 0x00B0;
35 using Ptr = std::shared_ptr<RGBInfoV1>;
38 IsValid(
const uint8_t* data,
size_t size)
40 auto version = mkval<std::uint32_t>(data + RGB_INFO_VERSION_INDEX);
42 return size >= RGB_INFO_V1_SIZE && version >= 1;
46 Read(
const uint8_t* data,
size_t size)
48 if (!IsValid(data, size))
52 const uint8_t* start_ptr = data;
53 version = mkval<std::uint32_t>(start_ptr + RGB_INFO_VERSION_INDEX);
55 mkval<std::uint32_t>(start_ptr + RGB_INFO_FRAME_COUNTER_INDEX);
57 mkval<std::uint64_t>(start_ptr + RGB_INFO_TIMESTAMPS_INDEX);
58 exposure_time = mkval<float>(start_ptr + RGB_INFO_EXPOSURE_TIMES_INDEX);
59 extrinsic_optic_to_user.Read(start_ptr +
60 RGB_INFO_EXTRINSIC_OPTICAL_TO_USER_INDEX);
61 intrinsic_calibration.Read(start_ptr +
62 RGB_INFO_INTRINSIC_CALIBRATION_INDEX);
63 inverse_intrinsic_calibration.Read(
64 start_ptr + RGB_INFO_INVERSE_INTRINSIC_CALIBRATION_INDEX);
67 std::uint32_t version;
70 std::uint32_t frame_counter;
72 std::uint64_t timestamp_ns;
82 static constexpr
size_t RGB_INFO_V1_SIZE = 308;
85 Deserialize(
const Buffer& rgb_info_buffer)
89 rgb_info_v1.Read(rgb_info_buffer.
Ptr<uint8_t>(0),
90 rgb_info_buffer.
Size());
96 #endif // IFM3D_DESERIALIZE_STRUCT_RGB_INFO_V1_HPP