Jetson Linux API 参考

32.7.4 版本

详细描述

定义了一个辅助类,用于在 V4L2 Element 平面上执行的操作。

这个派生类基于 V4L2 Element 的平面建模。它围绕与平面操作相关的 V4L2 IOCTL 提供了便捷的封装方法,例如 VIDIOC_G_FMT/VIDIOC_S_FMTVIDIOC_REQBUFSVIDIOC_STREAMON/VIDIOC_STREAMOFF 等。

平面缓冲区类型可以是 V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE(对于输出平面)或 V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE(对于捕获平面)。

平面具有 NvBuffer 对象指针数组,该数组在 reqbuf 调用期间分配和初始化。这些 NvBuffer 对象类似于排队/出队的 v4l2_buffer 结构体。

此类提供了另一个对多线程有用的功能。在调用 startDQThread 时,它会在内部衍生一个线程,该线程无限期运行直到收到停止信号。此线程不断尝试从平面出队一个缓冲区,并在成功出队时调用用户指定的 dqThreadCallback 方法。

定义于文件 NvV4l2ElementPlane.h 的第 104 行。

公共类型

typedef bool(* dqThreadCallback) (struct v4l2_buffer *v4l2_buf, NvBuffer *buffer, NvBuffer *shared_buffer, void *data)
 这是一个回调函数类型方法,当 DQ 线程成功地从平面出队一个缓冲区时调用。更多...
 

公共成员函数

int getFormat (struct v4l2_format &format)
 获取平面格式。更多...
 
int setFormat (struct v4l2_format &format)
 设置平面格式。更多...
 
int mapOutputBuffers (struct v4l2_buffer &v4l2_buf, int dmabuff_fd)
 将 NvMMBuffer 映射到 V4L2_MEMORY_DMABUF 的 NvBuffer更多...
 
int unmapOutputBuffers (int index, int dmabuff_fd)
 取消映射 V4L2_MEMORY_DMABUF 的 NvMMBuffer。更多...
 
int getCrop (struct v4l2_crop &crop)
 获取平面的裁剪矩形。更多...
 
int setSelection (uint32_t target, uint32_t flags, struct v4l2_rect &rect)
 设置平面的选择矩形。更多...
 
int reqbufs (enum v4l2_memory mem_type, uint32_t num)
 请求平面上的缓冲区。更多...
 
int queryBuffer (uint32_t buf_index)
 查询索引处缓冲区的状态。更多...
 
int exportBuffer (uint32_t buf_index)
 将缓冲区导出为 DMABUF FD。更多...
 
int setStreamStatus (bool status)
 启动或停止平面上的流式传输。更多...
 
bool getStreamStatus ()
 检查平面是否正在流式传输。更多...
 
int setStreamParms (struct v4l2_streamparm &parm)
 设置流式传输参数。更多...
 
int setupPlane (enum v4l2_memory mem_type, uint32_t num_buffers, bool map, bool allocate)
 辅助方法,封装了设置平面进行流式传输所需的所有方法调用。更多...
 
void deinitPlane ()
 辅助方法,封装了取消初始化平面进行流式传输所需的所有方法调用。更多...
 
enum v4l2_buf_type getBufType ()
 获取此平面的流式传输/缓冲区类型。更多...
 
NvBuffergetNthBuffer (uint32_t n)
 获取索引 n 处的 NvBuffer 对象。更多...
 
int dqBuffer (struct v4l2_buffer &v4l2_buf, NvBuffer **buffer, NvBuffer **shared_buffer, uint32_t num_retries)
 从平面出队一个缓冲区。更多...
 
int qBuffer (struct v4l2_buffer &v4l2_buf, NvBuffer *shared_buffer)
 在平面上排队一个缓冲区。更多...
 
uint32_t getNumBuffers ()
 获取在平面上分配/请求的缓冲区数量。更多...
 
uint32_t getNumPlanes ()
 获取此平面上当前设置格式的平面缓冲区数量。更多...
 
