aclvdecSendSkippedFrame
性能指标说明
性能指标说明(Atlas 200/500 A2推理产品)
1080p指分辨率为1920*1080的图片。单个Device的基本场景性能指标参考如下(1路对应一个通道,一个通道对应一个线程):
| 场景举例 | 总帧率 |
|---|---|
| 720p*n路(1≤n≤4) | n*600fps |
| 720p*n路(n>4) | 2400fps |
| 1080p*n路(1≤n≤4) | n*300fps |
| 1080p*n路(n>4) | 1200fps |
| 4k*n路(1≤n≤4) | n*75fps |
| 4k*n路(n>4) | 300fps |
下表说明了典型场景下每路VDEC解码的内存消耗,在内存消耗的计算公式中:
- 输入码流缓存大小:等于输入码流的宽*高*2。
- 解码图像帧存大小:1080P分辨率的输入码流,该参数值为3MB。其它分辨率时参数值可等量折算。
- 视频解码图像Tmv缓存大小:H264格式、1080P分辨率的输入码流,该参数值为0.5MB;H265格式、1080P分辨率的输入码流,该参数值为1MB。其它分辨率时参数值可等量折算。
- 参考帧数量可由用户调用aclvdecSetChannelDescRefFrameNum接口设置。
- 解码后缓存图像帧数固定为2个。
每路VDEC解码的内存消耗计算公式 | 场景举例 | 内存消耗(单位为MB) |
|---|---|---|
6MB + 输入码流缓存大小 * 2 + (解码图像帧存大小 + 视频解码图像Tmv缓存大小) * (参考帧数量 + 解码后缓存图像帧数 +1 ) | 52.5MB(参考帧数量8个) 31.5MB(参考帧数量2个) | |
58MB(参考帧数量8个) 34MB(参考帧数量2个) |
父主题: VDEC功能
aclvdecSendFrame
函数功能
将待解码的输入内存和解码输出内存一起传到解码器进行解码,异步接口。
约束说明
- 发送数据前必须保证通道已经被创建,否则返回错误。
- 发送码流时须按帧发送,一次只发送完整的一帧码流。
- 不能发送eos为0的空码流包(码流长度为0或码流地址为空)。
- 发送完所有码流后,可以发送eos为1的帧,表示当前码流文件结束。发送eos后,本接口会等待已发送帧全部解码并且用户的回调函数处理完成后才返回。
- 由于码流异常、解码超时等原因,可能导致aclvdecSendFrame接口发送帧或发送eos失败,建议用户在编写代码时,获取该接口的返回码,当该接口调用失败时,进行异常处理。
- aclvdecSendFrame接口内部封装了aclrtLaunchCallback接口,用于在Stream的任务队列中增加一个需要执行的回调函数。用户在实现VDEC功能时,无需再单独调用aclrtLaunchCallback接口。
函数原型
aclError aclvdecSendFrame(****aclvdecChannelDesc *channelDesc,
acldvppStreamDesc *input,
acldvppPicDesc *output,
aclvdecFrameConfig *config,
void* userData)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| channelDesc | 输入 | 通道描述信息的指针。 与调用aclvdecCreateChannel接口创建通道时指定的channelDesc保持一致。 调用aclvdecSetChannelDesc系列接口设置通道描述信息的属性,包括解码通道号、线程、回调函数、视频编码协议等。 |
| input | 输入 | 输入码流描述信息的指针,输入内存用户需提前申请。 - 调用acldvppCreateStreamDesc接口创建码流描述信息,调用acldvppSetStreamDesc系列接口设置视频码流信息的属性(例如,码流数据的内存地址)。 输入码流格式以通道描述信息中设置的格式为准,调用acldvppSetStreamDescFormat接口设置输入码流格式无效。 - 输入视频码流的分辨率、视频格式的要求,请参见功能及约束说明。 |
| output | 输入&输出 | 输出图片描述信息的指针,输出内存用户需提前申请。 output参数作为输入时,需要用户调用如下接口: - 调用acldvppCreatePicDesc接口创建图片描述信息。 - 调用acldvppSetPicDesc系列接口设置输出图片的数据内存、内存大小、宽、高、格式。 - 如果此处设置输出图片的宽高,则需要同时设置width、height、widthStride、heightStride这4个参数,且当width<16时,widthStride必须对齐到32,不能对齐到16;如果这4个参数都不设置,则以输入码流的宽高为准;如果设置部分参数,则接口返回错误。 - 如果此处设置输出图片的格式,则以此处为准;如果此处不设置,则以通道描述信息中设置的为准。 - 输出图像格式的要求,请参见功能及约束说明。 output参数作为输出时,用户需在回调函数中调用acldvppGetPicDesc系列接口获取解码后的输出图片数据。隔行码流场景下,隔行码流每帧发送两场,解码时其中一场无图像输出,属于正常现象,会返回ERR_DECODE_NOPIC = 0x20000错误码;隔行码流的解码输出数据都在奇数场对应的输出buffer中。 |
| config | 输入 | 解码配置的指针,预留,当前可填NULL。 |
| userData | 输入 | 用户自定义数据的指针。 如果用户需要获取解码的帧序号,则可以在userData参数处定义,然后解码的帧序号可以通过userData参数传递给VDEC的回调函数,用于确定回调函数中处理的是第几帧数据。 |
返回值说明
返回0表示成功,返回非0表示失败。
参考资源
- 接口调用流程及示例,参见VDEC视频解码。
- Device内存不足,VDEC解码任务异常的案例请参见VDEC视频解码异常导致进程卡死,无法退出。
父主题: VDEC功能
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功能
在线提单