在智能视频分析领域,海思Hi35xx芯片凭借其高品质的ISP成像以及稳定的NPU推理能力,已成为边缘计算场景的热门选择。在实际应用中,输入神经网络模型的分辨率(如640×640或512×512)与原始视频分辨率(1080P/720P)存在显著差异,高效的视频缩放技术成为提升系统性能的关键。本文深入解析Hi35xx平台支持的三种视频缩放方案,从技术原理、API实现到对比分析,为开发者提供全面的技术选型参考。
一、使用IVE模块实现硬件加速缩放
1.1 技术原理
IVE(Intelligent Video Engine)是海思专为智能视频处理设计的硬件加速模块,其Resize功能采用双线性插值算法,支持多路并行处理,尤其适合高吞吐量场景。IVE通过专用硬件单元实现像素坐标映射和加权计算,在保证图像质量的同时显著降低CPU负载。
1.2 API详解
核心接口为HI_MPI_IVE_Resize2
,支持批量处理和多通道输入:
HI_S32 HI_MPI_IVE_Resize2(
IVE_HANDLE *pIveHandle, // 任务句柄
IVE_SRC_IMAGE_S *pstSrc, // 源图像结构体
IVE_DST_IMAGE_S *pstDst, // 目标图像结构体
IVE_RESIZE2_CTRL_S *pstCtrl, // 控制参数
HI_BOOL bInstant // 同步模式标志
);
关键参数说明:
pstSrc
:输入图像,支持U8C1(单通道灰度图)、U8C3(3通道彩色图)格式,需满足16字节对齐pstDst
:输出图像,格式需与输入一致,跨度须为16的倍数pstCtrl
:控制结构体,定义缩放模式和插值算法
typedef struct {
IVE_RESIZE_MODE_E enMode; // 缩放模式(区域裁剪/全图缩放)
HI_U32 u32HorFac; // 水平缩放系数(Q12定点数)
HI_U32 u32VerFac; // 垂直缩放系数(Q12定点数)
HI_U16 u16TmpBufSize; // 临时缓冲区大小
} IVE_RESIZE2_CTRL_S;
1.3 示例代码
IVE_HANDLE iveHandle;
IVE_SRC_IMAGE_S stSrc;
IVE_DST_IMAGE_S stDst;
IVE_RESIZE2_CTRL_S stCtrl;
// 初始化源图像
stSrc.u32Width = 1920;
stSrc.u32Height = 1080;
stSrc.au64PhyAddr[0] = INPUT_PHY_ADDR;
stSrc.au64VirAddr[0] = INPUT_VIR_ADDR;
// 配置目标图像(640x640)非等比例缩放,实际中不建议
stDst.u32Width = 640;
stDst.u32Height = 640;
stDst.au64PhyAddr[0] = OUTPUT_PHY_ADDR;
stDst.au64VirAddr[0] = OUTPUT_VIR_ADDR;
// 设置控制参数
stCtrl.enMode = IVE_RESIZE_MODE_FULL;
stCtrl.u32HorFac = (1920 << 12) / 640; // Q12定点数计算
stCtrl.u32VerFac = (1080 << 12) / 640;
stCtrl.u16TmpBufSize = 1024;
// 执行缩放
HI_S32 ret = HI_MPI_IVE_Resize2(&iveHandle, &stSrc, &stDst, &stCtrl, HI_TRUE);
if (ret != HI_SUCCESS) {
printf("IVE Resize failed: 0x%x\n", ret);
}
二、VPSS通道功能实现实时缩放
2.1 技术原理
VPSS(Video Process Sub-System)提供硬件级视频处理流水线,通过通道绑定实现零拷贝缩放。该方案利用VPSS的通道特性,在视频进入VPSS模块后直接进行分辨率转换,特别适合实时视频流处理。
2.2 VPSS配置流程
- 创建VPSS组:
xxx
HI_MPI_VPSS_CreateGrp(VpssGrp, NULL);
xxx
- 设置通道属性:
//通过设置VPSS的输出分辨率实现视频的实时缩放功能
VPSS_CHN_ATTR_S stChnAttr;
stChnAttr.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
stChnAttr.u32Width = 640;
stChnAttr.u32Height = 640;
stChnAttr.enVideoFormat = VIDEO_FORMAT_LINEAR;
HI_MPI_VPSS_SetChnAttr(VpssGrp, VpssChn, &stChnAttr);
- 启用通道缩放:
VPSS_CHN_MODE_S stChnMode;
stChnMode.enChnMode = VPSS_CHN_MODE_USER;
stChnMode.enCompressMode = COMPRESS_MODE_NONE;
HI_MPI_VPSS_SetChnMode(VpssGrp, VpssChn, &stChnMode);
三、VGS模块实现灵活视频缩放
3.1 技术特点
VGS(Video Graphics Sub-System)专为复杂图形操作设计,支持旋转、镜像、马赛克等特效。其缩放功能的底层采用可编程DSP核进行实现,支持非整数倍缩放和动态ROI调整。
3.2 关键API调用
xxxx
HI_S32 HI_MPI_VGS_BeginJob(VGS_HANDLE *phHandle);
xxxx
HI_S32 HI_MPI_VGS_AddScaleTask(
VGS_HANDLE hHandle,
const VGS_TASK_ATTR_S *pstTask
);
xxx
HI_S32 HI_MPI_VGS_EndJob(VGS_HANDLE hHandle);
任务属性结构体:
typedef struct {
VGS_SCALE_COEF_E enScaleCoef; // 插值系数(BILINEAR/NEAREST)
RECT_S stSrcRect; // 源图像区域
RECT_S stDstRect; // 目标区域
HI_BOOL bInstant; // 同步执行标志
} VGS_TASK_ATTR_S;
四、方案对比分析
评估维度 | IVE方案 | VPSS方案 | VGS方案 |
---|---|---|---|
处理延迟(预估值) | <5ms | 3-5ms | 3-5ms |
最大吞吐量 | 1080P@30fps | 1080P@60fps | 1080P@60fps |
资源占用 | 专用硬件单元 | 专用硬件单元 | 专用硬件单元 |
典型应用场景 | 数字图像处理如,灰度图、彩色图像,整数倍的缩放 | 实时视频流处理,支持YUV格式 | 实时视频流处理,支持YUV格式 |
选型建议:
- 单通道、三通道图像处理场景:优先选择IVE方案。
- YUV视频流低延迟需求:VPSS方案为最优解
- YUV视频流任意缩放比例:VGS方案
五、小结
在Hi35xx平台上,开发者可根据实际业务需求灵活选择缩放方案。IVE凭借硬件加速能力成为数字图像处理的优选,VPSS在视频流水线处理中展现高效特性,可以作为模型预处理的首选方案,而VGS则可作为VPSS通道不足的情况下的备用资源。建议在系统设计阶段进行多方案性能评测,结合具体业务场景实现最优资源配置。