void setBufferPlaneFormat (int n_planes, NvBuffer::NvBufferPlaneFormat *planefmts)
 设置用于此平面的缓冲区的平面格式。更多...
 
uint32_t getNumQueuedBuffers ()
 获取当前在平面上排队的缓冲区数量。更多...
 
uint32_t getTotalDequeuedBuffers ()
 获取从平面出队的缓冲区总数。更多...
 
uint32_t getTotalQueuedBuffers ()
 获取在平面上排队的缓冲区总数。更多...
 
int waitAllBuffersQueued (uint32_t max_wait_ms)
 等待直到平面的所有缓冲区都排队。更多...
 
int waitAllBuffersDequeued (uint32_t max_wait_ms)
 等待直到平面的所有缓冲区都出队。更多...
 
bool setDQThreadCallback (dqThreadCallback callback)
 设置 DQ 线程回调方法。更多...
 
int startDQThread (void *data)
 启动 DQ 线程。更多...
 
int stopDQThread ()
 如果 DQ 线程正在运行,则强制停止它。更多...
 
int waitForDQThread (uint32_t max_wait_ms)
 等待 DQ 线程停止。更多...
 

数据字段

pthread_mutex_t plane_lock
 plane_cond 一起使用的互斥锁。更多...
 
pthread_cond_t plane_cond
 平面条件,应用程序可以等待以接收来自 qBuffer/dqBuffer 的通知。更多...
 

友元

class NvV4l2Element
 

成员 Typedef 文档

◆ dqThreadCallback

typedef bool(* NvV4l2ElementPlane::dqThreadCallback) (struct v4l2_buffer *v4l2_buf, NvBuffer *buffer, NvBuffer *shared_buffer, void *data)

这是一个回调函数类型方法,当 DQ 线程成功地从平面出队一个缓冲区时调用。

应用程序必须实现此方法,并使用 setDQThreadCallback 设置回调。

将流设置为关闭会自动停止此线程。

参见
setDQThreadCallback, startDQThread
参数
v4l2_buf指向用于出队的 v4l2_buffer 结构的指针。
buffer指向 v4l2_buf 中包含的 index 处的 NvBuffer 对象的指针。
shared_buffer如果平面与其他元素共享缓冲区,则指向 NvBuffer 对象的指针,否则为 NULL。
data指向应用程序特定数据的指针,该数据通过 startDQThread 设置。
返回值
如果实现此调用的应用程序返回 FALSE,则 DQThread 停止;否则,DQ 线程继续运行。

定义于文件 NvV4l2ElementPlane.h 的第 422 行。

成员函数文档

◆ deinitPlane()

void NvV4l2ElementPlane::deinitPlane ( )

辅助方法,封装了取消初始化平面进行流式传输所需的所有方法调用。

对于每个缓冲区,根据内存类型取消映射/释放内存。然后,调用 reqbuf,计数为零。

参见
setupPlane

◆ dqBuffer()

int NvV4l2ElementPlane::dqBuffer ( struct v4l2_buffer &  v4l2_buf,
NvBuffer **  buffer,
NvBuffer **  shared_buffer,
uint32_t  num_retries 
)

从平面出队一个缓冲区。

这是一个阻塞调用。当成功出队缓冲区或达到超时时,此调用返回。如果 buffer 不为 NULL,则返回由 VIDIOC_DQBUF IOCTL 返回的索引处的 NvBuffer 对象。如果此平面与其他元素共享缓冲区且 shared_buffer 不为 NULL,则在 shared_buffer 中返回共享的 NvBuffer 对象。

参数
[in]v4l2_buf对要用于出队的 v4l2_buffer 结构的引用。
[out]buffer返回指向与出队缓冲区关联的 NvBuffer 对象的指针的指针。可以为 NULL。
[out]shared_buffer如果排队的缓冲区与其他元素共享,则返回指向共享 NvBuffer 对象的指针的指针。可以为 NULL。
[in]num_retries在返回失败之前尝试出队缓冲区的次数。在非阻塞模式下,这等效于尝试出队缓冲区的毫秒数。
返回值
成功返回 0,否则返回 -1。

