文档
注册

接口调用流程

昇腾310 AI处理器上,当前版本不支持该功能。

昇腾910 AI处理器上,当前版本不支持该功能。

开发应用时,如果涉及将YUV格式图片编码成JPEG压缩格式的图片文件,则应用程序中必须包含编码的代码逻辑,关于编码的接口调用流程,请先参见pyACL接口调用流程了解整体流程,再查看本节中的流程说明。关于JPEGE功能的详细介绍请参见JPEGE功能及约束说明

图1 接口调用流程
当前系统支持将YUV格式图片编码成JPEG压缩格式的图片文件,关键接口的说明如下:
  1. 调用acl.himpi.sys_init接口进行媒体数据处理系统初始化。
  2. 调用acl.himpi.venc_create_chn函数创建完通道。

    成功创建通道之后,您可以根据实际需求设置编码的高级参数,例如场景模式、码流控制器的高级参数等,请参见acl.himpi.venc_set_jpeg_param~acl.himpi.venc_compact_jpeg_tables章节中的接口说明。

  3. 调用acl.himpi.venc_get_fd将通道ID转换为一个文件句柄。
  4. 调用acl.himpi.sys_create_epoll函数创建DVPP epoll实例。
  5. 调用acl.himpi.sys_ctl_epoll函数将编码通道的文件句柄添加到epoll实例中,由epoll实例处理。

    select或者poll方式,不需要执行该步骤。

  6. 调用acl.himpi.venc_start_chn函数通知通道准备开始编码。
  7. 调用acl.himpi.dvpp_malloc接口申请存放Device上输入数据的内存。
  8. 启动一个用户态线程,调用acl.himpi.sys_wait_epoll函数等待编码完成。
  9. 之后用户就可以调用acl.himpi.venc_send_frame函数发送待编码的码流。
  10. 一旦编码完成,acl.himpi.sys_wait_epoll函数或select函数或poll函数就会返回,用户就可以调用acl.himpi.venc_query_status接口查询编码状态,再调用acl.himpi.venc_get_stream函数获取编码结果。
  11. 用户需要注意的是,编码结果数据使用完成之后,需要及时调用acl.himpi.venc_release_stream函数释放buffer。否则会因编码buffer用完导致后续编码无法进行。
  12. 调用acl.himpi.dvpp_free接口释放输入内存。
  13. 当用户不需发送图像到目的通道继续编码时,需要调用acl.himpi.venc_stop_chn函数通知该通道不再接收新的输入图片。
  14. 调用acl.himpi.sys_ctl_epoll函数从epoll实例中删除编码通道的文件句柄。
  15. 当用户完成所有编码之后,需要调用acl.himpi.venc_destroy_chn释放编码通道以及内部内存资源。
  16. 调用acl.himpi.sys_close_epoll函数销毁DVPP epoll实例。
  17. 调用acl.himpi.sys_exit接口进行媒体数据处理系统去初始化。
支持DVPP内部管理输出内存,或用户自行管理输出内存两种方式:
  • 不需要用户管理、由DVPP内部管理输出内存时,调用acl.himpi.venc_send_frame接口发送原始图像进行图像编码。

    在调用acl.himpi.venc_create_chn接口创建通道时,必须正确设置hi_venc_chn_attr.venc_attr.buf_size参数值(参数描述请参见hi_venc_attr)。

    该方式下,相比由用户管理内存,输出结果数据的JPEG头中不存在COM注释字段,数据长度会短一点,但需要用户从DVPP返回的内存中拷贝输出结果数据到指定内存。

  • 由用户自行管理输出内存、管理内存的生命周期,调用acl.himpi.venc_send_jpege_frame接口发送原始图像进行图像编码。

    在调用acl.himpi.venc_create_chn接口创建通道时,需将hi_venc_chn_attr.venc_attr.buf_size参数值设置为0(参数描述请参见hi_venc_attr),然后调用acl.himpi.venc_get_jpege_predicted_size接口预估输出内存大小,调用acl.himpi.dvpp_malloc/acl.himpi.dvpp_free接口申请/释放输出内存。

    该方式下,直接在调用acl.himpi.venc_send_jpege_frame接口时,设置输出内存地址,输出结果数据直接存放到用户设置的内存中,相比由系统管理内存的方式,用户可减少一次“从DVPP返回的内存中拷贝输出结果数据到指定内存”的操作,但输出结果数据的JPEG头中可能会存在COM注释字段(字段长度范围4~19Byte),数据长度会长一点。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词