海思Hi3559(十一)——VPSS图片放缩
·
| 参考资料 | 网址/文档名 |
|---|---|
| 1 | 《HiMPP V4.0媒体处理软件开发参考》 |
| 2 | https://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模块。
更多推荐

所有评论(0)