◆ exportBuffer()

int NvV4l2ElementPlane::exportBuffer ( uint32_t  buf_index)

将缓冲区导出为 DMABUF FD。

警告
此方法仅适用于 V4L2_MEMORY_MMAP 内存。

内部调用 VIDIOC_EXPBUF IOCTL。填充索引为 buf_inNvBuffer 对象的所有 NvBuffer::NvBufferPlane 成员的 fd 成员。

参数
[in]buf_index指定要导出的缓冲区的索引。
返回值
成功返回 0,否则返回 -1。

◆ getBufType()

enum v4l2_buf_type NvV4l2ElementPlane::getBufType ( )
inline

获取此平面的流式传输/缓冲区类型。

返回值
属于枚举 v4l2_buf_type 的缓冲区类型。

定义于文件 NvV4l2ElementPlane.h 的第 269 行。

◆ getCrop()

int NvV4l2ElementPlane::getCrop ( struct v4l2_crop &  crop)

获取平面的裁剪矩形。

内部调用 VIDIOC_G_CROP IOCTL

参数
[in]crop对要填充的 v4l2_crop 结构的引用。
返回值
成功返回 0,否则返回 -1。

◆ getFormat()

int NvV4l2ElementPlane::getFormat ( struct v4l2_format &  format)

获取平面格式。

内部调用 VIDIOC_G_FMT IOCTL

参数
[in,out]format对要填充的 v4l2_format 结构的引用。
返回值
成功返回 0,否则返回 -1。

◆ getNthBuffer()

NvBuffer* NvV4l2ElementPlane::getNthBuffer ( uint32_t  n)

获取索引 n 处的 NvBuffer 对象。

返回值
索引 n 处的 NvBuffer 对象,如果 n >= 缓冲区数量,则为 NULL。

◆ getNumBuffers()

uint32_t NvV4l2ElementPlane::getNumBuffers ( )
inline

获取在平面上分配/请求的缓冲区数量。

返回值
缓冲区数量。

定义于文件 NvV4l2ElementPlane.h 的第 321 行。

◆ getNumPlanes()

uint32_t NvV4l2ElementPlane::getNumPlanes ( )
inline

获取此平面上当前设置格式的平面缓冲区数量。

返回值
平面数量。

定义于文件 NvV4l2ElementPlane.h 的第 332 行。

◆ getNumQueuedBuffers()

uint32_t NvV4l2ElementPlane::getNumQueuedBuffers ( )
inline

获取当前在平面上排队的缓冲区数量。

返回值
当前在平面上排队的缓冲区数量。

定义于文件 NvV4l2ElementPlane.h 的第 358 行。

◆ getStreamStatus()

bool NvV4l2ElementPlane::getStreamStatus ( )

检查平面是否正在流式传输。

返回值
如果平面正在流式传输,则为 true,否则为 false。

◆ getTotalDequeuedBuffers()

uint32_t NvV4l2ElementPlane::getTotalDequeuedBuffers ( )
inline

获取从平面出队的缓冲区总数。

返回值
从平面出队的缓冲区总数。

定义于文件 NvV4l2ElementPlane.h 的第 368 行。

◆ getTotalQueuedBuffers()

uint32_t NvV4l2ElementPlane::getTotalQueuedBuffers ( )
inline

获取在平面上排队的缓冲区总数。

返回值
在平面上排队的缓冲区总数。

定义于文件 NvV4l2ElementPlane.h 的第 378 行。

◆ mapOutputBuffers()

int NvV4l2ElementPlane::mapOutputBuffers ( struct v4l2_buffer &  v4l2_buf,
int  dmabuff_fd 
)

将 NvMMBuffer 映射到 V4L2_MEMORY_DMABUF 的 NvBuffer

参数
[in]v4l2_bufNvMMBuffer 映射到的 NvBuffer 的地址。
[in]dmabuff_fd包含 NvMMBuffer 属性的字段的索引。
返回值
成功返回 0,否则返回 -1。

◆ qBuffer()

