VPI - 视觉编程接口

3.2 版本

API 的主要入口点是 VPIStream 对象。更多...

类型定义

typedef struct VPIStreamImpl * VPIStream
 流的句柄。
 

函数

VPIStatus vpiStreamCreateWrapperCUDA (CUstream cudaStream, uint64_t flags, VPIStream *stream)
 将现有的 cudaStream_t 封装到 VPI 流中。更多...
 
VPIStatus vpiStreamCreate (uint64_t flags, VPIStream *stream)
 创建流实例。更多...
 
void vpiStreamDestroy (VPIStream stream)
 销毁流实例并释放所有硬件资源。更多...
 
VPIStatus vpiStreamFlush (VPIStream stream)
 提交所有挂起的操作以供执行。更多...
 
VPIStatus vpiStreamSync (VPIStream stream)
 阻塞调用线程,直到此流队列中所有提交的命令都完成(队列为空)。更多...
 
VPIStatus vpiStreamWaitEvent (VPIStream stream, VPIEvent event)
 推送一个命令,该命令会阻塞提交到流的所有未来命令的处理,直到事件被信号化。更多...
 
VPIStatus vpiStreamGetThreadHandle (VPIStream stream, VPINativeThreadHandle *handle)
 返回后台流处理线程的操作系统特定句柄。更多...
 
VPIStatus vpiStreamGetFlags (VPIStream stream, uint64_t *flags)
 获取创建 VPIStream 时传递的标志。更多...
 

内存创建标志。

这些标志可以在创建图像、金字塔或数组时使用。

enum  VPIBackend
 VPI 后端类型。更多...
 

流特定标志。

#define VPI_STREAM_GREEDY   (1ULL << 63)
 在每次提交时将操作刷新到后端。
 

详细描述

API 的主要入口点是 VPIStream 对象。

此对象表示一个命令队列 (FIFO),用于存储要执行的命令列表。命令可能包括运行特定的 CV 算法或在特定后端中发出事件信号。这允许 API 函数相对于调用线程异步执行。调用任何 CV 函数只是将相应的命令推送到 VPIStream 实例中的命令队列并立即返回。然后,排队的命令将被消耗并分派到关联的后端设备。

枚举类型文档

◆ VPIBackend

enum VPIBackend

#include <vpi/Types.h>

VPI 后端类型。

枚举器
VPI_BACKEND_CPU 

CPU 后端。

VPI_BACKEND_CUDA 

CUDA 后端。

VPI_BACKEND_PVA 

PVA 后端。

VPI_BACKEND_VIC 

VIC 后端。

VPI_BACKEND_NVENC 

NVENC 后端。

VPI_BACKEND_OFA 

OFA 后端。

VPI_BACKEND_INVALID 

无效后端。

定义于文件 Types.h 的第 90 行。

函数文档

◆ vpiStreamCreateWrapperCUDA()

VPIStatus vpiStreamCreateWrapperCUDA ( CUstream  cudaStream,
uint64_t  flags,
VPIStream stream 
)

#include <vpi/CUDAInterop.h>

将现有的 cudaStream_t 封装到 VPI 流中。

CUDA 算法将在封装的 cudaStream_t 中提交执行。这允许将 VPI 驱动的处理插入到现有的 CUDA 管道中。算法仍然可以提交到其他后端。

VPIStream 不拥有 cudaStream_t。它在 VPIStream 生命周期内必须有效。

只有当保证提交给 VPIStream 的所有任务都已完成时,CUDA 内核才能直接提交到 cudaStream_t。

参数
[in]cudaStream要封装的 CUDA 流句柄。
  • 强制性参数,不能为 NULL。
[in]flags位字段,指定流的所需特性。VPI_BACKEND_CUDA 始终在内部添加。
  • 该字段必须是零个或多个以下标志的组合
  • 如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用的有效后端。
