VPI - 视觉编程接口

3.2 版本

数据布局实用程序

数据结构

结构体  VPIPackingParams
 定义了编码在 VPIPacking 中的参数。 更多...
 

#define VPI_MAX_CHANNEL_COUNT   (4)
 最大 VPI 通道计数。
 
#define VPI_MAKE_SWIZZLE_ABBREV(x, y, z, w)
 创建用户定义的通道重排操作,使用缩写参数。 更多...
 
#define VPI_MAKE_SWIZZLE(x, y, z, w)
 创建用户定义的通道重排操作。 更多...
 

枚举

enum  VPIPacking
 定义了通道如何被打包到图像平面元素中。 更多...
 
enum  VPIDataType
 定义了通道数据类型。 更多...
 
enum  VPIMemLayout
 定义了 2D 平面像素在内存中如何布局。 更多...
 
enum  VPIChannel
 定义了格式通道名称。 更多...
 
enum  VPISwizzle
 定义了支持的通道重排操作。 更多...
 
enum  VPIEndianness
 一个 VPIPacking 值的字节序。 更多...
 

函数

VPISwizzle vpiMakeSwizzle (VPIChannel x, VPIChannel y, VPIChannel z, VPIChannel w)
 创建用户定义的 VPISwizzle 操作。 更多...
 
void vpiSwizzleGetChannels (VPISwizzle swizzle, VPIChannel *channels)
 获取通道重排的通道。 更多...
 
int vpiSwizzleGetChannelCount (VPISwizzle swizzle)
 获取给定通道重排指定的通道数。 更多...
 
VPIPacking vpiMakePacking (const VPIPackingParams *params)
 根据给定的参数返回预定义的 VPIPacking更多...
 
void vpiPackingGetParams (VPIPacking packing, VPIPackingParams *params)
 从格式打包中返回通道信息。 更多...
 
int vpiPackingGetComponentCount (VPIPacking packing)
 返回给定打包定义的组件数量。 更多...
 
void vpiPackingGetBitsPerComponent (VPIPacking packing, int32_t *bits)
 返回每个打包组件的位数。 更多...
 
int vpiPackingGetBitsPerPixel (VPIPacking packing)
 返回给定打包的每个像素的位数。 更多...
 

详细描述


数据结构文档

◆ VPIPackingParams

struct VPIPackingParams

定义了编码在 VPIPacking 中的参数。

定义于文件 DataLayout.h 的第 495 行。

+ VPIPackingParams 的协作图
数据字段
VPIEndianness 字节序 字中的组件排序。
VPISwizzle 通道重排 通道排序。


int bits[VPI_MAX_CHANNEL_COUNT] 每个通道的位数。

如果通道不存在,则对应的 bits==0。

宏定义文档

◆ VPI_MAKE_SWIZZLE_ABBREV

#define VPI_MAKE_SWIZZLE_ABBREV (   x,
  y,
  z,
 
)

#include <vpi/DataLayout.h>

创建用户定义的通道重排操作,使用缩写参数。

此宏用于创建用户定义的通道重排操作。参数通过 X, Y, Z, 0, 1 字面指定。它们对应于 VPIChannel 值。 例子

VPISwizzle
定义了支持的通道重排操作。
#define VPI_MAKE_SWIZZLE_ABBREV(x, y, z, w)
创建用户定义的通道重排操作,使用缩写参数。
参数
[in]x将对应于第一个组件的通道,不带 VPI_CHANNEL 前缀。
[in]y将对应于第二个组件的通道,不带 VPI_CHANNEL 前缀。
[in]z将对应于第三个组件的通道,不带 VPI_CHANNEL 前缀。
[in]w将对应于第四个组件的通道,不带 VPI_CHANNEL 前缀。
返回值
用户定义的 VPISwizzle 操作。

定义于文件 DataLayout.h 的第 419 行。

◆ VPI_MAKE_SWIZZLE

#define VPI_MAKE_SWIZZLE (   x,
  y,
  z,
 
)

#include <vpi/DataLayout.h>

创建用户定义的通道重排操作。

此宏用于创建用户定义的通道重排操作,如果它不是预定义的。 例子

#define VPI_MAKE_SWIZZLE(x, y, z, w)
创建用户定义的通道重排操作。
@ VPI_CHANNEL_Z
选择颜色模型的第三个通道。
@ VPI_CHANNEL_0
不选择通道。
@ VPI_CHANNEL_W
选择颜色模型的第四个通道。
@ VPI_CHANNEL_Y
选择颜色模型的第二个通道。
参数
[in]x将对应于第一个组件的通道。
[in]y将对应于第二个组件的通道。
[in]z将对应于第三个组件的通道。
[in]w将对应于第四个组件的通道。
返回值
用户定义的 VPISwizzle 操作。

