CARLA
 
载入中...
搜索中...
未找到
OpticalFlowImageSerializer.h
浏览该文件的文档.
1//
2// Created by flo on 09.11.20.
3//
4
5#pragma once
6// 预处理指令
7#include "carla/Memory.h"
8// 引入carla项目中与内存管理相关的头文件
10// 引入carla项目里关于传感器原始数据(RawData)的头文件
11
12#include <cstdint>
13// 引入C++标准库中定义固定宽度整数类型的头文件
14#include <cstring>
15// 引入C++标准库中用于字符串和内存操作相关函数
16
17namespace carla {
18 namespace sensor {
19
20 class SensorData;
21 // 前向声明SensorData类,告知编译器后续会有这个类的完整定义
22
23 namespace s11n {
24
25 /// Serializes image buffers generated by camera sensors.
27 public:
28
29#pragma pack(push, 1)
30// 这是一个预处理指令,用于设置结构体的字节对齐方式为1字节对齐。
31 struct ImageHeader {
32 uint32_t width;
33// 定义一个32位无符号整数类型的成员变量,用于存储图像的宽度信息,单位可能是像素等
34 uint32_t height;
35 // 同样是32位无符号整数类型,用于存储图像的高度信息,单位通常也是像素。
36 float fov_angle;
37// 定义一个单精度浮点数类型的成员变量
38 };
39#pragma pack(pop)
40// 恢复之前的默认字节对齐方式
41
42 constexpr static auto header_offset = sizeof(ImageHeader);
43// 使用 constexpr 关键字定义一个静态常量,其值为 ImageHeader 结构体的大小(字节数)。
44
45 static const ImageHeader &DeserializeHeader(const RawData &data) {
46 return *reinterpret_cast<const ImageHeader *>(data.begin());
47// 定义一个静态函数 DeserializeHeader,用于将传入的原始数据(RawData 类型)进行反序列化操作,以获取图像头部信息。
48
49 }
50
51 template <typename Sensor>
52 static Buffer Serialize(const Sensor &sensor, Buffer &&bitmap);
53
55// 定义一个静态函数 Deserialize,用于将传入的原始数据(通过右值引用接收 RawData &&data,避免不必要的拷贝)进行反序列化操作
56 // 最终返回一个指向 SensorData 类型的共享智能指针(SharedPtr 表示共享所有权的智能指针,便于内存管理和对象生命周期控制)
57 // 即将原始数据还原为相应的传感器数据对象。
58 };
59
60 template <typename Sensor>
61 inline Buffer OpticalFlowImageSerializer::Serialize(const Sensor &sensor, Buffer &&bitmap) {
62 DEBUG_ASSERT(bitmap.size() > sizeof(ImageHeader));
63// 使用 DEBUG_ASSERT 宏(通常来自项目中用于调试相关的头文件,此处应该是之前引入的相关文件中定义的)进行断言检查
64 // 确保传入的图像缓冲区(bitmap)的大小大于 ImageHeader 结构体的大小,这是为了保证缓冲区有足够空间来存放后续要添加的头部信息
65// 防止出现缓冲区溢出等错误情况。
66
67 ImageHeader header = {
68 sensor.GetImageWidth(),
69 sensor.GetImageHeight(),
70 sensor.GetFOVAngle()
71 };
72 // 创建一个 ImageHeader 结构体对象 header,并通过调用传感器对象(sensor)的相关成员函数来获取图像的宽度、高度和视场角信息,对 header 结构体进行初始化赋值,以便后续将这些信息添加到图像缓冲区作为头部信息。
73 std::memcpy(bitmap.data(), reinterpret_cast<const void *>(&header), sizeof(header));
74// 使用 std::memcpy 函数(来自 <cstring> 头文件)将 header 结构体的数据复制到图像缓冲区(bitmap)的起始位置,
75// 实现将图像头部信息添加到缓冲区的操作,这里需要将 header 结构体指针转换为 void* 类型(通过 reinterpret_cast)来满足 memcpy 函数的参数要求,
76 // 并且指定复制的字节数为 header 结构体的大小(sizeof(header)),确保完整复制头部信息。
77
78 return std::move(bitmap);
79// 通过移动语义(std::move)返回填充好头部信息的图像缓冲区(bitmap),这样可以避免不必要的拷贝操作,提高函数返回的效率
80
81 }
82
83 } // namespace s11n
84 } // namespace sensor
85} // namespace carla
86
#define DEBUG_ASSERT(predicate)
Definition Debug.h:68
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
包装一个传感器生成的原始数据以及一些有用的元信息。
Definition RawData.h:20
auto begin() noexcept
指向传感器生成的数据的开始迭代器。
Definition RawData.h:52
Serializes image buffers generated by camera sensors.
static Buffer Serialize(const Sensor &sensor, Buffer &&bitmap)
static SharedPtr< SensorData > Deserialize(RawData &&data)
static const ImageHeader & DeserializeHeader(const RawData &data)
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
Definition Memory.h:19