性能指标说明
aclvdecSendSkippedFrame
函数功能
如果不想获取某一帧的解码结果, 可以调用本接口, 将待解码的码流(输入内存)传到解码器进行解码,此时,解码结果最终不会输出,解码完成的回调函数中返回的output为nullptr。异步接口。
约束说明
- 发送数据前必须保证通道已经被创建,否则返回错误。
- 发送码流时须按帧发送,一次只发送完整的一帧码流。
- 不能发送eos为0的空码流包(码流长度为0或码流地址为空)。
- 不可以发送eos为1的帧。
- 由于码流异常、解码超时等原因,可能导致aclvdecSendFrame接口发送帧或发送eos失败,建议用户在编写代码时,获取该接口的返回码,当该接口调用失败时,进行异常处理。
- aclvdecSendSkippedFrame接口内部封装了aclrtLaunchCallback接口,用于在Stream的任务队列中增加一个需要执行的回调函数。用户在实现VDEC功能时,无需再单独调用aclrtLaunchCallback接口。
函数原型
aclError aclvdecSendSkippedFrame(****aclvdecChannelDesc *channelDesc,
acldvppStreamDesc *input,
aclvdecFrameConfig *config,
void *userData)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| channelDesc | 输入 | 通道描述信息的指针。 与调用aclvdecCreateChannel接口创建通道时指定的channelDesc保持一致。 调用aclvdecSetChannelDesc系列接口设置通道描述信息的属性,包括解码通道号、线程、回调函数、视频编码协议等。 |
| input | 输入 | 输入码流描述信息的指针,输入内存用户需提前申请。 - 调用acldvppCreateStreamDesc接口创建码流描述信息,调用acldvppSetStreamDesc系列接口设置视频码流信息的属性(例如,码流格式)。 输入码流格式以通道描述信息中设置的格式为准,调用acldvppSetStreamDescFormat接口设置输入码流格式无效。 - 输入视频码流的分辨率、视频格式的要求,请参见功能及约束说明。 |
| config | 输入 | 解码配置的指针,预留,当前可填NULL。 |
| userData | 输入 | 用户自定义数据的指针。 如果用户需要获取解码的帧序号,则可以在userData参数处定义,然后解码的帧序号可以通过userData参数传递给VDEC的回调函数,用于确定回调函数中处理的是第几帧数据。 |
返回值说明
返回0表示成功,返回非0表示失败。
父主题: VDEC功能
aclvdecCallback
函数功能
视频解码回调函数,同步接口。用户需自定义该回调函数。
约束说明
-
在回调函数中不能执行销毁通道操作,否则会导致程序执行死锁。
-
回调函数处理的时延应满足发帧帧率要求,否则会影响aclvdecSendFrame接口进行视频帧处理的实时性。
-
注销回调线程要在所有Callback执行完成后(即注销送码流线程之后)。
-
当使用了抽帧功能后(调用aclvdecSendSkippedFrame接口),回调相应帧的output为nullptr。
对于抽帧的情况,输出Buffer无解码结果,且抽掉的帧按照顺序输出。
对于不抽帧的情况,输出Buffer中才会有解码结果,且不抽的帧按照顺序输出。
如果解码码流中同时存在抽帧、不抽帧的情况,则系统不保证抽掉的帧与不抽的帧之间按照顺序输出。
函数原型
void (* aclvdecCallback) (****acldvppStreamDesc * input, acldvppPicDesc * output, void* userData)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| input | 输入 | 输入码流描述信息的指针。与aclvdecSendFrame接口中的input一致。 |
| output | 输入 | VDEC解码后的输出图片描述信息的指针,输出内存用户需提前申请。 |
| userData | 输入 | 用户自定义数据的指针。 |
返回值说明
无
参考资源
接口调用流程及示例,参见VDEC视频解码。
父主题: VDEC功能
功能及约束说明
功能说明
VENC(Video Encoder)将YUV420SP NV12/NV21-8bit图片数据编码成H264/H265格式的视频码流。
分辨率约束
-
输入图片分辨率:
版本 分辨率范围 Atlas 200/500 A2推理产品 最大分辨率8192*8192,最小分辨率114*114。 -
输出码流分辨率
VENC只对图片编码,不会改变图片分辨率,因此输出与输入的图片分辨率保持一致。
码流/图片格式、宽高对齐、内存约束
实现VENC视频编码功能时:
-
输入内存
需调用acldvppMalloc接口申请Device上的输入内存,调用acldvppFree接口释放输入内存,这部分内存的生命周期由用户自行管理。内存大小参见下表中的计算公式。
-
输出内存
不需要用户管理输出内存,由系统管理内存。
:::note 说明 输入图片格式的定义请参见acldvppPixelFormat,宽stride、高stride等概念请参见基本概念。 :::
表1 图片格式、宽高对齐、内存大小约束
输入图片格式 | 输入图片宽、高对齐要求 | 输入图片宽stride、高stride、内存大小要求 | 输出码流格式 |
|---|---|---|---|
YUV420SP NV12 8bit | 宽2对齐 高2对齐 | 宽stride为宽16对齐后的值。 高stride无需设置。 内存大小(单位Byte)= 宽stride * 高 * 3/2 | |
YUV420SP NV21 8bit |
父主题: VENC功能
性能指标说明
性能指标说明(Atlas 200/500 A2推理产品)
单个Device的基本场景性能指标参考如下(1路对应一个通道,一个通道对应一个线程):
720p指分辨率为1280*720的图片;1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。
| 场景举例 | 总帧率 |
|---|---|
| 720p*n路(1≤n≤3) | n*400fps |
| 720p*n路(n>3) | 1200fps |
| 1080p*n路(1≤n≤3) | n*200fps |
| 1080p*n路(n>3) | 600fps |
| 4k*n路(1≤n≤3) | n*50fps |
| 4k*n路(n>3) | 150fps |
注:其它分辨率可以等量估算。
父主题: VENC功能
aclvencSendFrame
函数功能
将待编码的图片传到编码器进行编码。异步接口。
约束说明
- 发送数据前必须保证通道已经被创建,否则返回错误。
- 不能发送eos为0的空码流包(码流长度为0或码流地址为空)。
- 结束视频编码时可以发送eos为1的空图片,表示当前编码结束。
- 编码时,输入内存需要在aclvencCallback回调函数内获取结果之后才能进行释放。
函数原型
aclError aclvencSendFrame(aclvencChannelDesc *channelDesc,
acldvppPicDesc *input,
void *reserve,
aclvencFrameConfig *config,
void *userdata)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| channelDesc | 输入 | 通道描述信息的指针。 与调用aclvencCreateChannel接口创建通道时指定的channelDesc保持一致。 在通道描述信息中指定视频编码的回调函数。 |
| input | 输入 | 输入图片描述信息的指针,输入内存用户需提前申请。 - 调用acldvppCreatePicDesc接口创建图片描述信息,调用acldvppSetPicDesc系列接口设置图片描述参数(例如,宽、高等)。 输入图片格式以通道描述信息中设置的格式为准,调用acldvppSetPicDescFormat接口设置输入图片格式无效。 - 输入图片的分辨率、格式的要求,请参见功能及约束说明。 |
| reserve | 输入 | 预留参数,暂不使用。 |
| config | 输入 | 单帧配置数据的指针。 |
| userdata | 输入 | 用户自定义数据的指针。 |
返回值说明
返回0表示成功,返回非0表示失败。
参考资源
接口调用流程及示例,参见VENC视频编码。
父主题: VENC功能
aclvencCallback
函数功能
视频编码回调函数,同步接口。用户需自定义该回调函数。
约束说明
- 在回调函数中不能执行销毁通道操作,否则会导致程序执行死锁。
- 回调函数处理的时延应满足发帧帧率要求,否则会影响aclvencSendFrame接口进行视频帧处理的实时性。
- 注销回调线程要在所有Callback执行完成后。
函数原型
void (*aclvencCallback)(acldvppPicDesc *input, acldvppStreamDesc *output, void *userdata)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| input | 输入 | 输入图片描述信息的指针。 |
| output | 输入 | VENC编码后的输出帧码流描述信息的指针。 |
| userdata | 输入 | 用户自定义数据的指针。 |
返回值说明
无
参考资源
接口调用流程及示例,参见VENC视频编码。
父主题: VENC功能
总体功能及约束说明
多版本接口差异
本手册中媒体数据处理V1版本与媒体数据处理V2版本的接口都是描述处理媒体数据的接口,用于实现视频编解码、图像编解码、图像处理等功能,但两套接口不能混用。
- V2版本的功能比V1版本更多,如下:
- JPEGE:V2版本接口支持高级的参数配置,如huffman表配置。
- VENC:V2版本接口支持更加细化的码控参数配置和效果调优,如I/P帧QP、宏块码控等。
- VDEC:V2版本接口支持更细化的内存控制,如设置输入码流缓存。
- 视频数据获取功能(ISP系统控制&MIPI命令字&VI功能):仅V2版本接口支持。
- VPSS视频处理:仅V2版本接口支持。
- 音频相关功能,包括录音、播音、音量调节:仅V2版本接口支持。
- 视频数据展示功能(VO功能&HDMI外设):仅V2版本接口支持。
- 建议使用V2版本中的接口,保证后续版本接口功能以及业务的连续演进。
- V1版本中的接口是为了兼容旧版本,保证使用该部分接口的用户能继续使用,后续版本不再演进。
图像/视频/音频数据处理的典型功能介绍
图1 图像/视频数据处理