int NvV4l2ElementPlane::qBuffer ( struct v4l2_buffer &  v4l2_buf,
NvBuffer shared_buffer 
)

在平面上排队一个缓冲区。

此方法在内部调用 VIDIOC_QBUF。如果此平面与其他元素共享缓冲区,则应用程序可以在 shared_buffer 中传递指向共享 NvBuffer 对象的指针。

参数
[in]v4l2_buf对要用于排队的 v4l2_buffer 结构的引用。
[in]shared_buffer指向共享 NvBuffer 对象的指针。
返回值
成功返回 0,否则返回 -1。

◆ queryBuffer()

int NvV4l2ElementPlane::queryBuffer ( uint32_t  buf_index)

查询索引处缓冲区的状态。

警告
此方法仅适用于 V4L2_MEMORY_MMAP 内存。

内部调用 VIDIOC_QUERYBUF IOCTL。填充索引为 buf_indexNvBuffer 对象的所有 NvBuffer::NvBufferPlane 成员的 lengthmem_offset 成员。

参数
[in]buf_index指定要查询的缓冲区的索引。
返回值
成功返回 0,否则返回 -1。

◆ reqbufs()

int NvV4l2ElementPlane::reqbufs ( enum v4l2_memory  mem_type,
uint32_t  num 
)

请求平面上的缓冲区。

内部调用 VIDIOC_REQBUFS IOCTL。创建一个 NvBuffer 数组,其长度等于 IOCTL 返回的计数。

参数
[in]mem_type指定要请求的 V4L2 内存类型。
[in]num指定要在平面上请求的缓冲区数量。
返回值
成功返回 0,否则返回 -1。

◆ setBufferPlaneFormat()

void NvV4l2ElementPlane::setBufferPlaneFormat ( int  n_planes,
NvBuffer::NvBufferPlaneFormat planefmts 
)

设置用于此平面的缓冲区的平面格式。

缓冲区平面格式必须在调用 reqbuf 之前设置,因为 NvBuffer 构造函数需要这些格式。

参见
reqbufs
参数
[in]n_planes缓冲区中的平面数量。
[in]planefmts指向描述每个平面格式的 NvBufferPlaneFormat 数组的指针。数组长度必须至少为 n_planes

◆ setDQThreadCallback()

bool NvV4l2ElementPlane::setDQThreadCallback ( dqThreadCallback  callback)

设置 DQ 线程回调方法。

回调方法在成功出队缓冲区后从 DQ 线程调用。

参数
[in]callback成功出队后要调用的方法。
返回值
成功为 TRUE,失败为 FALSE。

◆ setFormat()

int NvV4l2ElementPlane::setFormat ( struct v4l2_format &  format)

设置平面格式。

内部调用 VIDIOC_S_FMT IOCTL

参数
[in]format对要在平面上设置的 v4l2_format 结构的引用。
返回值
成功返回 0,否则返回 -1。

◆ setSelection()

int NvV4l2ElementPlane::setSelection ( uint32_t  target,
uint32_t  flags,
struct v4l2_rect &  rect 
)

设置平面的选择矩形。

内部调用 VIDIOC_S_SELECTION IOCTL。

参数
[in]target指定矩形选择类型。
[in]flags指定控制选择调整的标志。
[in]rect对选择矩形的引用。
返回值
成功返回 0,否则返回 -1。

◆ setStreamParms()

int NvV4l2ElementPlane::setStreamParms ( struct v4l2_streamparm &  parm)

设置流式传输参数。

内部调用 VIDIOC_S_PARM IOCTL。

参数
[in]parm对要在平面上设置的 v4l2_streamparm 结构的引用。
返回值
成功返回 0,否则返回 -1。

◆ setStreamStatus()

int NvV4l2ElementPlane::setStreamStatus ( bool  status)

启动或停止平面上的流式传输。

内部调用 VIDIOC_STREAMON/VIDIOC_STREAMOFF IOCTL。

参数
[in]status必须为 TRUE 才能启动流,为 FALSE 才能停止流。
返回值
成功返回 0,否则返回 -1。

