参考资料网址/文档名
1《HiMPP V4.0媒体处理软件开发参考》
2https://blog.csdn.net/avideointerfaces/article/details/106850020/

VPSS(Video Process Sub-System)是视频处理子系统,它接收VI和解码模块发送过来的图像,可对图像进行FRC(Frame Rate Control)、CROP、Sharpen、3DNR、Scale、像素格式转换、LDC、Spread、固定角度旋转、任意角度旋转、鱼眼校正、Cover/Coverex、Overlayex、Mosaic、Mirror/Flip、HDR、Aspect Ratio等处理,并实现同源输出多路不同分辨率的图像数据用于编码、预览或抓拍。

笔者使用的IMX334摄像头采集得到的视频为3840x2160,在使用Yolov3对摄像头输入的视频流进行识别时需将传入Yolov3模型的图片大小设置为416*416像素。海思芯片中的VPSS、VGS、IVE都具有图像缩放功能,使用VPSS实现放缩功能最为简便,且不会影响原图。

VPSS对用户提供组(GROUP)的概念。最大可用数为VPSS_MAX_GRP_NUM个,各芯片的最大组数目有所不同,各GROUP分时复用VPSS硬件。每个VPSSGROUP包含多个通道,通道数目视方案实现有所不同。VPSS组的通道分为2种:物理通道和扩展通道。VPSS 硬件提供多个物理通道,每个通道具有缩放、裁剪等功能。扩展通道具备缩放功能,它通过绑定物理通道,将物理通道输出作为自己的输入,把图像缩放成用户设置的目标分辨率输出。物理通道水平、垂直最大支持15倍缩小,最大支持16倍放大;扩展通道水平、垂直最大支持30 倍缩小,最大支持16倍放大。

VPSS属性配置说明如下图所示:
在这里插入图片描述
在这里插入图片描述
实现从38402160到416416的缩小,vpss各参数配置情况如下:

stVpssGrpAttr.u32MaxW = 3840;
    stVpssGrpAttr.u32MaxH = 2160;
    stVpssGrpAttr.stFrameRate.s32SrcFrameRate = -1;//设为-1为不控制帧率,对视频流进行处理时此处需改动
    stVpssGrpAttr.stFrameRate.s32DstFrameRate = -1;
    stVpssGrpAttr.enDynamicRange = DYNAMIC_RANGE_SDR8;//8bit的动态范围
    stVpssGrpAttr.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;//此处应和VI中设置的格式要一致
    stVpssGrpAttr.bNrEn = HI_FALSE;//图像去噪,可选择是否开启
    memset(abChnEnable, 0, sizeof(abChnEnable));
    abChnEnable[0] = HI_TRUE;
    astVpssChnAttr[0].u32Width = 416;//此处设置所需的图片像素大小   
    astVpssChnAttr[0].u32Height = 416;//此处设置所需的图片像素大小     
    astVpssChnAttr[0].enChnMode = VPSS_CHN_MODE_AUTO;//auto模式为解码后自动送到vpss之后自动送到vo都是自动的
    astVpssChnAttr[0].enCompressMode = COMPRESS_MODE_NONE;//COMPRESS_MODE_SEG
    astVpssChnAttr[0].enDynamicRange = DYNAMIC_RANGE_SDR8;//动态范围的调整
    astVpssChnAttr[0].enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
    astVpssChnAttr[0].stFrameRate.s32SrcFrameRate = -1;
    astVpssChnAttr[0].stFrameRate.s32DstFrameRate = -1;
    astVpssChnAttr[0].u32Depth = 0;//vpss如果需要从里面拿数据,此处不能为0
    astVpssChnAttr[0].bMirror = HI_FALSE;
    astVpssChnAttr[0].bFlip = HI_FALSE;
    astVpssChnAttr[0].stAspectRatio.enMode = ASPECT_RATIO_NONE;    astVpssChnAttr[0].enVideoFormat = VIDEO_FORMAT_LINEAR;

    for(i=0; i<u32VdecChnNum; i++)
    {
        VpssGrp = i;
        s32Ret = SAMPLE_COMM_VPSS_Start(VpssGrp, &abChnEnable[0], &stVpssGrpAttr, &astVpssChnAttr[0]);
        if(s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("start VPSS fail for %#x!\n", s32Ret);
        }
}

注意:

  • Hi3519AV100 VPSS通道0支持放大和缩小,其它通道只支持缩小,但如果通道0缩小,则其它通道不能开启缩放功能,包括像素格式转换。
  • Hi3516CV500 /Hi3516AV300 /Hi3516DV300 /Hi3556V200 /Hi3559V200 /Hi3516EV200 VPSS通道0只支持放大,其它通道只支持缩小。
  • Hi3559AV100/Hi3559AV100ES VPSS所有通道都支持放大缩小。
  • 分块处理时如果通道输出宽度小于512,则不支持压缩输出。
  • Hi3516CV500/Hi3516AV300/Hi3516EV200无VDEC模块。
  • 仅Hi3559AV100/Hi3559AV100ES/Hi3519AV100有AVS模块。
Logo

海思 HiSpark 开发者社区是上海海思为开发者搭建的内容和交流平台,依托完备芯片解决方案、专业开发环境、开源/开放的软件资源与社区技术内容,构建完整服务生态开发者的闭环体系。

更多推荐