定义于文件 DataLayout.h 的第 439 行。

枚举类型文档

◆ VPIPacking

enum VPIPacking

#include <vpi/DataLayout.h>

定义了通道如何被打包到图像平面元素中。

打包编码了平面元素有多少个通道,以及它们在内存中如何排列。

最多 4 个通道(用 X、Y、Z、W 表示)可以打包到一个图像平面元素中,每个通道占用指定的位数。

当两个通道一个接一个地指定时,它们从最高有效位到最低有效位排序。 字用下划线分隔。 例如

X8Y8Z8W8 = 一个 32 位字,包含 4 个通道,每个通道 8 位。

在小端架构中

     Address  0   ||  1   ||  2   ||  3
           WWWWWWWWZZZZZZZZYYYYYYYYXXXXXXXX

在大端架构中

     Address  0   ||  1   ||  2   ||  3
           XXXXXXXXYYYYYYYYZZZZZZZZWWWWWWWW

X8_Y8_Z8_W8 = 四个连续的 8 位字,对应于 4 个通道,每个通道 8 位。

在小端架构中

     Address  0   ||  1   ||  2   ||  3
           XXXXXXXXYYYYYYYYZZZZZZZZWWWWWWWW

在大端架构中

     Address  0   ||  1   ||  2   ||  3
           XXXXXXXXYYYYYYYYZZZZZZZZWWWWWWWW

在字小于 8 位的情况下(例如,X1 1 位通道),通道在字内从 LSB 到 MSB 排序。

注意
另请注意以下等价性
在小端中:X8_Y8_Z8_W8 = W8Z8Y8X8。
在大端中:X8_Y8_Z8_W8 = X8Y8Z8W8。

某些格式允许在像素的水平坐标为偶数或奇数时使用不同的打包。 例如,YUV422 打包格式的每个像素都包含一个 Y 通道,而只有偶数像素包含 U 通道,奇数像素包含 V 通道。 这种格式使用双下划线来分隔偶数像素和奇数像素。 刚刚描述的打包可能被称为 X8_Y8__X8_Z8,其中 X = 亮度,Y = U 色度,Z = V 色度。

枚举器
VPI_PACKING_0 

没有通道。

VPI_PACKING_X1 

一个 1 位通道。

VPI_PACKING_X2 

一个 2 位通道。

VPI_PACKING_X4 

一个 4 位通道。

VPI_PACKING_X8 

一个 8 位通道。

VPI_PACKING_X4Y4 

一个字中的两个 4 位通道。

VPI_PACKING_X3Y3Z2 

一个 8 位字中的三个 3 位、3 位和 2 位通道。

VPI_PACKING_X16 

一个 16 位通道。

VPI_PACKING_b6X10 

一个 16 位字中的一个 LSB 10 位通道。

VPI_PACKING_X10b6 

一个 16 位字中的一个 MSB 10 位通道。

VPI_PACKING_b4X12 

一个 16 位字中的一个 LSB 12 位通道。

VPI_PACKING_X12b4 

一个 16 位字中的一个 MSB 12 位通道。

VPI_PACKING_b2X14 

一个 16 位字中的一个 LSB 14 位通道。

VPI_PACKING_X8_Y8 

两个 8 位字中的两个 8 位通道。

VPI_PACKING_X5Y5Z6 

一个 16 位字中的三个 5 位、5 位和 6 位通道。

VPI_PACKING_X5Y6Z5 

一个 16 位字中的三个 5 位、6 位和 5 位通道。

VPI_PACKING_X6Y5Z5 

一个 16 位字中的三个 6 位、5 位和 5 位通道。

VPI_PACKING_b4X4Y4Z4 

一个 16 位字中的三个 4 位通道。

VPI_PACKING_b1X5Y5Z5 

一个 16 位字中的三个 5 位通道。

VPI_PACKING_X5Y5b1Z5 

一个 16 位字中的三个 5 位通道。

VPI_PACKING_X1Y5Z5W5 

一个 16 位字中的四个 1 位、5 位、5 位和 5 位通道。

VPI_PACKING_X4Y4Z4W4 

一个 16 位字中的四个 4 位通道。

VPI_PACKING_X5Y1Z5W5 

一个 16 位字中的四个 5 位、1 位、5 位和 5 位通道。

VPI_PACKING_X5Y5Z1W5 

一个 16 位字中的四个 5 位、5 位、1 位和 5 位通道。

VPI_PACKING_X5Y5Z5W1 

