Hi35xx平台实现实时视频缩放的三种方案

在智能视频分析领域,海思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配置流程

  1. 创建VPSS组
xxx
HI_MPI_VPSS_CreateGrp(VpssGrp, NULL);
xxx
  1. 设置通道属性
//通过设置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);
  1. 启用通道缩放
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方案
处理延迟(预估值)<5ms3-5ms3-5ms
最大吞吐量1080P@30fps1080P@60fps1080P@60fps
资源占用专用硬件单元专用硬件单元专用硬件单元
典型应用场景数字图像处理如,灰度图、彩色图像,整数倍的缩放实时视频流处理,支持YUV格式实时视频流处理,支持YUV格式

选型建议:

  1. 单通道、三通道图像处理场景:优先选择IVE方案。
  2. YUV视频流低延迟需求:VPSS方案为最优解
  3. YUV视频流任意缩放比例:VGS方案

五、小结

在Hi35xx平台上,开发者可根据实际业务需求灵活选择缩放方案。IVE凭借硬件加速能力成为数字图像处理的优选,VPSS在视频流水线处理中展现高效特性,可以作为模型预处理的首选方案,而VGS则可作为VPSS通道不足的情况下的备用资源。建议在系统设计阶段进行多方案性能评测,结合具体业务场景实现最优资源配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深图智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值