使用DVPP接口
DVPP采用句柄方式提供接口,主要包含三类接口:创建,使用,销毁。
VPC、JPEGE、JPEGD、PNGD共用一套接口,输入的参数有差异。VDEC和VENC各使用一套接口。
- VDEC解码使用的三个接口如下所示,用户以异步方式调用,使用VdecCtl接口传入配置(包含回调函数)、H264/H265数据等,硬件解码后,Matrix框架调用回调函数将结果返回。
VDEC解码后的数据为HFBC(内部格式),用户需要使用VPC将HFBC转换为YUV420SP格式,详情请参考《DVPP API参考》的“实现 VDEC 功能”章节中的相关示例。
int CreateVdecApi(IDVPPAPI *&pIDVPPAPI, int singleton) int VdecCtl(IDVPPAPI *&pIDVPPAPI, int CMD, dvppapi_ctl_msg *MSG, int singleton) int DestroyVdecApi(IDVPPAPI *&pIDVPPAPI, int singleton)
- VPC、JPEGE、JPEGD、PNGD使用如下所示相同的接口,不同功能传输的配置参数不同,请用户参考《DVPP API参考》中的“VPC/JPEGE/JPEGD/PNGD功能接口”章节。
int CreateDvppApi(IDVPPAPI *&pIDVPPAPI) int DvppCtl(IDVPPAPI *&pIDVPPAPI, int CMD, dvppapi_ctl_msg *MSG) int DestroyDvppApi(IDVPPAPI *&pIDVPPAPI)
- 由于硬件限制,DVPP使用过程中存在部分限制。为了加快读写速度,图片长宽需要对齐到指定大小,但不影响有效区域,采用向左、向下填充0的方式,对齐到指定大小。
例如:对于300*300的YUV420SP_UV图片,需要对齐到304*300(宽要求16对齐,高要求2对齐),有效区域仍为[0, 0]至[300, 300],需要用户在图片右侧补零,对齐到304列。
- 当用户使用DVPP的JPEGD、VDEC、PNGD组件读取输入图片时,解码后的图片需要满足长宽对齐要求(实际长宽),此时用户需要注意,以对齐后的图片大小申请输出图片内存。
例如:对于300*300的YUV420SP_UV图片,需要申请304*300*3/2Byte(YUV420SP一个像素需要1.5Byte存储)。
- VPC输入和输出内存地址,16字节对齐。
- VPC输出图片的宽度,16字节对齐。
- VPC输出图片的高度,2字节对齐。
- VPC输入图片的宽度,16字节对齐。
- VPC输入图片的高度,2字节对齐。
- JPEGD输出图片的宽度,128字节对齐。
- JPEGD输出图片的高度,16字节对齐。
- DVPP各组件基于处理速度和内存占用量的考虑,对输出图片有诸多限制,如输出图片需要长宽对齐,输出格式必须为YUV420SP等,但模型输入通常为RGB或BGR,且输入图片尺寸各异。因此,Ascend310芯片提供AIPP(Ai Preprocess),用于图片格式转换及抠图功能,具体说明请参考《模型转换指导》。
例如:Jpeg图片输入和H26*视频输入的处理流程如图1所示。
- 当用户使用DVPP的JPEGD、VDEC、PNGD组件读取输入图片时,解码后的图片需要满足长宽对齐要求(实际长宽),此时用户需要注意,以对齐后的图片大小申请输出图片内存。