VPI - Vision Programming Interface

3.2 版本

金字塔

二维图像金字塔的抽象表示。 更多...

数据结构

struct  VPIPyramidData
 存储金字塔的内容。 更多...
 

#define VPI_MAX_PYRAMID_LEVEL_COUNT   (10)
 金字塔层级的最大数量。
 

类型定义

typedef struct VPIPyramidImpl * VPIPyramid
 图像金字塔的句柄。
 

函数

VPIStatus vpiPyramidCreate (int32_t width, int32_t height, VPIImageFormat fmt, int32_t numLevels, float scale, uint64_t flags, VPIPyramid *pyr)
 使用指定的标志创建空的图像金字塔实例。 更多...
 
void vpiPyramidDestroy (VPIPyramid pyr)
 销毁图像金字塔实例以及它拥有的所有资源。 更多...
 
VPIStatus vpiPyramidGetFlags (VPIPyramid pyr, uint64_t *flags)
 返回与金字塔关联的标志。 更多...
 
VPIStatus vpiPyramidGetFormat (VPIPyramid pyr, VPIImageFormat *fmt)
 返回金字塔层级的图像格式。 更多...
 
VPIStatus vpiPyramidGetNumLevels (VPIPyramid pyr, int32_t *numLevels)
 获取图像金字塔层级计数。 更多...
 
VPIStatus vpiPyramidGetSize (VPIPyramid pyr, int32_t outSize, int32_t *outWidth, int32_t *outHeight)
 获取图像宽度和高度(以像素为单位)(一次获取所有层级)。 更多...
 
VPIStatus vpiPyramidGetScale (VPIPyramid pyr, float *scale)
 返回金字塔层级的缩放因子。 更多...
 
VPIStatus vpiPyramidLock (VPIPyramid pyr, VPILockMode lock)
 获取金字塔对象的锁。 更多...
 
VPIStatus vpiPyramidLockData (VPIPyramid pyr, VPILockMode lock, VPIImageBufferType bufType, VPIPyramidData *out)
 获取金字塔对象的锁,并返回可由主机访问的金字塔每一层的指针。 更多...
 
VPIStatus vpiPyramidUnlock (VPIPyramid pyr)
 释放图像金字塔对象的锁。 更多...
 
VPIStatus vpiImageCreateWrapperPyramidLevel (VPIPyramid pyr, int32_t level, VPIImage *img)
 创建包裹一个金字塔层级的图像。 更多...
 

详细描述

二维图像金字塔的抽象表示。

2D图像金字塔容器通过调用 vpiPyramidCreate 来创建,以分配和初始化一个空的(清零的)VPIPyramid 对象。图像金字塔数据的内存由VPI分配和管理。

图像格式与图像容器支持的格式匹配。金字塔不一定是二元的。层级之间的缩放比例在构造函数中定义。

诸如层级、缩放比例、宽度、高度和图像格式等参数是不可变的,并在构造时指定。内部内存布局也是后端特定的。更重要的是,不同硬件块之间高效的图像金字塔数据交换可能迫使实现将内存分配在多个内存池中(例如,dGPU和系统DRAM)。在某些情况下(为了优化性能和内存使用),限制内部分配策略以仅支持特定的后端集合可能是有益的。

vpiPyramidLockData / vpiPyramidUnlock 调用集允许用户从主机读取/写入图像数据。这些函数是非阻塞的,并且忽略设备命令队列,因此用户需要确保所有使用此图像金字塔作为输入或输出的挂起操作都已完成。此外,根据启用的后端,锁定/解锁操作可能非常耗时,例如,对于dGPU,可能涉及通过PCIe总线复制数据。


数据结构文档

◆ VPIPyramidData

struct VPIPyramidData

存储金字塔的内容。

每个层级都由一个完整的 VPIImageData 表示。有 numLevels 个层级,可以从 levels[0] 访问到 levels[numLevels-1]

定义于文件 Pyramid.h 的第 111 行。

+ VPIPyramidData 的协作图
数据字段
int32_t numLevels 金字塔的层级数(即

高度)。

float scale 两个相邻层级之间分辨率的缩放因子。
VPIImageData levels[VPI_MAX_PYRAMID_LEVEL_COUNT] 每个金字塔层级的内容。