各功能的介绍如下表所示,昇腾AI处理器对这些功能的支持度请参见功能支持度说明(AIPP当前各版本均支持)。
功能 | 子功能模块 | 描述 |
|---|---|---|
获取视频数据 | ISP(Image Signal Processing)系统控制 | 系统控制部分用于注册3A算法、注册Sensor驱动、初始化ISP firmware、运行ISP firmware、退出ISP firmware、配置ISP属性等功能。 |
MIPI Rx ioctl命令字 | MIPI Rx是一个支持多种差分视频输入接口的采集单元,通过combo-PHY接收MIPI/LVDS/sub-LVDS/HiSPi接口的数据,通过不同的功能模式配置,MIPI Rx可以支持多种速度和分辨率的数据传输需求,支持多种外部输入设备。 | |
VI(Vedio Input) | VI模块捕获视频图像,可对其做裁剪、防抖、颜色优化、亮度优化、噪声去除等处理,并输出YUV或RAW格式的图像数据。 | |
展示视频数据 | VO(Vedio Output) | VO模块接收VPSS处理后的输出图像,可进行播放控制等处理,最后按用户配置的输出协议(当前仅支持HDMI)输出给外围视频设备。 VO可配合TDE(Two Dimensional Engine)模块、HIFB(Hisilicon Framebuffer)模块,利用硬件分别进行图形绘制、叠加图形层管理。 |
HDMI(High Definition Multimedia Interfac) | HDMI是全数字化影像和声音发送接口,可以发送未压缩的音频及视频信号。 | |
TDE(Two Dimensional Engine) | TDE是图形二维加速引擎,它利用硬件为 OSD(On Screen Display)和 GUI(Graphics User Interface)提供快速的图形绘制功能,主要有快速拷贝、快速色彩填充、模式填充(当前仅支持Alpha Blending操作)。 | |
HIFB(Hisilicon Framebuffer) | HIFB用于管理叠加图形层,它不仅提供Linux Framebuffer的基本功能,还在Linux Framebuffer的基础上增加图层显示起始位置修改、层间Alpha等扩展功能。 | |
区域管理 | Region | 叠加在视频上的OSD (On Screen Display)和遮挡在视频上的色块统称为区域。区域管理模块,用于统一管理这些区域资源,用于在视频上显示一些特定信息(如通道号、时间戳等)、或在视频中填充色块用于遮挡,当前该功能需配合VPSS一起使用。 |
图像/视频数据处理 | VPSS(Video Process Sub-System) | VPSS模块支持对输入图像进行统一预处理,如去噪、去隔行、裁剪等,然后再对各通道分别进行处理,如缩放、加边框等。 |
AIPP(Artificial Intelligence Pre-Processing) | AIPP人工智能预处理,在AI Core上完成数据预处理,主要功能包括改变图像尺寸(抠图、填充等)、色域转换(转换图像格式)、减均值/乘系数(改变图像像素)等。
AIPP区分为静态AIPP和动态AIPP。您只能选择静态AIPP或动态AIPP中的一种来处理图片,不能同时配置静态AIPP和动态AIPP两种方式。
| |
DVPP(Digital Vision Pre-Processing) | DVPP是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括以下功能: AIPP、DVPP可以分开独立使用,也可以组合使用。组合使用场景下,一般先使用DVPP对图片/视频进行解码、抠图、缩放等基本处理,但由于DVPP硬件上的约束,DVPP处理后的图片格式、分辨率有可能不满足模型的要求,因此还需要再经过AIPP进一步做色域转换、抠图、填充等处理。 | |
音频数据获取和输出 | AI(Audio Input) | AI模块捕获音频数据 。 |
AO(Audio Output) | 通过ADEC模块解码后的音频数据,AO模块支持播放音频。 | |
音频数据编解码 | AENC(Audio Encoder) | 通过AI模块获取的音频数据,AENC模块支持对其进行编码,输出音频码流。 |
ADEC(Audio Decoder) | ADEC支持解码G.711a、G.711u等协议的音频码流,再通过AO模块播放音频。 |
功能支持度说明
昇腾AI处理器对媒体数据处理V2版本各功能的支持度如下表所示。
| 昇腾AI处理器 | VPC | JPEGD | JPEGE | PNGD | VDEC | VENC | 视频数据获取 | VPSS视频处理 | 音频功能(录音/播音/音量调节) | 视频数据展示 | 区域管理 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Atlas 200/500 A2推理产品 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
整体约束说明
使用本章中介绍的接口,有以下注意点:
-
关于内存申请/释放:
- 实现媒体数据处理的VPC、JPEGD、JPEGE等功能前,若需要申请内存存放输入或输出数据,需调用hi_mpi_dvpp_malloc申请内存、调用hi_mpi_dvpp_free接口释放内存。如果多个功能串联使用的场景,需要复用同一段内存,则按最大内存要求来申请内存。
- 调用1申请出来的内存可以满足媒体数据处理的要求,也可以在其它任务中使用,例如,从性能角度,为了减少拷贝,媒体数据处理的输出作为模型推理的输入,实现内存复用。
- 但由于媒体数据处理访问的地址空间有限,为确保媒体数据处理时内存足够,除媒体数据处理功能外的其它功能(例如,模型加载),建议调用内存管理章节下的aclrtMalloc接口、或aclrtMallocHost接口、或aclrtMallocCached接口申请内存。
-
关于通道的要求:
实现媒体数据处理的各功能前,必须调用接口创建对应功能的通道,请分别参见VPC图像处理功能、VDEC视频解码功能/JPEGD图片解码功能、VENC视频编码功能/JPEGE图片编码功能、PNGD图片解码功能章节下的通道创建与销毁接口,查看接口说明以及通道数的最大限制。
通道的创建与销毁会涉及资源的申请与释放,反复创建与销毁通道会影响业务性能,因此建议根据实际场景管理通道,例如,如果有持续VPC图片处理,则创建VPC的通道后,等到所有VPC功能调用完成后,再销毁该VPC通道。
通道数量多,会影响Device的CPU占用率和内存占用,通道数量建议参考各功能章节下的性能指标的路数。
-
本章节描述结构体、枚举值等,预留的字段需要手动设置为0,避免后续版本的兼容性问题。
结构体或枚举值中的预留字段,其名称中包含*_BUTT字符串的,例如HI_COMPRESS_MODE_BUTT。
父主题: 媒体数据处理V2
在线提单