K230 VICAP API参考
1. 概述
1.1 概述
VICAP子系统是K230 SOC中负责视频图像输入捕获处理的子系统。通过对sensor输出的信号进行实时处理,得到经过复原、增强后的数字图像,使其更接近现实中人眼所见的图像。主要包括MIPI RxDphy、MIPI CSI、ISP和DW。MIPI用于接收sensor传来的高速差分信号,并将其转为DVP接口,供ISP处理;ISP用于图像信息的处理;DW用于鱼眼矫正和多路resize输出。
本文档主要描述VICAP模块应用编程接口,它提供了应用开发者通过VICAP模块捕获视频图像数据的操作接口和配置参数。
1.2 功能描述
1.2.1 VICAP
VICAP模块是对整个图像采集处理单元的抽象描述。
VICAP硬件由Sensor,VI,ISP,Dewarp四大模块组成(如下图1-1所示)。最多支持3路sensor同时接入,ISP内部通过的MCM模块实现多路sensor的时分复用管理,多路sensor输出数据通过MCM的Memory Interface的Write接 口写入DDR,再通过Read接口读入并装载到ISP Pipeline进行处理。
图1-1 VICAP硬件架构图
VICAP软件架构如图1-2所示,从上到下依次是:应用接口层,媒体接口层,系统框架层,驱动层和硬件层。
- 应用层接口: 提供kd_mapi_vicap_xxx形式的API接口及使用说明。它是对媒体接口层各个子模块提供的功能接口的进一步封装,简化应用开发流程。
- 媒体接口层:该层由VICAP各个子模块组成,每个子模块提供各自的媒体接口API封装。
- 框架层:负责VICAP整个系统软件功能与业务逻辑的控制与管理。通过将各个子模块提供的接口与功能整合统一形成一套完整的VICAP系统控制逻辑和流程。
- 驱动层:VICAP各个硬件模块的内核驱动功能的集合。
硬件层:VICAP各个具体硬件模块的集合,包括sensor。
1.2.2 Sensor
Sensor模块是VICAP捕获图像的数据源之一,负责配置图像感光单元的运行参数及工作模式。
K230平台支持多种接口类型的sensor,我们以当前最常用的MIPI CSI接口Sensor为例进行说明。Sensor与主控平台的硬件连接示意图如下:
图1-3
主控通过I2C接口下发配置寄存器控制sensor的工作方式,sensor通过MIPI CSI接口将图像数据发送至主控SOC。
Sensor模块系统架构如下图1-4所示:
图1-4 sensor系统架构图
从上到下依次是:媒体接口层,硬件驱动层以及硬件层
- 媒体接口层:提供kd_mpi_sensor_xxx接口给外部模块操作和访问sensor设备。
- 驱动层:该层主要包两部分,分别是:sensor_dev,sensor_drv。
- sensor_dev:负责设备驱动文件的注册,提供文件操作接口的实现流程。通过注册设备文件节点/dev/sensorxx供用户空间的程序访问内核驱动。
- sensor_drv:具体sensor的硬件驱动,并将针对sensor的操作封装为统一的接口。
- 硬件层:sensor模组硬件,当前系统中最多同时支持三路硬件sensor。
2. API 参考
2.1 VICAP
该功能模块提供以下API:
- kd_mpi_vicap_get_sensor_info
- kd_mpi_vicap_set_dev_attr
- kd_mpi_vicap_get_dev_attr
- kd_mpi_vicap_set_chn_attr
- kd_mpi_vicap_get_chn_attr
- kd_mpi_vicap_init
- kd_mpi_vicap_deinit
- kd_mpi_vicap_start_stream
- kd_mpi_vicap_stop_stream
- kd_mpi_vicap_dump_frame
- kd_mpi_vicap_dump_release
- kd_mpi_vicap_set_vi_drop_frame
- kd_mpi_vicap_set_mclk
- kd_mpi_vicap_set_dump_reserved
- kd_mpi_vicap_set_slave_enable
- kd_mpi_vicap_set_slave_attr
- kd_mpi_vicap_3d_mode_crtl
2.1.1 kd_mpi_vicap_get_sensor_info
【描述】
根据指定的sensor配置类型获取sensor配置信息
【语法】
k_s32 kd_mpi_vicap_get_sensor_info(k_vicap_sensor_type sensor_type, k_vicap_sensor_info *sensor_info)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
sensor_type | Sensor配置类型 | 输入 |
sensor_info | Sensor配置信息 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
应用开发者根据需要要使用的sensor配置类型,需要首先调用该API获取sensor配置信息,并根据配置信息调用后续接口对VICAP其他模块进行初始化。
【举例】
无。
【相关主题】
2.1.2 kd_mpi_vicap_set_dev_attr
【描述】
设置VICAP设备属性
【语法】
k_s32 kd_mpi_vicap_set_dev_attr(k_vicap_dev dev_num, k_vicap_dev_attr dev_attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
dev_attr | VICAP设备属性 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【 注意】
无。
【举例】
无。
【相关主题】
2.1.3 kd_mpi_vicap_get_dev_attr
【描述】
获取VICAP设备属性
【语法】
k_s23 kd_mpi_vicap_set_chn_attr(k_vicap_dev dev, k_vicap_chn_attr chn_attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
dev_attr | VICAP设备属性 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
无。
【举例】
无。
【相关主题】
2.1.4 kd_mpi_vicap_set_chn_attr
【描述】
设置VICAP设备属性
【语法】
k_s32 kd_mpi_vicap_set_chn_attr(k_vicap_dev dev_num, k_vicap_chn chn_num, k_vicap_chn_attr chn_attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
chn_num | VICAP输出通道号 | 输入 |
chn_attr | VICAP输出通道属性 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
无。
【举例】
无。
【相关主题】
2.1.5 kd_mpi_vicap_get_chn_attr
【描述】
获取VICAP设备属性
【语法】
k_s32 kd_mpi_vicap_get_chn_attr(k_vicap_dev dev_num, k_vicap_chn chn_num, k_vicap_chn_attr *chn_attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
chn_num | VICAP输出通道号 | 输入 |
chn_attr | VICAP输出通道属性 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
无。
【举例】
无。
【相关主题】
2.1.6 kd_mpi_vicap_init
【描述】
VICAP设备初始化
【语法】
k_s32 kd_mpi_vicap_init(k_vicap_dev dev_num)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
使用该接口之前需要先调用kd_mpi_vicap_set_dev_attr设置设备属性,再调用kd_mpi_vicap_set_chn_attr 设置输出通道属性。
【举例】
无
【相关主题】
2.1.7 kd_mpi_vicap_deinit
【描述】
VICAP设备去初始化
【语法】
k_s32 kd_mpi_vicap_deinit(k_vicap_dev dev_num)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
无。
【举例】
无。
【相关主题】
2.1.8 kd_mpi_vicap_start_stream
【描述】
启动VICAP设备输出数据流
【语法】
k_s32 kd_mpi_vicap_start_stream(k_vicap_dev dev_num)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
无。
【举例】
无。
【相关主题】
2.1.9 kd_mpi_vicap_stop_stream
【描述】
停止VICAP设备数据流输出
【语法】
k_s32 kd_mpi_vicap_stop_stream(k_vicap_dev dev_num)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
无
【举例】
无。
【相关主题】
2.1.10 kd_mpi_vicap_dump_frame
【描述】
根据指定的设备和输出通道dump vicap数据
【语法】
k_s32 kd_mpi_vicap_dump_frame(k_vicap_dev dev_num, k_vicap_chn chn_num, k_vicap_dump_format foramt,
k_video_frame_info *vf_info, k_u32 milli_sec)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
dev_num | VICAP设备号 | 输入 |
chn_num | VICAP输出通道号 | 输入 |
foramt | Dump数据类型 | 输入 |
vf_info | Dump帧信息 | 输出 |
milli_sec | 超时时间 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参考错误码定义。 |
【芯片差异】
无。
【需求】
- 头文件:mpi_vicap_api.h
- 库文件:libvicap.a
【注意】
无。
【举例】
无。