7.3.6 视频处理
概述
VPS(Video Process System)是视频处理系统,支持对图像进行缩小、放大、裁剪、旋转、GDC 矫正、帧率控制以及金字塔图像输出。
功能描述
基本概念
-
Group
VPS对用户提供组的概念,各个Group分时复用IPU,GDC,PYM硬件,可以将多个VPS Group进行级联使用。 -
Channel
VPS的通道,一路通道代表VPS的一路输出。输出的通道主要分为普通图像通道和金字塔图像通道,普通通道输出缩放裁剪或旋转后的单层数据,金字塔通道输出多层金字塔缩放数据。
功能描述

VPS可以通过调用 系统控制 提供的绑定接口与其他模块绑定,输入可以与VIN、VDEC模块绑定,VPS输出可以与VOT、VENC模块绑定,前者为VPS的输入源,后者为VPS的接收者,也可以与另一个VPS绑定实现更多的通道;支持处理用户回灌的图像数据。用户可以通过VPS接口对Group进行管理,每个Group仅可以与一个输入源绑定,每个Channel可以与不同的模块绑定。 VPS与VIN绑定场景下,需要调用HB_SYS_SetVINVPSMode 来配置VIN与VPS之间在线或离线的不同模式。

VPS硬件由一个IPU,一个PYM,两个GDC组成。共有 7 路输出Channel(chn0chn6),chn0chn4 可以实现downscale,chn5 可以实现upscale,chn0~chn5 均可实现裁剪(ROI)、旋转、矫正、帧率控制,chn6 为金字塔 online Channel。虚框为硬件复用,其中OSD灰色块为 CPU 叠加,其余三个米色块为硬件叠加。
-
Upscale 功能:
尺寸限制请参考下表
支持水平方向最大 1.5 倍放大,宽度需为 4 的倍数,最小 32x32,最大 4096
支持垂直方向最大 1.5 倍放大, 高度需为偶数,最小 32x32,最大 4096
只有 channel5 支持 Upscale 功能
-
Downscale 功能:
尺寸限制参考下表
水平方向最大缩小为原尺寸的 1/8(大于 1/8), 最小 32x32,最大 4096
垂直方向最大缩小为原尺寸的 1/8(大于 1/8), 最小 32x32,最大 4096
Channel0~channel4 支持 Downscale 功能
-
IPU 各通道的尺寸限制如下:
| Scaler | FIFO(bytes) | Resolution(pixel) |
|---|---|---|
| Scaler 5 (IPU US) | 4096 | 8M |
| Scaler 2 (IPU DS2) | 4096 | 8M |
| Scaler 1 (IPU DS1) | 2048 | 2M |
| Scaler 3 (IPU DS3) | 2048 | 2M |
| Scaler 4 (IPU DS4) | 1280 | 1M |
| Scaler 0 (IPU DS0) | 1280 | 1M |
-
Crop 功能:
VPS可以对输入的图形进行裁剪,选择裁剪后的 ROI 区域去做放大或者缩小 -
PYM 金字塔处理功能:
最大输入图像宽度 4096,最大输入图像高度 4096
最小输入图像宽度 64,最小输入图像高度 64
最大输出图像宽度 4096,最大输出图像高度 4096
最小输出图像宽度 48,最小输出图像高度 32
缩小图像层数 24(0
23)层,其中 0、4、8、12、16、20 层为基础 Base 层,基础层每一层的 size 为上一层的 1/2;其余层为 ROI 层,ROI 层基于 Base 层作缩小(1、2、3 层基于 Base0 层,5、6、7 层基于 Base4 层,以此类推)各层可以单独使能,缩放区域、缩放系数可以配置放大图像层数为 6(2429)层,放大比例固定,分别为 1.28、1.6、2、2.56、3.2、4 倍。PYM通道也可以为 0~5,此时为非 online 通道。每一个 group 下最多使用一个
PYM。
注意事项
-
PYM硬件要求最少使能 BASE0 层与 BASE4 层; -
PYM在 online 输入(chn6)时,PYM ds 所有层(023)累计输出数据量不得大于输入数据量的 2.5 倍,us 层(2429)累计宽之和不得超过输入宽,否则会有未知风险; -
IPU绑定了PYM后,不能再绑定VOT/VPS/VENC等模块 ; -
Rotate旋转功能:VPS支持旋转 90 度、180 度、270 度,支持Group旋转与Chnnel旋转(二选一),Group旋转时VPS所有输出通道均旋转,Chnnel旋转可以将 chn0~chn5 中任意两路旋转,PYM处理过的通道不可以旋转。 -
Gdc矫正功能:VPS支持输入矫正文件作图形畸变矫正,支持Group矫正与Chnnel矫正(二选一),Group矫正时VPS所有输出通道均作矫正,Chnnel矫正可以在 chn0~chn5 中任意两路作矫正。 -
帧率控制功能:
VPS的 channel0~5 支持帧率控制,可以输出小于等于输入帧率的任意帧率。
API 参考
HB_VPS_CreateGrp
【函数声明】
int HB_VPS_CreateGrp(int VpsGrp, const VPS_GRP_ATTR_S *grpAttr);
【功能描述】
创建一个 VPS Group
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
| grpAttr | Group 属性指针 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
VPS 最多可以创建 8 个 Group;Group 属性主要包含输入的宽、高和 GDC 的 buf 深度。
【参考代码】
VPS 参考代码
HB_VPS_DestroyGrp
【函数声明】
int HB_VPS_DestroyGrp(int VpsGrp);
【功能描述】
销毁一个 VPS Group
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
Group 必须已经创建
【参考代码】
无
HB_VPS_StartGrp
【函数声明】
int HB_VPS_StartGrp(int VpsGrp);
【功能描述】
启动 VPS Group 处理
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
Group 必须已经创建
【参考代码】
VPS 参考代码
HB_VPS_StopGrp
【函数声明】
int HB_VPS_StopGrp(int VpsGrp);
【功能描述】
停止 VPS Group 处理
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
Group 必须已经创建并且已经启动
【参考代码】
VPS 参考代码
HB_VPS_GetGrpAttr
【函数声明】
int HB_VPS_GetGrpAttr(int VpsGrp, VPS_GRP_ATTR_S *grpAttr);
【功能描述】
获取 VPS Group 属性
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
| grpAttr | 属性结构体指针 | 输出 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
无
【参考代码】
无
HB_VPS_SetGrpAttr
【函数声明】
int HB_VPS_SetGrpAttr(int VpsGrp, const VPS_GRP_ATTR_S *grpAttr);
【功能描述】
设置 VPS Group 属性
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
| grpAttr | 属性结构体指针 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
无
【参考代码】
VPS 参考代码
HB_VPS_SetGrpRotate
【函数声明】
int HB_VPS_SetGrpRotate(int VpsGrp, ROTATION_E enRotation);
【功能描述】
设置 VPS Group 旋转功能,使 VPS 的所有输出都旋转
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
| enRotation | 旋转参数 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
该接口需要在 HB_VPS_SetChnAttr 之前调用,GroupRotate 使能之后禁止使能 ChnRotate;isp 绑定 ipu 必须得是 offline 模式
【参考代码】
VPS 参考代码
HB_VPS_GetGrpRotate
【函数声明】
int HB_VPS_Get GrpRotate(int VpsGrp, ROTATION_E *enRotation);
【功能描述】
获取 VPS Group 旋转功能属性
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
| enRotation | 旋转功能参数指针 | 输出 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
无
【参考代码】
无
HB_VPS_SetGrpRotateRepeat
【函数声明】
int HB_VPS_SetGrpRotateRepeat(int VpsGrp, ROTATION_E enRotation);
【功能描述】
动态组旋转:该接口会保存当前 group 及后面绑定的多个 VPS group 所有通道配置,根据传的 enRotation,自动重新计算旋转后所有通道的尺寸、roi 区域,重新初始化 group,重新绑定 VIN;
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
| enRotation | 旋转参数 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非 0 | 失败 |
【注意事项】
该接口暂时不支持配置过 PYM 的场景
【参考代码】
无
HB_VPS_SetGrpGdc
【函数声明】
int HB_VPS_SetGrpGdc(int VpsGrp, char* buf_addr, uint32_t buf_len, ROTATION_E enRotation)
【功能描述】
设置 VPS Group GDC 矫正功能,使 VPS 的所有输出都有矫正效果
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpsGrp | Group 号 | 输入 |
| buf_addr | 矫正文件地址 | 输入 |
| buf_len | 矫正文件长度 | 输入 |
| enRotation |