更新时间:2021-10-26 GMT+08:00
分享

使用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,且输入图片尺寸各异。因此,Ascend 310芯片提供AIPP(Ai Preprocess),用于图片格式转换及抠图功能,具体说明请参考《模型转换指导》。

      例如:Jpeg图片输入和H26*视频输入的处理流程如图1所示。

      图1 视频与图片输入处理流程
分享:

    相关文档

    相关产品