一个 16 位字中的四个 5 位、5 位、5 位和 1 位通道。

VPI_PACKING_X8_Y8__X8_Z8 

2 个像素,每个像素 2 个 8 位通道,总共 4 个 8 位字。

VPI_PACKING_Y8_X8__Z8_X8 

2 个像素,每个像素 2 个交换的 8 位通道,总共 4 个 8 位字。

VPI_PACKING_X24 

一个 24 位通道。

VPI_PACKING_X8_Y8_Z8 

三个 8 位字中的三个 8 位通道。

VPI_PACKING_X32 

一个 32 位通道。

VPI_PACKING_b12X20 

一个 32 位字中的一个 LSB 20 位通道。

VPI_PACKING_X16_Y16 

两个 16 位字中的两个 16 位通道。

VPI_PACKING_X10b6_Y10b6 

两个 16 位字中的两个 MSB 10 位通道。

VPI_PACKING_X12b4_Y12b4 

两个 16 位字中的两个 MSB 12 位通道。

VPI_PACKING_X10Y11Z11 

一个 32 位字中的三个 10 位、11 位和 11 位通道。

VPI_PACKING_X11Y11Z10 

一个 32 位字中的三个 11 位、11 位和 10 位通道。

VPI_PACKING_X8_Y8_Z8_W8 

一个 32 位字中的四个 8 位通道。

VPI_PACKING_X2Y10Z10W10 

一个 32 位字中的四个 2 位、10 位、10 位和 10 位通道。

VPI_PACKING_X10Y10Z10W2 

一个 32 位字中的四个 10 位、10 位、10 位和 2 位通道。

VPI_PACKING_X48 

一个 48 位通道。

VPI_PACKING_X16_Y16_Z16 

三个 16 位字中的三个 16 位通道。

VPI_PACKING_X64 

一个 64 位通道。

VPI_PACKING_X32_Y32 

两个 32 位字中的两个 32 位通道。

VPI_PACKING_X16_Y16_Z16_W16 

一个 64 位字中的四个 16 位通道。

VPI_PACKING_X96 

一个 96 位通道。

VPI_PACKING_X32_Y32_Z32 

三个 32 位字中的三个 32 位通道。

VPI_PACKING_X128 

一个 128 位通道。

VPI_PACKING_X64_Y64 

两个 64 位字中的两个 64 位通道。

VPI_PACKING_X32_Y32_Z32_W32 

三个 32 位字中的四个 32 位通道。

VPI_PACKING_X192 

一个 192 位通道。

VPI_PACKING_X64_Y64_Z64 

三个 64 位字中的三个 64 位通道。

VPI_PACKING_X256 

一个 128 位通道。

VPI_PACKING_X64_Y64_Z64_W64 

四个 64 位字中的四个 64 位通道。

VPI_PACKING_INVALID 

表示无效的打包。

定义于文件 DataLayout.h 的第 132 行。

◆ VPIDataType

#include <vpi/DataLayout.h>

定义了通道数据类型。

枚举器
VPI_DATA_TYPE_INVALID 

表示无效的数据类型。

在某些函数中用于表示错误返回值。

VPI_DATA_TYPE_UNSIGNED 

通道是无符号整数值。

VPI_DATA_TYPE_SIGNED 

通道是有符号整数值。

VPI_DATA_TYPE_FLOAT 

通道是浮点数值。

VPI_DATA_TYPE_FLOATISP 

NVIDIA 的专有浮点格式。

定义于文件 DataLayout.h 的第 264 行。

◆ VPIMemLayout

#include <vpi/DataLayout.h>

定义了 2D 平面像素在内存中如何布局。

这定义了如何寻址像素,即,给定其 \((x,y)\) 坐标,其内存地址是什么。 块线性格式具有专有的内存表示形式,不应由用户直接寻址。

枚举器
VPI_MEM_LAYOUT_INVALID 

表示无效的内存布局。

VPI_MEM_LAYOUT_PITCH_LINEAR 

像素以行优先顺序布局。

\((x,y) = y \times \mathit{pitch} + x \times \mathit{pixel stride}\)。

VPI_MEM_LAYOUT_BLOCK1_LINEAR 

像素以块线性格式布局,高度 = 1。

VPI_MEM_LAYOUT_BLOCK2_LINEAR 

像素以块线性格式布局,高度 = 2。

VPI_MEM_LAYOUT_BLOCK4_LINEAR 

像素以块线性格式布局,高度 = 4。

VPI_MEM_LAYOUT_BLOCK8_LINEAR 

像素以块线性格式布局,高度 = 8。

VPI_MEM_LAYOUT_BLOCK16_LINEAR 

像素以块线性格式布局,高度 = 16。