[out]stream将接收新创建的 VPIStream 的指针。
返回值
VPI_ERROR_INVALID_ARGUMENT输出 stream 为 NULL。
VPI_ERROR_INVALID_ARGUMENT输入 cudaStream 为 NULL。
VPI_ERROR_INVALID_ARGUMENT未给出任何后端,并且设置了 VPI_REQUIRE_BACKENDS
VPI_ERROR_OUT_OF_MEMORY资源不足,无法创建数组。
VPI_ERROR_INVALID_OPERATION请求的后端在当前上下文中未启用。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_SUCCESS操作执行成功。

◆ vpiStreamCreate()

VPIStatus vpiStreamCreate ( uint64_t  flags,
VPIStream stream 
)

#include <vpi/Stream.h>

创建流实例。

参数
[in]flags位字段,指定流的所需特性。
[out]stream指向将接收创建的流句柄的内存的指针。
返回值
VPI_ERROR_INVALID_ARGUMENT输出 stream 句柄为 NULL。
VPI_ERROR_INVALID_ARGUMENTflags 无效。
VPI_ERROR_INVALID_ARGUMENT未给出任何后端,并且设置了 VPI_REQUIRE_BACKENDS
VPI_ERROR_OUT_OF_MEMORY资源不足,无法分配图像。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_ERROR_INVALID_OPERATION请求的后端在当前上下文中未启用。
VPI_SUCCESS操作执行成功。

◆ vpiStreamDestroy()

void vpiStreamDestroy ( VPIStream  stream)

#include <vpi/Stream.h>

销毁流实例并释放所有硬件资源。

此操作将隐式同步流,以保证提交给它的所有操作都已完成。

参数
[in]stream要销毁的流句柄。允许传递 NULL,该函数对此不执行任何操作。

◆ vpiStreamFlush()

VPIStatus vpiStreamFlush ( VPIStream  stream)

#include <vpi/Stream.h>

提交所有挂起的操作以供执行。

参数
[in]stream流句柄。
  • 强制性参数,不能为 NULL。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL 或不代表 VPIStream 实例。
VPI_SUCCESS操作执行成功

◆ vpiStreamSync()

VPIStatus vpiStreamSync ( VPIStream  stream)

#include <vpi/Stream.h>

阻塞调用线程,直到此流队列中所有提交的命令都完成(队列为空)。

此函数调用等效于原子性地调用 vpiEventRecord,然后调用 vpiStreamWaitEvent

该操作将隐式刷新流。

参数
[in]stream流句柄。
  • 强制性参数,不能为 NULL。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL 或不代表 VPIStream 实例。
VPI_SUCCESS操作执行成功

◆ vpiStreamWaitEvent()

VPIStatus vpiStreamWaitEvent ( VPIStream  stream,
VPIEvent  event 
)

#include <vpi/Stream.h>

推送一个命令,该命令会阻塞提交到流的所有未来命令的处理,直到事件被信号化。

参数
[in]stream流句柄。
  • 强制性参数,不能为 NULL。
[in]event事件句柄。
返回值
VPI_ERROR_INVALID_ARGUMENT输出 event 无效。
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL 或不代表 VPIStream 实例。
VPI_SUCCESS操作执行成功

◆ vpiStreamGetThreadHandle()

VPIStatus vpiStreamGetThreadHandle ( VPIStream  stream,
VPINativeThreadHandle handle 
)

#include <vpi/Stream.h>

返回后台流处理线程的操作系统特定句柄。

参数
[in]stream流句柄。
  • 强制性参数,不能为 NULL。
[out]handle流处理线程句柄。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL 或不代表 VPIStream 实例。
VPI_ERROR_INVALID_ARGUMENT输出 handle 指针为 NULL。
VPI_SUCCESS操作执行成功。

◆ vpiStreamGetFlags()

VPIStatus vpiStreamGetFlags ( VPIStream  stream,
uint64_t *  flags 
)

#include <vpi/Stream.h>

获取创建 VPIStream 时传递的标志。

参数
[in]stream流句柄。
  • 强制性参数,不能为 NULL。
[out]flags指向变量的指针,标志将存储到该变量中。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL 或不代表 VPIStream 实例。
VPI_ERROR_INVALID_ARGUMENT输出 flags 指针为 NULL。
VPI_SUCCESS操作执行成功。