视频编码
昇腾910 AI处理器不支持视频编码。
实现视频的编码,详细说明及调用示例请参见视频编码。关键接口的说明如下(调用示例请参见视频编码):
- 调用aclvencCreateChannel接口创建视频编码处理的通道。
- 创建视频编码处理通道前,需先执行以下操作:
- 调用aclvencCreateChannelDesc接口创建通道描述信息。
- 调用aclvencSetChannelDescParam接口设置通道描述信息的属性,包括线程、回调函数、视频编码协议、输入图片格式等,其中:
- 回调函数需由用户提前创建,用于在视频编码后,获取编码数据,并及时释放相关资源,回调函数的原型前参见aclvencCallback。
视频编码结束后,建议用户在回调函数内及时释放输入图片内存、以及相应的图片描述信息。视频编码的输出内存由系统管理,不由用户管理,因此无需用户释放。
- 线程需由用户提前创建,并自定义线程函数,在线程函数内调用aclrtProcessReport接口,等待指定时间后,触发1.b.i中的回调函数。
推荐使用aclvencSetChannelDescParam接口设置通道描述信息的属性,通过枚举值来选择通过该接口设置某一个属性的值。
但为兼容旧版本,也可以调用aclvencSetChannelDesc系列接口设置通道描述信息的属性,每个属性的设置对应一个set接口。
- 回调函数需由用户提前创建,用于在视频编码后,获取编码数据,并及时释放相关资源,回调函数的原型前参见aclvencCallback。
- aclvencCreateChannel接口内部封装了如下接口,无需用户单独调用:
- aclrtCreateStream接口:显式创建Stream,VENC内部使用。
- aclrtSubscribeReport接口:指定处理Stream上回调函数的线程,回调函数和线程是由用户调用aclvencSetChannelDescParam接口时指定的。
- 创建视频编码处理通道前,需先执行以下操作:
- 调用aclvencSendFrame接口将YUV420SP格式的图片编码成H264/H265格式的视频码流。
- 视频编码前,需先执行以下操作:
- 调用acldvppCreatePicDesc接口创建输入图片描述信息,并调用acldvppSetPicDesc系列接口设置输入图片的内存地址、内存大小、图片格式等属性。
- 调用aclvencCreateFrameConfig接口创建单帧编码配置数据,并调用aclvencSetFrameConfig系列接口设置是否强制重新开始I帧间隔、是否结束帧。
- aclvencSendFrame接口内部封装了aclrtLaunchCallback接口,用于在Stream的任务队列中增加一个需要在Host上执行的回调函数。用户无需单独调用aclrtLaunchCallback接口。
- 视频编码前,需先执行以下操作:
- 调用aclvencDestroyChannel接口销毁视频处理的通道。
- 系统会等待已发送帧编码完成且用户的回调函数处理完成后再销毁通道。
- aclvencDestroyChannel接口内部封装了如下接口,无需用户单独调用:
- aclrtUnSubscribeReport接口:取消线程注册(Stream上的回调函数不再由指定线程处理)。
- aclrtDestroyStream接口:销毁Stream。
- 销毁通道后,需调用aclvencDestroyChannelDesc接口销毁通道描述信息。
- 销毁通道描述信息后,用户才可以销毁1.b.ii中创建的线程。