VPI_MEM_LAYOUT_BLOCK32_LINEAR 

像素以块线性格式布局,高度 = 32。

VPI_MEM_LAYOUT_BLOCK_LINEAR 

默认块线性格式。

保证在所有支持块线性格式的算法中有效。

VPI_MEM_LAYOUT_PL 

有用的别名。

VPI_MEM_LAYOUT_BL 

有用的别名。

定义于文件 DataLayout.h 的第 282 行。

◆ VPIChannel

enum VPIChannel

#include <vpi/DataLayout.h>

定义了格式通道名称。

通道与颜色模型无关。

枚举器
VPI_CHANNEL_INVALID 

表示无效的通道重排通道。

VPI_CHANNEL_0 

不选择通道。

VPI_CHANNEL_X 

选择颜色模型的第一个通道。

VPI_CHANNEL_Y 

选择颜色模型的第二个通道。

VPI_CHANNEL_Z 

选择颜色模型的第三个通道。

VPI_CHANNEL_W 

选择颜色模型的第四个通道。

VPI_CHANNEL_1 

将相应的通道设置为其最大值。

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

◆ VPISwizzle

enum VPISwizzle

#include <vpi/DataLayout.h>

定义了支持的通道重排操作。

这些操作将输入向量 \((x,y,z,w)\) 映射到输出向量 \((x',y',z',w')\)。 任何输出通道都可以选择任何输入通道,或常量零或一。 例如,通道重排 “X000” 选择第一个通道,而通道重排 “ZYXW” 交换 X 和 Z 通道,这是 RGBA 和 BGRA 图像格式之间转换所需要的。

枚举器
VPI_SWIZZLE_INVALID 

表示无效的通道重排。

VPI_SWIZZLE_0000 

通道重排操作。

VPI_SWIZZLE_1000 

通道重排操作。

VPI_SWIZZLE_0001 

通道重排操作。

VPI_SWIZZLE_XYZW 

通道重排操作。

VPI_SWIZZLE_ZYXW 

通道重排操作。

VPI_SWIZZLE_WXYZ 

通道重排操作。

VPI_SWIZZLE_WZYX 

通道重排操作。

VPI_SWIZZLE_YZWX 

通道重排操作。

VPI_SWIZZLE_XYZ1 

通道重排操作。

VPI_SWIZZLE_XYZ0 

通道重排操作。

VPI_SWIZZLE_YZW1 

通道重排操作。

VPI_SWIZZLE_XXX1 

通道重排操作。

VPI_SWIZZLE_XZY1 

通道重排操作。

VPI_SWIZZLE_ZYX1 

通道重排操作。

VPI_SWIZZLE_ZYX0 

通道重排操作。

VPI_SWIZZLE_WZY1 

通道重排操作。

VPI_SWIZZLE_X000 

通道重排操作。

VPI_SWIZZLE_0X00 

通道重排操作。

VPI_SWIZZLE_00X0 

通道重排操作。

VPI_SWIZZLE_000X 

通道重排操作。

VPI_SWIZZLE_Y000 

通道重排操作。

VPI_SWIZZLE_0Y00 

通道重排操作。

VPI_SWIZZLE_00Y0 

通道重排操作。

VPI_SWIZZLE_000Y 

通道重排操作。

VPI_SWIZZLE_0XY0 

通道重排操作。

VPI_SWIZZLE_XXXY 

通道重排操作。

VPI_SWIZZLE_YYYX 

通道重排操作。

VPI_SWIZZLE_0YX0 

通道重排操作。

VPI_SWIZZLE_X00Y 

通道重排操作。

VPI_SWIZZLE_Y00X 

通道重排操作。

VPI_SWIZZLE_X001 

通道重排操作。

VPI_SWIZZLE_XY01 

通道重排操作。

VPI_SWIZZLE_XY00 

通道重排操作。

VPI_SWIZZLE_0XZ0 

通道重排操作。

VPI_SWIZZLE_0ZX0 

通道重排操作。

VPI_SWIZZLE_XZY0 

通道重排操作。

VPI_SWIZZLE_YZX1 

通道重排操作。

VPI_SWIZZLE_ZYW1 

通道重排操作。

VPI_SWIZZLE_0YX1 

通道重排操作。

VPI_SWIZZLE_XYXZ 

通道重排操作。

VPI_SWIZZLE_YXZX 

通道重排操作。

VPI_SWIZZLE_XZ00 

通道重排操作。

VPI_SWIZZLE_WYXZ 

通道重排操作。

VPI_SWIZZLE_YX00 

通道重排操作。

VPI_SWIZZLE_YX01 

通道重排操作。