◆ setupPlane()

int NvV4l2ElementPlane::setupPlane ( enum v4l2_memory  mem_type,
uint32_t  num_buffers,
bool  map,
bool  allocate 
)

辅助方法,封装了设置平面进行流式传输所需的所有方法调用。

内部调用 reqbuf。然后,对于每个缓冲区,调用 queryBufferexportBuffer 并根据内存类型映射缓冲区/分配缓冲区内存。

参见
deinitPlane
参数
[in]mem_type要在缓冲区上使用的 V4L2 内存。
[in]num_buffers要在平面上请求的缓冲区数量。
[in]map布尔值,指示缓冲区是否应映射到内存(仅适用于 V4L2_MEMORY_MMAP)。
[in]allocate布尔值,指示是否应分配缓冲区内存(仅适用于 V4L2_MEMORY_USERPTR)。
返回值
成功返回 0,否则返回 -1。

◆ startDQThread()

int NvV4l2ElementPlane::startDQThread ( void *  data)

启动 DQ 线程。

此方法在内部启动一个线程。在成功从平面出队缓冲区后,调用使用 setDQThreadCallback 设置的 dqThreadCallback 方法。

将流设置为关闭会自动停止线程。

参见
stopDQThread, waitForDQThread
参数
[in]data指向应用程序数据的指针。这在 dqThreadCallback 方法中作为参数提供。
返回值
成功返回 0,否则返回 -1。

◆ stopDQThread()

int NvV4l2ElementPlane::stopDQThread ( )

如果 DQ 线程正在运行,则强制停止它。

当设备以阻塞模式打开时不起作用。

参见
startDQThread, waitForDQThread
返回值
成功返回 0,否则返回 -1。

◆ unmapOutputBuffers()

int NvV4l2ElementPlane::unmapOutputBuffers ( int  index,
int  dmabuff_fd 
)

取消映射 V4L2_MEMORY_DMABUF 的 NvMMBuffer。

参数
[in]index对于当前缓冲区索引。
[in]dmabuff_fd包含 NvMMBuffer 属性的字段的索引。
返回值
成功返回 0,否则返回 -1。

◆ waitAllBuffersDequeued()

int NvV4l2ElementPlane::waitAllBuffersDequeued ( uint32_t  max_wait_ms)

等待直到平面的所有缓冲区都出队。

这是一个阻塞调用,当所有缓冲区都出队或达到超时时返回。

参数
[in]max_wait_ms最大等待时间,以毫秒为单位
返回值
成功返回 0,否则返回 -1。

◆ waitAllBuffersQueued()

int NvV4l2ElementPlane::waitAllBuffersQueued ( uint32_t  max_wait_ms)

等待直到平面的所有缓冲区都排队。

这是一个阻塞调用,当所有缓冲区都排队或达到超时时返回。

参数
[in]max_wait_ms最大等待时间,以毫秒为单位。
返回值
成功返回 0,否则返回 -1。

◆ waitForDQThread()

int NvV4l2ElementPlane::waitForDQThread ( uint32_t  max_wait_ms)

等待 DQ 线程停止。

此方法等待直到 DQ 线程停止或达到超时。

参见
startDQThread, stopDQThread
参数
[in]max_wait_ms最大等待时间,以毫秒为单位。
返回值
成功返回 0,否则返回 -1。

友元和相关函数文档

◆ NvV4l2Element

friend class NvV4l2Element
friend

定义于文件 NvV4l2ElementPlane.h 的第 583 行。

字段文档

◆ plane_cond

pthread_cond_t NvV4l2ElementPlane::plane_cond

平面条件,应用程序可以等待以接收来自 qBuffer/dqBuffer 的通知。

定义于文件 NvV4l2ElementPlane.h 的第 475 行。

◆ plane_lock

pthread_mutex_t NvV4l2ElementPlane::plane_lock

plane_cond 一起使用的互斥锁。

定义于文件 NvV4l2ElementPlane.h 的第 474 行。


此类的文档从以下文件生成
. All rights reserved.