CARLA
 
载入中...
搜索中...
未找到
NormalsImageSerializer.h
浏览该文件的文档.
1//
2// Created by flo on 09.11.20.
3//
4
5#pragma once// 防止头文件被重复包含
6
7#include "carla/Memory.h"// 引入 carla 命名空间下的 Memory.h 头文件
8#include "carla/sensor/RawData.h"// 引入 carla 命名空间下的 sensor 子命名空间中的 RawData.h 头文件
9
10#include <cstdint>// 引入 C++标准库中的整数类型头文件
11#include <cstring>// 引入 C 标准库中的字符串操作函数头文件
12
13namespace carla {
14 namespace sensor {
15
16 class SensorData;// 声明名为 SensorData 的类,具体定义可能在其他地方
17
18 namespace s11n {// 声明名为 SensorData 的类,具体定义可能在其他地方
19
20 // 对由相机传感器生成的图像缓冲区进行序列化
22 public:
23
24// 定义结构体时的特殊编译指令,确保结构体按照 1 字节对齐
25#pragma pack(push, 1)
26 struct ImageHeader {
27 uint32_t width;// 图像宽度,无符号 32 位整数类型
28 uint32_t height;// 图像高度,无符号 32 位整数类型
29 float fov_angle;// 视场角,浮点类型
30 };
31#pragma pack(pop)// 恢复默认的内存对齐方式
32
33 constexpr static auto header_offset = sizeof(ImageHeader);// 定义一个常量,表示头部偏移量为 ImageHeader 结构体的大小
34
35 static const ImageHeader &DeserializeHeader(const RawData &data) {
36 return *reinterpret_cast<const ImageHeader *>(data.begin());
37 }// 静态函数,反序列化头部,根据传入的 RawData 对象,将其起始地址转换为 ImageHeader 指针并返回引用
38
39 template <typename Sensor>
40 static Buffer Serialize(const Sensor &sensor, Buffer &&bitmap);// 模板静态函数,对传感器数据和缓冲区进行序列化,传入传感器对象和可变右值引用的缓冲区
41
42 static SharedPtr<SensorData> Deserialize(RawData &&data);// 静态函数,反序列化 RawData 对象为 SensorData 的智能指针
43 };
44
45 template <typename Sensor>
46 inline Buffer NormalsImageSerializer::Serialize(const Sensor &sensor, Buffer &&bitmap) {
47 DEBUG_ASSERT(bitmap.size() > sizeof(ImageHeader));// 调试断言,确保缓冲区大小大于头部结构体的大小
48 ImageHeader header = {
49 sensor.GetImageWidth(),// 初始化头部结构体的宽度为传感器的图像宽度
50 sensor.GetImageHeight(),// 初始化头部结构体的高度为传感器的图像高度
51 sensor.GetFOVAngle()// 初始化头部结构体的视场角为传感器的视场角
52 };
53 std::memcpy(bitmap.data(), reinterpret_cast<const void *>(&header), sizeof(header));// 将头部结构体的数据复制到缓冲区中
54 return std::move(bitmap);// 返回移动后的缓冲区
55 }
56
57 } // namespace s11n
58 } // namespace sensor
59} // namespace carla
#define DEBUG_ASSERT(predicate)
Definition Debug.h:68
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
包装一个传感器生成的原始数据以及一些有用的元信息。
Definition RawData.h:20
auto begin() noexcept
指向传感器生成的数据的开始迭代器。
Definition RawData.h:52
static const ImageHeader & DeserializeHeader(const RawData &data)
static SharedPtr< SensorData > Deserialize(RawData &&data)
static Buffer Serialize(const Sensor &sensor, Buffer &&bitmap)
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
Definition Memory.h:19