VPI_SWIZZLE_00YX 

通道重排操作。

VPI_SWIZZLE_00XY 

通道重排操作。

VPI_SWIZZLE_0XY1 

通道重排操作。

VPI_SWIZZLE_0X01 

通道重排操作。

VPI_SWIZZLE_YZXW 

通道重排操作。

VPI_SWIZZLE_YW00 

通道重排操作。

VPI_SWIZZLE_XYW0 

通道重排操作。

VPI_SWIZZLE_YZW0 

通道重排操作。

定义于文件 DataLayout.h 的第 341 行。

◆ VPIEndianness

#include <vpi/DataLayout.h>

一个 VPIPacking 值的字节序。

枚举器
VPI_INVALID_ENDIAN 

无效的字节序值。

VPI_HOST_ENDIAN 

主机机器的字节序。

VPI_BIG_ENDIAN 

大端,最高有效字节具有较低的内存地址。

定义于文件 DataLayout.h 的第 487 行。

函数文档

◆ vpiMakeSwizzle()

VPISwizzle vpiMakeSwizzle ( VPIChannel  x,
VPIChannel  y,
VPIChannel  z,
VPIChannel  w 
)

#include <vpi/DataLayout.h>

创建用户定义的 VPISwizzle 操作。

这与 VPI_MAKE_SWIZZLE 类似,但接受通道重排通道作为运行时变量。

参数
[in]x将对应于第一个组件的通道。
[in]y将对应于第二个组件的通道。
[in]z将对应于第三个组件的通道。
[in]w将对应于第四个组件的通道。
返回值
由给定通道顺序定义的通道重排操作。
返回值
VPI_SWIZZLE_INVALID输入通道无效。

◆ vpiSwizzleGetChannels()

void vpiSwizzleGetChannels ( VPISwizzle  通道重排,
VPIChannel channels 
)

#include <vpi/DataLayout.h>

获取通道重排的通道。

例如,给定通道重排 VPI_SWIZZLE_YZWX,它返回 VPI_CHANNEL_YVPI_CHANNEL_ZVPI_CHANNEL_WVPI_CHANNEL_X

参数
[in]通道重排要查询的通道重排。
[out]channels包含 4 个元素的输出通道数组。

◆ vpiSwizzleGetChannelCount()

int vpiSwizzleGetChannelCount ( VPISwizzle  通道重排)

#include <vpi/DataLayout.h>

获取给定通道重排指定的通道数。

只有以下项算作通道

参数
[in]通道重排要查询的通道重排。
返回值
通道重排指定的通道计数。

◆ vpiMakePacking()

VPIPacking vpiMakePacking ( const VPIPackingParams params)

#include <vpi/DataLayout.h>

根据给定的参数返回预定义的 VPIPacking

此函数在运行时根据通道特性计算 VPIPacking

参数
[in]params打包参数。 如果 VPIPackingParams::swizzle 设置为 VPI_SWIZZLE_0000VPI_SWIZZLE_INVALID,则通道重排将从 VPIPackingParams::bits 推断
返回值
params 对应的打包枚举。
返回值
VPI_PACKING_INVALID请求的打包未定义或格式错误。
VPI_PACKING_INVALIDparams 为 NULL。

◆ vpiPackingGetParams()

void vpiPackingGetParams ( VPIPacking  packing,
VPIPackingParams params 
)

#include <vpi/DataLayout.h>

从格式打包中返回通道信息。

参数
[in]packing要查询的格式打包。
[out]params打包参数。 允许传递 NULL,函数对此不执行任何操作。

◆ vpiPackingGetComponentCount()

int vpiPackingGetComponentCount ( VPIPacking  packing)

#include <vpi/DataLayout.h>

返回给定打包定义的组件数量。

参数
[in]packing要查询的格式打包。
返回值
给定格式打包的组件数量。 其值介于 0 到 4 之间。

◆ vpiPackingGetBitsPerComponent()

void vpiPackingGetBitsPerComponent ( VPIPacking  packing,
int32_t *  bits 
)

#include <vpi/DataLayout.h>

返回每个打包组件的位数。

参数
[in]packing要查询的格式打包。
[out]bits指向包含 4 个元素的 int32_t 数组的指针,输出将存储在该数组中。 允许传递 NULL,函数对此不执行任何操作。

◆ vpiPackingGetBitsPerPixel()

int vpiPackingGetBitsPerPixel ( VPIPacking  packing)

#include <vpi/DataLayout.h>

返回给定打包的每个像素的位数。

参数
[in]packing要查询的格式打包。
返回值
给定打包的每个像素的总位数。 它是所有打包通道占用的位数之和。