只有前 numLevels 个层级具有有效数据。

函数文档

◆ vpiPyramidCreate()

VPIStatus vpiPyramidCreate ( int32_t  width,
int32_t  height,
VPIImageFormat  fmt,
int32_t  numLevels,
float  scale,
scale uint64_t ,
flags VPIPyramid
)

pyr 

#include <vpi/Pyramid.h>

使用指定的标志创建空的图像金字塔实例。

金字塔数据被清零。
参数[in]width,height
  • 最精细金字塔层级的尺寸。
参数numLevels宽度和高度必须 > 0。
  • numLevels
参数scale层级数。
参数fmtscale
  • 从一个层级到下一个层级的缩放因子。
  • 必须 > 0 且 <= 1。
  • fmt
参数uint64_t 每个层级的图像格式。
位字段,指定金字塔的所需特性。该字段必须是零个或多个以下标志的组合VPIBackend 标志。此金字塔可用于在这些后端中运行的算法。如果未给出后端标志且未设置 VPI_REQUIRE_BACKENDS,它将考虑活动 VPIContext 支持的所有后端,但禁用与给定图像参数不兼容的后端。
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。[out]
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。指向将接收创建的金字塔句柄的内存的指针。
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。返回值
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。VPI_ERROR_INVALID_ARGUMENT
输出 pyr 为 NULL。numLevels 超出有效范围。
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。widthheight 超出有效范围。
scale 超出有效范围。未给出后端且设置了 VPI_REQUIRE_BACKENDS
VPI_ERROR_INVALID_IMAGE_FORMATfmt 不被接受。
无效的 flagsVPI_ERROR_OUT_OF_MEMORY
没有足够的资源来创建图像。VPI_ERROR_INVALID_CONTEXT

当前上下文已销毁。

VPI_ERROR_INVALID_OPERATION ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合)

pyr 

VPI_SUCCESS

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合操作成功执行。
  • ◆ vpiPyramidDestroy()

void vpiPyramidDestroy

VPIPyramid  ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合,
pyr 销毁图像金字塔实例以及它拥有的所有资源。
)

pyr 

金字塔句柄。允许传递 NULL,函数对此不执行任何操作。

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合金字塔不得被任何流使用,否则将导致未定义的行为。
  • ◆ vpiPyramidGetFlags()
位字段,指定金字塔的所需特性。uint64_t VPIStatus vpiPyramidGetFlags
  • ◆ vpiPyramidGetFlags()
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。VPIPyramid 
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
没有足够的资源来创建图像。VPI_ERROR_INVALID_CONTEXT

uint64_t * 

flags  ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合,
返回与金字塔关联的标志。 金字塔句柄。
)

pyr 

强制性参数,不能为 NULL。

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合金字塔不得被任何流使用,否则将导致未定义的行为。
  • ◆ vpiPyramidGetFlags()
位字段,指定金字塔的所需特性。fmt指向将写入标志的位置的指针。
  • ◆ vpiPyramidGetFlags()
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。返回值
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
没有足够的资源来创建图像。VPI_ERROR_INVALID_CONTEXT

VPI_ERROR_INVALID_ARGUMENT

输出 flags 指针为 NULL。 ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合,
pyr 为 NULL 或不代表 VPIPyramid 实例。 ◆ vpiPyramidGetFormat()
)

pyr 

VPIStatus vpiPyramidGetFormat

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合金字塔不得被任何流使用,否则将导致未定义的行为。
  • ◆ vpiPyramidGetFlags()
位字段,指定金字塔的所需特性。numLevelsVPIPyramid 
  • ◆ vpiPyramidGetFlags()
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
没有足够的资源来创建图像。VPI_ERROR_INVALID_CONTEXT

VPIImageFormat

fmt  ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合,
int32_t  返回金字塔层级的图像格式。,
pyr 为 NULL 或不代表 VPIPyramid 实例。 指向将写入图像格式的位置的指针。,
pyr 为 NULL 或不代表 VPIPyramid 实例。 返回值
)

pyr 

VPI_ERROR_INVALID_ARGUMENT

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合金字塔不得被任何流使用,否则将导致未定义的行为。
  • ◆ vpiPyramidGetFlags()
