接口调用流程
Atlas 200/300/500 推理产品上,当前版本不支持该功能。
Atlas 训练系列产品上,当前版本不支持该功能。
开发应用时,如果涉及视频编码,则应用程序中必须包含编码的代码逻辑,关于编码的接口调用流程,请先参见接口调用流程了解整体流程,再查看本节中的流程说明。关于VENC功能的详细介绍请参见VENC功能及约束说明。
图1 接口调用流程
当前系统支持H264/H256格式的视频码流,关键接口的说明如下:
- 调用hi_mpi_sys_init接口进行媒体数据处理系统初始化;
- 调用hi_mpi_venc_create_chn函数创建完通道;
成功创建通道之后,您可以根据实际需求设置编码的高级参数,例如场景模式、码流控制器的高级参数等,请参见hi_mpi_venc_set_jpeg_param~hi_mpi_venc_compact_jpeg_tables章节中的接口说明。
- 调用hi_mpi_venc_get_fd将通道ID转换为一个文件句柄;
- 调用hi_mpi_sys_create_epoll函数创建DVPP epoll实例;
- 调用hi_mpi_sys_ctl_epoll函数将编码通道的文件句柄添加到epoll实例中,由epoll实例处理;
select或者poll方式,不需要执行该步骤。
- 调用hi_mpi_venc_start_chn函数通知通道准备开始编码;
- 调用hi_mpi_dvpp_malloc接口申请存放Device上输入数据的内存。
- 启动一个用户态线程,调用hi_mpi_sys_wait_epoll函数等待编码完成;
- 之后用户就可以调用hi_mpi_venc_send_frame函数发送待编码的码流;
- 一旦编码完成,hi_mpi_sys_wait_epoll函数或select函数或poll函数就会返回,用户就可以调用hi_mpi_venc_query_status接口查询编码状态,再调用hi_mpi_venc_get_stream函数获取编码结果;
- 用户需要注意的是,编码结果数据使用完成之后,需要及时调用hi_mpi_venc_release_stream函数释放buffer。否则会因编码buffer用完导致后续编码无法进行;
- 调用hi_mpi_dvpp_free接口释放输入内存;
- 当用户不需发送图像到目的通道继续编码时,需要调用hi_mpi_venc_stop_chn函数通知该通道不再接收新的输入图片;
- 调用hi_mpi_sys_ctl_epoll函数从epoll实例中删除编码通道的文件句柄;
- 当用户完成所有编码之后,需要调用hi_mpi_venc_destroy_chn释放编码通道以及内部内存资源;
- 调用hi_mpi_sys_close_epoll函数销毁DVPP epoll实例;
- 调用hi_mpi_sys_exit接口进行媒体数据处理系统去初始化。
父主题: VENC视频编码