表示缓冲区的类。
NvBuffer 类是以 v4l2_buffer
结构为基础建模的。该缓冲区具有 buf_type
v4l2_buf_type
、memory_type
v4l2_memory
和索引。 它包含一个 NvBufferPlane 数组,类似于 v4l2_buffer.m.planes
中 v4l2_plane
结构体的数组。 它还包含一个相应的 NvBufferPlaneFormat 数组,用于描述每个平面的格式。
即使 NvBuffer
非常类似于 v4l2 结构,它也可以轻松地与其他非 v4l2 组件一起使用。 NvBuffer
包含数据指针、缓冲区长度、缓冲区平面的文件描述符 (FD)、缓冲区格式(高度、宽度、步幅等)以及此类组件所需的其他成员。
此类还提供缓冲区引用计数功能。 当同一缓冲区被多个元素使用时,此功能非常有用。
对于 V4L2 MMAP,此类提供便捷的方法,用于将缓冲区的内容映射或取消映射到内存或从内存映射或取消映射,并根据其格式分配或释放软件内存。
定义位于文件 85 行 NvBuffer.h。
数据结构 | |
struct | NvBufferPlane |
保存缓冲区平面参数。 更多... | |
struct | NvBufferPlaneFormat |
保存缓冲区平面格式。 更多... | |
公共成员函数 | |
NvBuffer (enum v4l2_buf_type buf_type, enum v4l2_memory memory_type, uint32_t n_planes, NvBufferPlaneFormat *fmt, uint32_t index) | |
创建新的 NvBuffer 对象。 更多... | |
NvBuffer (uint32_t pixfmt, uint32_t width, uint32_t height, uint32_t index) | |
为原始像素格式创建新的 NvBuffer。 更多... | |
NvBuffer (uint32_t size, uint32_t index) | |
为非原始像素格式创建新的 NvBuffer 对象。 更多... | |
~NvBuffer () | |
销毁 NvBuffer 对象。 更多... | |
int | map () |
将缓冲区的内容映射到内存。 更多... | |
void | unmap () |
从内存中取消映射缓冲区的内容。 更多... | |
int | allocateMemory () |
为缓冲区分配软件内存。 更多... | |
void | deallocateMemory () |
释放缓冲区内存。 更多... | |
int | ref () |
增加缓冲区的引用计数。 更多... | |
int | unref () |
减少缓冲区的引用计数。 更多... | |
静态公共成员函数 | |
static int | fill_buffer_plane_format (uint32_t *num_planes, NvBuffer::NvBufferPlaneFormat *planefmts, uint32_t width, uint32_t height, uint32_t raw_pixfmt) |
填充 NvBuffer::NvBufferPlaneFormat 数组。 更多... | |
数据字段 | |
enum v4l2_buf_type | buf_type |
缓冲区类型。 更多... | |
enum v4l2_memory | memory_type |
与缓冲区关联的内存类型。 更多... | |
const uint32_t | index |
保存缓冲区索引。 更多... | |
uint32_t | n_planes |
保存缓冲区中的平面数量。 更多... | |
NvBufferPlane | planes [MAX_PLANES] |
保存数据指针、平面文件描述符 (FD)、平面格式等。 更多... | |
友元 | |
class | NvV4l2ElementPlane |
NvBuffer::NvBuffer | ( | enum v4l2_buf_type | buf_type, |
enum v4l2_memory | memory_type, | ||
uint32_t | n_planes, | ||
NvBufferPlaneFormat * | fmt, | ||
uint32_t | index | ||
) |
创建新的 NvBuffer 对象。
此 V4L2 元素的便捷方法创建一个新的缓冲区,其平面数组 memset 为零,引用计数初始化为零。
[in] | buf_type | 缓冲区类型,枚举为 v4l2_buf_type 。 |
[in] | memory_type | NvBuffer 内存,枚举为 v4l2_memory 枚举。 |
[in] | n_planes | 缓冲区中的平面数量。 |
[in] | fmt | 指定指向缓冲区平面格式数组的指针。 应至少包含 n_planes 个元素。 |
[in] | index | 平面中缓冲区的索引。 |
NvBuffer::NvBuffer | ( | uint32_t | pixfmt, |
uint32_t | width, | ||
uint32_t | height, | ||
uint32_t | index | ||
) |
为原始像素格式创建新的 NvBuffer。
此 V4L2 元素的便捷方法是仅适用于原始像素格式的 NvBuffer
构造函数。 它需要指定宽度、高度和像素格式。
平面数组 memset 为零,引用计数初始化为零。
[in] | pixfmt | 缓冲区的像素格式。 |
[in] | width | 缓冲区的像素宽度。 |
[in] | height | 缓冲区的像素高度。 |
[in] | index | 缓冲区的索引/ID。 |
NvBuffer::NvBuffer | ( | uint32_t | size, |
uint32_t | index | ||
) |
为非原始像素格式创建新的 NvBuffer 对象。
此 V4L2 元素的便捷方法是适用于非原始像素格式的 NvBuffer
构造函数。 它需要提供缓冲区的大小。
平面数组 memset 为零,引用计数初始化为零。
[in] | size | 缓冲区的字节大小。 |
[in] | index | 缓冲区的索引/ID。 |
NvBuffer::~NvBuffer | ( | ) |
销毁 NvBuffer 对象。
此方法清理类实例,取消映射任何已映射的平面。
int NvBuffer::allocateMemory | ( | ) |
为缓冲区分配软件内存。
V4L2_MEMORY_USERPTR
内存。此方法根据缓冲区格式分配内存:height、width、bytesperpixel 和 sizeimage。
void NvBuffer::deallocateMemory | ( | ) |
释放缓冲区内存。
V4L2_MEMORY_USERPTR
内存,并且仅当内存先前使用 NvBuffer::allocateMemory 分配时才有效。
|
static |
填充 NvBuffer::NvBufferPlaneFormat 数组。
此便捷方法基于 width、height 和像素格式 (raw_pixfmt) 填充 NvBuffer::NvBufferPlaneFormat
数组。 它还在 num_planes 中返回像素格式所需的平面数量。
[out] | num_planes | 平面数量。 不得为 NULL。 |
[in,out] | planefmts | 要填充的 NvBuffer::NvBufferPlaneFormat 数组。 长度必须至少为 num_planes。 为了获得最佳效果,请传递长度为 MAX_PLANES 的数组。 |
[in] | width | 缓冲区的像素宽度。 |
[in] | height | 缓冲区的像素高度。 |
[in] | raw_pixfmt | 原始 V4L2 像素格式。 |
int NvBuffer::map | ( | ) |
将缓冲区的内容映射到内存。
此方法将平面的文件描述符 (FD) 映射到 planes
的数据指针。(仅限 MMAP 缓冲区。)
int NvBuffer::ref | ( | ) |
增加缓冲区的引用计数。
此方法是线程安全的。
void NvBuffer::unmap | ( | ) |
从内存中取消映射缓冲区的内容。
(仅限 MMAP 缓冲区。)
int NvBuffer::unref | ( | ) |
减少缓冲区的引用计数。
如果缓冲区引用计数大于 0,则此线程安全方法会减少缓冲区引用计数。
|
friend |
定义位于文件 290 行 NvBuffer.h。
enum v4l2_buf_type NvBuffer::buf_type |
缓冲区类型。
定义位于文件 237 行 NvBuffer.h。
const uint32_t NvBuffer::index |
保存缓冲区索引。
定义位于文件 241 行 NvBuffer.h。
enum v4l2_memory NvBuffer::memory_type |
与缓冲区关联的内存类型。
定义位于文件 238 行 NvBuffer.h。
uint32_t NvBuffer::n_planes |
保存缓冲区中的平面数量。
定义位于文件 243 行 NvBuffer.h。
NvBufferPlane NvBuffer::planes[MAX_PLANES] |
保存数据指针、平面文件描述符 (FD)、平面格式等。
定义位于文件 244 行 NvBuffer.h。