参数返回金字塔层级的图像格式。输出 fmt 为 NULL。
  • ◆ vpiPyramidGetNumLevels()
位字段,指定金字塔的所需特性。VPIStatus vpiPyramidGetNumLevelsVPIPyramid 
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。int32_t * 
没有足够的资源来创建图像。VPI_ERROR_INVALID_CONTEXT

numLevels 

获取图像金字塔层级计数。 ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合,
指向将设置为图像金字塔层级数的变量的指针。 返回值
)

pyr 

VPI_ERROR_INVALID_ARGUMENT

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合金字塔不得被任何流使用,否则将导致未定义的行为。
  • ◆ vpiPyramidGetFlags()
位字段,指定金字塔的所需特性。scale输出 numLevels 指针为 NULL。
  • ◆ vpiPyramidGetFlags()
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。◆ vpiPyramidGetSize()
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
没有足够的资源来创建图像。VPI_ERROR_INVALID_CONTEXT

VPIStatus vpiPyramidGetSize

VPIPyramid  ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合,
pyr int32_t 
)

pyr 

outSize

int32_t * 

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合金字塔不得被任何流使用,否则将导致未定义的行为。
  • ◆ vpiPyramidGetFlags()
  • outWidth
参数int32_t * outHeight 
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
outWidth,outHeight指向将填充所有图像金字塔层级的宽度和高度(分别)的数组的指针。如果其中任何一个为 NULL,则不返回相应的数据。
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。返回值
没有足够的资源来创建图像。VPI_ERROR_INVALID_ARGUMENT

outSize 超出有效范围。

outWidthoutHeight 不能为 NULL。 ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合,
pyr int32_t * ,
◆ vpiPyramidGetScale() VPIStatus vpiPyramidGetScale,
VPIPyramid  pyr
)

pyr 

float * 

scale 

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合金字塔不得被任何流使用,否则将导致未定义的行为。
参数int32_t * outHeight 
参数VPIStatus vpiPyramidGetScaleVPIPyramid 
位字段,指定金字塔的所需特性。pyrVPILockMode 
  • lock 
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
无效的 flags获取金字塔对象的锁。
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。返回值
outWidth,outHeight指向将填充所有图像金字塔层级的宽度和高度(分别)的数组的指针。如果其中任何一个为 NULL,则不返回相应的数据。
没有足够的资源来创建图像。VPI_ERROR_INVALID_ARGUMENT

只要持有锁,任何 VPI 以与锁定模式不兼容的模式访问图像的尝试都将导致异步流错误 VPI_ERROR_BUFFER_LOCKED

金字塔不得以与给定 mode 不兼容的模式锁定。 ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合)

pyr 

lock

锁定模式。

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合金字塔不得被任何流使用,否则将导致未定义的行为。
  • ◆ vpiPyramidGetFlags()
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
无效的 flags有效值为
无效的 flagsVPI_LOCK_READ
没有足够的资源来创建图像。VPI_ERROR_INVALID_CONTEXT

VPI_LOCK_WRITE

VPI_LOCK_READ_WRITE ( 请求的后端在当前上下文中未启用。 该字段必须是零个或多个以下标志的组合,
int32_t  返回值,
VPI_ERROR_BUFFER_LOCKED 金字塔已被流或用户锁定。
)

pyr 

VPI_SUCCESS

操作成功执行

◆ vpiPyramidLockData()

金字塔数据被清零。
参数该字段必须是零个或多个以下标志的组合VPIStatus vpiPyramidLockData
  • ◆ vpiPyramidGetFlags()
参数返回值VPIPyramid 
  • pyr
位字段,指定金字塔的所需特性。VPILockMode lock
  • ◆ vpiPyramidGetFlags()
通用对象标志
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。VPIImageBufferType 
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。bufType
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。VPIPyramidData
如果给定标志 VPI_REQUIRE_BACKENDS,则用户必须传递至少一个在当前上下文中启用与给定图像参数兼容的有效后端。pyr
无效的 flagsout 
VPI_ERROR_INVALID_IMAGE_FORMAT获取金字塔对象的锁,并返回可由主机访问的金字塔每一层的指针。
scale 超出有效范围。未给出后端且设置了 VPI_REQUIRE_BACKENDS
没有足够的资源来创建图像。VPI_ERROR_INVALID_CONTEXT