视频数据获取功能
视频获取功能需要ISP、MIPI Rx、VI等多个功能模块配合才能实现,本节介绍视频数据获取功能的总体接口调用流程、各功能模块的接口调用流程及注意事项。
当前需通过以下功能模块的配合实现视频数据获取功能:
- ISP系统控制
系统控制部分用于注册3A算法、注册Sensor驱动、初始化ISP firmware、运行ISP firmware、退出ISP firmware、配置ISP属性等功能。
- MIPI Rx ioctl命令字
MIPI Rx是一个支持多种差分视频输入接口的采集单元,通过combo-PHY接收MIPI/LVDS/sub-LVDS/HiSPi接口的数据,通过不同的功能模式配置,MIPI Rx可以支持多种速度和分辨率的数据传输需求,支持多种外部输入设备。
- VI(Video Input)
VI模块捕获视频图像,可对其做裁剪、防抖、颜色优化、亮度优化、噪声去除等处理,并输出YUV或RAW格式的图像数据。
总体接口调用流程
接口调用流程说明如下:
- 调用hi_mpi_sys_init接口初始化媒体数据处理系统。
- 使用MIPI Rx ioctl命令字初始化MIPI/Sensor硬件对接信息,接口调用流程请参见初始化MIPI/Sensor硬件对接信息。
- 使用VI(Video Input)功能接口初始化VI模块,接口调用流程请参见初始化VI视频输入模块。
- 使用ISP(Image Signal Processing)系统控制接口初始化并运行ISP模块,接口调用流程请参见初始化并运行ISP图像信号处理模块。
- 使用VI功能接口获取已处理的图像数据,接口调用流程请参见获取已处理的图像数据。
- 使用ISP功能接口释放ISP模块资源,接口调用流程请参见释放ISP图像信号处理模块资源。
- 使用VI功能接口释放VI模块资源,接口调用流程请参见释放VI视频输入模块资源。
- 使用MIPI Rx ioctl命令字退出MIPI/Sensor硬件,接口调用流程请参见退出MIPI/Sensor硬件。
- 调用hi_mpi_sys_exit接口释放媒体数据处理系统资源。
初始化MIPI/Sensor硬件对接信息
- 使用HI_MIPI_SET_HS_MODE命令字设置模式。
- 使用HI_MIPI_ENABLE_MIPI_CLOCK命令字打开MIPI时钟。
- 使用HI_MIPI_RESET_MIPI命令字复位Sensor所对接的MIPI。
- (可选)使用HI_MIPI_CONFIG_SENSOR_CLOCK命令字配置Sensor时钟。
- (可选)使用HI_MIPI_ENABLE_SENSOR_CLOCK命令字打开Sensor时钟。
- 使用HI_MIPI_RESET_SENSOR命令字复位Sensor。
- 使用HI_MIPI_SET_DEV_ATTR命令字配置MIPI Rx/设备属性。
- 使用HI_MIPI_UNRESET_MIPI命令字撤销复位MIPI。
- 使用HI_MIPI_UNRESET_SENSOR命令字撤销复位Sensor。
初始化VI视频输入模块
不同数据来源、不同数据格式、不同模式,初始化VI视频输入模块的流程不同。
初始化并运行ISP图像信号处理模块
- 调用hi_mpi_isp_sensor_reg_callback接口注册Sensor驱动通用算法。
- (可选)调用hi_mpi_ae_sensor_reg_callback接口、hi_mpi_awb_sensor_reg_callback接口注册系统内置的Sensor驱动AE、AWB算法。
此处用户可以根据需求注册自定义的算法。
- (可选)调用hi_mpi_ae_register接口、hi_mpi_awb_register接口初始化系统内置的2A算法。
此处用户可以根据需求注册自定义的算法。
- 调用hi_mpi_isp_mem_init接口初始化ISP内部资源。
- 调用hi_mpi_isp_set_pub_attr接口初始化算法模块。
- 调用hi_mpi_isp_init接口初始化ISP firmware。
- 启用单独线程,调用hi_mpi_isp_run接口运行ISP算法的调度业务主流程。
获取已处理的图像数据
- 获取YUV数据VI图像处理完成后,可在对应的VI通道上获取已完成图像并进行相关处理,典型接口调用流程如下:
- (可选)通过系统文件句柄+select/epoll等待机制,等待图像处理完成事件,可通过hi_mpi_vi_get_chn_fd接口获取指定通道的系统文件句柄,然后获取并处理完一帧图像数据后,会唤醒系统的select/epoll读等待请求。
- 调用hi_mpi_vi_get_chn_frame接口,获取已处理完成的图像数据。此时图像数据对应内存资源会自动被用户占用,用户必须在处理完图像数据后,调用hi_mpi_vi_release_chn_frame接口释放对应图像的内存资源。
- 如果用户通过hi_mpi_vi_get_chn_frame接口获取到图像数据后,要再发布给其他进程使用,则可通过返回的hi_video_frame.user_data[0]得到acltdtBuf句柄,再结合acl的共享buf管理接口(如acltdtCopyBufRef)以及共享队列管理接口(如acltdtEnqueue)将对象发布给其他进程使用。
- 获取RAW数据VI图像处理完成后,可在对应的VI PIPE上获取已完成图像并进行相关处理,典型接口调用流程如下:
- (可选)通过系统文件句柄+select/epoll等待机制,等待图像处理完成事件,可通过hi_mpi_vi_get_pipe_fd接口获取指定通道的系统文件句柄,当后台获取并处理完一帧图像数据后,会唤醒系统的select/epoll读等待请求。
- 调用hi_mpi_vi_get_pipe_frame接口,获取已处理完成的图像数据。此时图像数据对应内存资源会自动被用户占用,用户必须在处理完图像数据后,调用hi_mpi_vi_release_pipe_frame接口释放对应图像的内存资源。
- 如果用户通过hi_mpi_vi_get_pipe_frame接口获取到图像数据后,要再发布给其他进程使用,则可通过返回的hi_video_frame.user_data[0]得到acltdtBuf句柄,再结合acl的共享buf管理接口(如acltdtCopyBufRef)以及共享队列管理接口(如acltdtEnqueue)将对象发布给其他进程使用。
父主题: Camera场景视频数据获取和处理