接口调用流程
开发应用时,如果涉及视频解码,则应用程序中必须包含视频解码的代码逻辑,关于视频解码的接口调用流程,请先参见接口调用流程了解整体流程,再查看本节中的流程说明。关于VDEC功能的详细介绍请参见功能及约束说明。
图1 视频解码流程
实现视频的解码,关键接口的说明如下:
- 调用aclvdecCreateChannel接口创建视频解码处理的通道。
- 创建视频解码处理通道前,需先执行以下操作:
- 调用aclvdecCreateChannelDesc接口创建通道描述信息。
- 调用aclvdecSetChannelDesc系列接口设置通道描述信息的属性,包括解码通道号、线程、回调函数、视频编码协议等,其中:
- 回调函数需由用户提前创建,用于在视频解码后,获取解码数据,并及时释放相关资源,回调函数的原型前参见aclvdecCallback。
在回调函数内,用户需调用acldvppGetPicDescRetCode接口获取retCode返回码判断是否解码成功,retCode为0表示解码成功,为1表示解码失败。如果解码失败,需要根据日志中的返回码判断具体的问题,返回码请参见返回码说明。
解码结束后,建议用户在回调函数内及时释放VDEC的输入码流内存、输出图片内存以及相应的视频码流描述信息、图片描述信息。
- 线程需由用户提前创建,并自定义线程函数,在线程函数内调用aclrtProcessReport接口,等待指定时间后,触发1.b.i中的回调函数。
如果不调用aclvdecSetChannelDescOutPicFormat接口设置输出格式,则默认使用YUV420SP NV12。
- 回调函数需由用户提前创建,用于在视频解码后,获取解码数据,并及时释放相关资源,回调函数的原型前参见aclvdecCallback。
- aclvdecCreateChannel接口内部封装了如下接口,无需用户单独调用:
- aclrtCreateStream接口:显式创建Stream,VDEC内部使用。
- aclrtSubscribeReport接口:指定处理Stream上回调函数的线程,回调函数和线程是由用户调用aclvdecSetChannelDesc系列接口时指定的。
- 创建视频解码处理通道前,需先执行以下操作:
- 调用aclvdecSendFrame接口将视频码流解码成YUV420SP格式的图片。
- 视频解码前,需先执行以下操作:
- 调用acldvppCreateStreamDesc接口创建输入视频码流描述信息,并调用acldvppSetStreamDesc系列接口设置输入视频的内存地址、内存大小、码流格式等属性。
- 调用acldvppCreatePicDesc接口创建输出图片描述信息,并调用acldvppSetPicDesc系列接口设置输出图片的内存地址、内存大小、图片格式等属性。
- aclvdecSendFrame接口内部封装了aclrtLaunchCallback接口,用于在Stream的任务队列中增加一个需要执行的回调函数。用户无需单独调用aclrtLaunchCallback接口。
- 如果用户需要获取解码的帧序号,则可以在aclvdecSendFrame接口的userData参数处定义,然后解码的帧序号可以通过userData参数传递给VDEC的回调函数,用于确定回调函数中处理的是第几帧数据。
- 视频解码前,需先执行以下操作:
- 调用aclvdecDestroyChannel接口销毁视频处理的通道。
- 系统会等待已发送帧解码完成且用户的回调函数处理完成后再销毁通道。
- aclvdecDestroyChannel接口内部封装了如下接口,无需用户单独调用:
- aclrtUnSubscribeReport接口:取消线程注册(Stream上的回调函数不再由指定线程处理)。
- aclrtDestroyStream接口:销毁Stream。
- 销毁通道后,需调用aclvdecDestroyChannelDesc接口销毁通道描述信息。
- 销毁通道描述信息后,用户才可以销毁1.b.ii中创建的线程。
父主题: VDEC视频解码