华为的Ascend CL 中,数据预处理包含两大工具 AIPP 和 DVPP。
其中 DVPP中主要提供了5个功能模块,包括视频编码模块(VENC)、视频解码模块(VDEC)、JPEG图片解码(JPEGE)、JPEG图片解码(JPEGD)、视觉预处理模块(VPC)
1. JPEG图片解码
功能
- JPEGD(JPEG decoder)实现.jpg、.jpeg、.JPG、.JPEG图片的解码,对于硬件不支持的格式,会使用软件解码。
- 针对不同的源图编码格式,解码后,输出如下格式的图片:
jpeg(YUV444SP) -> YUV444SP V在前U在后 、YUV420 SP V在前U在后、YUV420SP U在前V在后;
jpeg(YUV422SP) -> YUV422SP V在前U在后、YUV420SP V在前U在后、YUV420SP U在前V在后;
jpeg(YUV420SP) -> YUV420SP V在前U在后、YUV420SP U在前V在后;
jpeg(YUV400) -> YUV420SP,UV数据采用0x80填充
相关函数接口
流程
- 如要调用 acldvppDestroyChannelDesc 接口释放 acldvppChannelDesc 类型数据,必须先调用acldvppDestroyChannel 销毁channel通道
- 同一通道不能在多个Stream中并发使用
- 整体调用顺序
- 创建通道描述对象:调用acldvppCreateChannelDesc创建acldvppChannelDesc对象
- 创建通道:调用acldvppCreateChannel( acldvppChannelDesc )创建通道
- 创建图片描述:调用acldvppCreatePicDesc创建acldvppPicDesc对象
- 执行操作…
- 销毁图片描述:调用acldvppDestroyPicDesc( acldvppPicDesc )销毁图片描述
- 销毁通道:调用acldvppDestroyChannel( acldvppChannelDesc )销毁通道
- 销毁通道描述对象:调用acldvppDestroyChannelDesc( acldvppChannelDesc )销毁通道描述对象
注:第2~4步循环调用,直到所用图片处理完成
2. VDEC视频解码
功能
- VDEC(video decoder)实现视频的解码,VDEC内部经过VPC处理后,输出YUV420SP格式(包括NV12和NV21)的图片
- VDEC支持两种输入格式:
H264 bp/mp/hp level5.1 YUV420SP编码的码流
H265 8/10bit level5.1 YUV420SP编码的码流 - VDEC支持的输入码流的分辨率:最大分辨率4096 * 4096,最小分辨率128 * 128
- VDEC输出图像的格式为:
YUV420SP NV12
YUV420SP NV21 - VDEC输出图片的宽高对齐要求为:输出图片的widthStride(对齐后的宽度),对齐到16;输出图片的heightStride(对齐后的高度),对齐到2
- 若码流中有坏帧、缺帧等情况,解码器VDEC可能会丢帧
- 通过隔行扫描方式编码出来的码流, VDEC仅支持解码H264 8bit编码的码流
相关函数接口
大体流程
- 调用 aclvdecCreateChannel 创建通道描述信息
- 调用 aclvdecSetChannelDesc 对通道描述信息加以设置,包含解码通道号、线程、回调函数、视频编码协议等,其中线程和回调函数需要提前创建,同时线程函数还需要自定义
- 调用 aclvdecCreateChannel 创建视频码流数据处理通道
- 调用 acldvppCreateStreamDesc 创建输入视频码流描述信息,并调用 acldvppSetStreamDesc 设置输入视频的内存地址、内存大小、码流格式等属性
- 调用 aclvdecSendFrame 将视频码流解码成YUV420SP格式的图片
- 调用 aclvdecDestroyChannel 销毁视频处理的通道
- 调用 aclvdecDestroyChannelDesc 销毁通道描述信息
3. VPC
功能
- 抠图:从输入图片中抠出需要用的图片区域
- 缩放:针对不同分辨率的图像,当前支持非8K缩放(用于处理输入图片分辨率在326~40964096范围内的图片);从是否抠多张图的维度,可分为单图裁剪缩放(支持非压缩格式)、一图多框裁剪缩放(支持非压缩格式);其它缩放方式,如:原图缩放、等比例缩放
- 叠加:从输入图片中抠出来的图,对抠出的图进行缩放后,放在用户输出图片的指定区域,输出图片可以是空白图片(由用户申请的空输出内存产生的),也可以是已有图片(由用户申请输出内存后将已有图片读入输出内存),只有当输出图片是已有图片时,才表示叠加
- 拼接,从输入图片中抠多张图片,对抠出的图进行缩放后,放到输出图片的指定区域
- 格式转换:支持RGB格式、YUV格式之间的格式转换;图像灰度化,从YUV420SP格式的输出图像数据中只取Y分量的数据
相关函数接口
大体流程
- 调用 acldvppCreateChannelDesc 创建通道描述信息
- 调用 acldvppCreateChannel 创建图片数据处理的通道
- 调用 acldvppCreateRoiConfig 创建抠图区域位置的配置、acldvppCreateResizeConfig 创建缩放配置
- 调用 acldvppVpcCropAsync 和 acldvppVpcResizeAsync 执行抠图和缩放操作
- 调用 acldvppDestroyRoiConfig 和 acldvppDestroyResizeConfig 分别销毁抠图区域位置的配置、缩放配置
- 调用 acldvppDestroyChannel 销毁图片数据处理的通道
- 调用 acldvppDestroyChannelDesc 销毁通道描述信息