5.5. 视频接入 - Camera

5.5.1. 模块描述

Camera 接入方式

  • X5 支持 MIPI CSI 视频输入或者通过解串器( deserial )转换为 MIPI CSI 信号接入两种方式。

  • 两种方式使用需要通过 attach 和 detach 接口与 VIN Node 绑定和解绑,从而初始化初始化 sensor 。

    1. MIPI CSI 直接接入需要通过 hbn_camera_attach_to_vinhbn_camera_detach_from_vin接口将 Camera 与 VIN Node 绑定和解绑。

    2. 解串器(deserial)接入使用需要通过 hbn_deserial_attach_to_vinhbn_deserial_detach_from_vin 接口将 deserial 与 VIN Node 绑定和解绑。

  • 关于 VIN Node的描述,参考视频接入- VIN 模块描述章节

5.5.1.1. 硬件框图

主要组成模块

  • MIPI D-PHY (RX):作为 MIPI 协议接收端物理层,支持高速串行数据传输。

  • MIPI HOST 控制器:实现主机端的CSI-2协议,负责从D-PHY接收数据进行协议解析。X5 包含4个独立的HOST实例。

  • IPI (Image Pixel Interface):图像像素接口,CSI HOST控制器解析有效图像数据通过并行接口输出给SIF (Sensor Interface)模块进行后续处理。

  • IDI (Image Data Interface):图像数据接口。

image_20260104-215515.png

关键功能

  • 芯片支持 4路 独立的MIPI HOST (CSI0~CSI3),每个独立支持多 2条 Lane

  • MIPI HOST与IPI分配:

    • HOST0 / HOST2:每个绑定 4路 IPI。

    • HOST1 / HOST3:每个绑定 2路 IPI。

  • 通过DMUX启用Lane拼接功能时,HOST0和HOST2可分别配置使用 4条 Lane,以获得单路带宽。注意:在配置下,HOST1和HOST3将无法接收数据。

  • MIPI模块通过 12路 IPI接口数据接入SIF。每一路IPI可绑定一个独立虚拟通道,结合SerDes使用,理论接入 12路 Camera

5.5.1.2. MIPI 基础规格

  • 支持 MIPI CSI 视频输入:

    • 兼容 MIPI 联盟接口规范 v2.1

    • 支持多 8 条数据通道,每条数据通道最高支持 2.5Gbps 数据速率

    • 支持 MIPI-HS 和 MIPI-LP 模式

    • 硬件资源:4 个 2-lane PHY + 4 个 CSI-2 控制器

    • 支持 12 个虚拟通道

    • 支持最高分辨率 5472 x 3076 像素@30fps 视频输入

    • 支持多种视频格式:

      • RAW 8-/10-/12-/14-/16-bit 格式

      • YUV 422 格式(8-/10-bit)

  • 支持视频输入输出直通模式:

    • 支持 MIPI CSI RX 到 MIPI CSI TX 的直通(back-to-back)模式

5.5.2. 参考示例

  • Camera 接入部分示例代码可以参考 sample_vin 章节

5.5.3. API 参考

API 接口 接口功能
hbn_camera_create 根据 camera_config_t 传入配置创建 camera handle。
hbn_camera_destroy 根据 camera handle 销毁对应软件资源。
hbn_camera_attach_to_vin 通过 camera 和 vin node 的 handle,将两者在 vpf 框架绑定,并对 camera 的硬件初始化。
hbn_camera_detach_from_vin 将 camera 与 vin node 解绑,并初始化操作。
hbn_camera_attach_to_deserial 通过 camera 和 deserial 的 handle,将两者绑定,并对 deserial 和 camera 硬件初始化。
hbn_camera_detach_from_deserial 将 camera 与 deserial 解绑,并初始化操作。
hbn_camera_start 配置 camera 寄存器,开始出流。
hbn_camera_stop 配置 camera 寄存器,关流。
hbn_camera_reset 通过重新初始化 sensor 来做 reset。
hbn_camera_change_fps 动态切换 sensor 帧率。
hbn_camera_read_register 读取 camera 寄存器值。
hbn_camera_get_handle 通过 vin node handle 或者 camera port index,获取对应的 camera handle。
hbn_camera_init_cfg 通过传入配置,创建 camera handle 和 deserial handle 并绑定。
hbn_deserial_create 根据传入配置,创建 deserial handle。
hbn_deserial_destroy 根据 deserial handle 销毁对应软件资源。
hbn_deserial_attach_to_vin 将 deserial 与 vin node 绑定。
hbn_deserial_detach_from_vin 将 deserial 与 vin node 解绑。
hbn_txser_create 根据传入配置,创建串行句柄 tx serial handle。
hbn_txser_destroy 根据 tx serial handle 销毁对应软件资源。
hbn_txser_attach_to_vin 将 tx serial 与 vin node 绑定。
hbn_txser_detach_from_vin 将 tx serial 与 vin node 解绑。
hbn_camera_switch_scence 动态切换 camera isp tuning 效果文件。

5.5.3.1. hbn_camera_create

【函数声明】

int32_t hbn_camera_create(camera_config_t *cam_config, camera_handle_t *cam_fd)

【参数描述】

  • [IN] camera_config_t *cam_config:要配置的 camera 对应参数结构指针;

  • [OUT] camera_handle_t *cam_fd:根据配置参数返回的 fd,作为 camera 的操作 handle;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

根据 camera_config_t 传入配置创建 camera handle。

【注意事项】

  • API 里面对 sensor lib 进行检查,如果 sensor 驱动代码符合 HBN 框架规范,则检查报错。

  • API 里面对 cam_config 进行检查,如果配置符合 IP 硬件能力,则检查报错。

5.5.3.2. hbn_camera_destroy

【函数声明】

int32_t hbn_camera_destroy(camera_handle_t cam_fd)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera 的操作 handle,由 hbn_camera_create 所创建;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

根据 camera handle 销毁对应软件资源。

【注意事项】

  • hbn_camera_destroy 需要和 hbn_camera_create 成使用。

  • hbn_camera_destroy 会释放 sensor lib, 执行完成后,sensor 将无法正常访问。

  • hbn_camera_destroy 内部调用 hbn_camera_detach_from_vin,会触发 sensor 停流操作,所以 hbn_camera_destroy 需要在 hbn_vflow_destroy 之前调用。

5.5.3.3. hbn_camera_attach_to_vin

【函数声明】

int32_t hbn_camera_attach_to_vin(camera_handle_t cam_fd, vpf_handle_t vin_fd)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

  • [IN] vpf_handle_t vin_fd:由 hbn_vnode_open 接口创建的 vin node handle。

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

通过 camera 和 vin node 的 handle,将两者在 vpf 框架绑定,并对 camera 的硬件初始化。

【注意事项】

  • 同一个 camera,不能重复执行 hbn_camera_attach_to_vin,否则报 attach error 错误。

5.5.3.4. hbn_camera_detach_from_vin

【函数声明】

int32_t hbn_camera_detach_from_vin(camera_handle_t cam_fd)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

将 camera 与 vin node 解绑,并初始化操作。

【注意事项】

  • hbn_camera_detach_from_vin 需要和 hbn_camera_attach_to_vin 成使用。

  • hbn_camera_destroy 内部调用了 hbn_camera_detach_from_vin,所以调用了 hbn_camera_destroy 接口,hbn_camera_detach_from_vin 可以不再调用。

5.5.3.5. hbn_camera_attach_to_deserial

【函数声明】

int32_t hbn_camera_attach_to_deserial(camera_handle_t cam_fd, deserial_handle_t des_fd, camera_des_link_t link)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

  • [IN] deserial_handle_t des_fd:deserial handle,由 hbn_deserial_create 创建;

  • [IN] camera_des_link_t link:camera 与 deserial 的 link 方式,根据 camera 接到哪个 link 决定。

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

通过 camera 和 deserial 的 handle,将两者绑定,并对 deserial 和 camera 硬件初始化。

【注意事项】

  • 硬件解串器需要调用接口。

  • 执行 hbn_camera_attach_to_deserial 后,就需要执行 hbn_camera_attach_to_vin,而是由 deserial 绑定到 vin node。

5.5.3.6. hbn_camera_detach_from_deserial

【函数声明】

int32_t hbn_camera_detach_from_deserial(camera_handle_t cam_fd)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

将 camera 与 deserial 解绑,并初始化操作。

【注意事项】

  • hbn_camera_detach_from_deserial 需要和 hbn_camera_attach_to_deserial 成使用。

5.5.3.7. hbn_camera_start

【函数声明】

int32_t hbn_camera_start(camera_handle_t cam_fd)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

配置 camera 寄存器,开始出流。

【注意事项】

camera handle attach 到 vflow 后,该接口可以调用。如果调用必须调用 hbn_vflow_start,再调用 hbn_camera_start。

5.5.3.8. hbn_camera_stop

【函数声明】

int32_t hbn_camera_stop(camera_handle_t cam_fd)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

配置 camera 寄存器,关流。

【注意事项】

  • 需要和 hbn_camera_start 成使用。

5.5.3.9. hbn_camera_reset

【函数声明】

int32_t hbn_camera_reset(camera_handle_t cam_fd)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

通过重新初始化 sensor 来做 reset。

【注意事项】

  • 如果在 camera attach vin 之前调用接口,则通过 camera_attach_to_vin 接口给 sensor 初始化,达到 reset 效果。如果在 camera attach vin 之后调用接口,则调用 sensor stop,sensor deinit,然后初始化重新 init sensor,start sensor。

5.5.3.10. hbn_camera_change_fps

【函数声明】

int32_t hbn_camera_change_fps(camera_handle_t cam_fd, int32_t fps)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

  • [IN] int32_t fps:sensor 出图率;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

动态切换 sensor 帧率。

【注意事项】

  • 功能需要在 sensor lib 库中实现相应回调函数 dynamic_switch_fps。

5.5.3.11. hbn_camera_read_register

【函数声明】

int32_t hbn_camera_read_register(camera_handle_t cam_fd, camera_reg_type_t type, uint32_t reg_addr)

【参数描述】

  • [IN] camera_handle_t cam_fd:camera handle,由 hbn_camera_create 创建;

  • [IN] camera_reg_type_t type:读取 sensor 寄存器类型;

  • [IN] uint32_t reg_addr:寄存器地址;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

读取 camera 寄存器值。

【注意事项】

5.5.3.12. hbn_camera_get_handle

【函数声明】

camera_handle_t hbn_camera_get_handle(vpf_handle_t vin_fd, int32_t camera_index)

【参数描述】

  • [IN] vpf_handle_t vin_fd:vin node 的 fd;

  • [IN] int32_t camera_index:camera 的 port index;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

通过 vin node handle 或者 camera port index,获取对应的 camera handle。

【注意事项】

5.5.3.13. hbn_camera_init_cfg

【函数声明】

int32_t hbn_camera_init_cfg(const char *cfg_file)

【参数描述】

  • [IN] const char *cfg_file:camera 配置文件路径(json);

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

通过传入配置,创建 camera handle 和 deserial handle 并绑定。

【注意事项】

  • 该 API 是通过解析 json 方式创建 camera,与 sample 中非 json 方式接口不同,详情请咨询 FAE。

5.5.3.14. hbn_deserial_create

【函数声明】

int32_t hbn_deserial_create(deserial_config_t *des_config, deserial_handle_t *des_fd)

【参数描述】

  • [IN] deserial_config_t *des_config:deserial 配置参数结构指针;

  • [OUT] deserial_handle_t *des_fd:根据配置创建的 deserial handle;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

根据传入配置,创建 deserial handle。

【注意事项】

  • 硬件解串器需要调用接口。

  • 接口对 deserial 的配置进行检查,如果配置超出一定范围,则报错。

  • 接口对 deserial lib 进行检查,如果符合 HBN 架构规范,则报错。

5.5.3.15. hbn_deserial_destroy

【函数声明】

int32_t hbn_deserial_destroy(deserial_handle_t des_fd)

【参数描述】

  • [IN] deserial_handle_t des_fd:deserial handle,由 hbn_deserial_create 创建;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

根据 deserial handle 销毁对应软件资源。

【注意事项】

  • hbn_deserial_destroy 需要和 hbn_deserial_create 成使用。

5.5.3.16. hbn_deserial_attach_to_vin

【函数声明】

int32_t hbn_deserial_attach_to_vin(deserial_handle_t des_fd, camera_des_link_t link, vpf_handle_t vin_fd)

【参数描述】

  • [IN] deserial_handle_t des_fd:deserial handle,由 hbn_deserial_create 创建;

  • [IN] camera_des_link_t link:deserial 的 link 编号;

  • [IN] vpf_handle_t vin_fd:要绑定的 vin node handle;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

将 deserial 与 vin node 绑定。

【注意事项】

  • 硬件带有解串器,则 camera 与 deserial 进行绑定,deserial 与 vin node 绑定。

5.5.3.17. hbn_deserial_detach_from_vin

【函数声明】

int32_t hbn_deserial_detach_from_vin(deserial_handle_t des_fd, camera_des_link_t link)

【参数描述】

  • [IN] deserial_handle_t des_fd:deserial handle,由 hbn_deserial_create 创建;

  • [IN] camera_des_link_t link:deserial 的 link 编号;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

将 deserial 与 vin node 解绑。

【注意事项】

  • hbn_deserial_detach_from_vin 与 hbn_deserial_attach_to_vin 需要使用。

5.5.3.18. hbn_txser_create

【函数声明】

int32_t hbn_txser_create(txser_config_t *txs_config, txser_handle_t *txs_fd)

【参数描述】

  • [IN] txser_config_t *txs_config:tx serial 配置参数结构指针;

  • [OUT] txser_handle_t *txs_fd:根据配置创建的 tx serial handle;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

根据传入配置,创建串行句柄 tx serial handle。

【注意事项】

  • 硬件串行器时需要调用接口。

  • 接口对 txser 的配置进行检查,如果配置超出一定范围,则报错。

  • 接口对 txser lib 进行检查,如果符合 HBN 架构规范,则报错。

5.5.3.19. hbn_txser_destroy

【函数声明】

int32_t hbn_txser_destroy(txser_handle_t txs_fd)

【参数描述】

  • [IN] txser_handle_t txs_fd:tx serial handle,由 hbn_txser_create 创建;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

根据 tx serial handle 销毁对应软件资源。

【注意事项】

  • 硬件串行器时需要调用接口。

  • hbn_txser_destroy 与 hbn_txser_create 需要使用。

5.5.3.20. hbn_txser_attach_to_vin

【函数声明】

int32_t hbn_txser_attach_to_vin(txser_handle_t txs_fd, camera_txs_csi_t csi, vpf_handle_t vin_fd)

【参数描述】

  • [IN] txser_handle_t txs_fd:tx serialhandle,由 hbn_txser_create 创建;

  • [IN] camera_txs_csi_t csi:tx csi index;

  • [IN] vpf_handle_t vin_fd:要绑定的 vin node handle;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

将 tx serial 与 vin node 绑定。

【注意事项】

  • 硬件串行器时需要调用接口。

  • 接口对 txser 硬件进行初始化。

  • 硬件带有串行器,则 camera 与 txser 进行绑定,txser 与 vin node 绑定。

5.5.3.21. hbn_txser_detach_from_vin

【函数声明】

int32_t hbn_txser_detach_from_vin(txser_handle_t txs_fd, camera_txs_csi_t csi)

【参数描述】

  • [IN] txser_handle_t txs_fd:tx serial handle,由 hbn_txser_create 创建;

  • [IN] camera_txs_csi_t csi:tx csi index;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

将 tx serial 与 vin node 解绑。

【注意事项】

  • hbn_txser_detach_from_vin 需要与 hbn_txser_attach_to_vin 成使用。

5.5.3.22. hbn_camera_switch_scence

【函数声明】

int32_t hbn_camera_switch_scence(int64_t vflow_fd, int64_t isp_vnode_fd, const char *cname)

【参数描述】

  • [IN] int64_t vflow_fd:camera flow handle,由 hbn_vflow_create 创建;

  • [IN] int64_t isp_vnode_fd:isp node handle,由 hbn_vflow_get_vnode_handle 获取;

  • [IN] const char *cname:isp tuning json 字符串,默认从/usr/hobot/lib/sensor 目录指定的 tuning 文件,如果 tuning 文件在/usr/hobot/lib/sensor 目录,需要指定 tuning 文件绝对路径;

【返回值】

  • 成功:RET_OK 0

  • 失败:异常负值错误码

【功能描述】

动态切换 camera isp tuning 效果文件。

【注意事项】

  • 该 API 会先 stop vflow,然后进行切换 isp tuning 文件,最后重新 start vflow。

5.5.4. 数据结构

Camera 参数

typedef struct camera_config_s

名称 类型 最小值 最大值 默认值 含义 必选
name[CAMERA_MODULE_NAME_LEN] char - CAMERA_MODULE_NAME_LEN(108) - camera 模组名称,需要和 sensor lib 名称对应,如:sensor 驱动名称为:libsc1330t.so,那么 name 为 sc1330t
addr uint32_t 0x00 0x7f 0x00 sensor 设备地址,一般是 i2c 7位地址
isp_addr uint32_t 0x00 0x7f 0x00 isp 设备地址(如有),默认
eeprom_addr uint32_t 0x00 0x7f 0x00 eeprom 设备地址(如有),默认
serial_addr uint32_t 0x00 0x7f 0x00 serdes 设备地址(如有),默认
sensor_mode uint32_t 1 6 1 sensor 工作模式,可以使用 enum sensor_mode_e 枚举,定义如下:
1:NORMAL_M,linear 模式;
2:DOL2_M,hdr2帧合成1帧;
3:DOL3_M,hdr3帧合成1帧;
4:DOL4_M,hdr4帧合成1帧;
5:PWL_M,hdr 模式 sensor 内部合成
6:SLAVE_M,slave 模式, 需要外界 trigger 信号,才能正常出流
sensor_clk uint32_t - - 0x00 sensor 一些 clk 时钟配置,目前生效,备用
gpio_enable_bit uint32_t 0 0xFFFFFFFF 0 是否使用 X5 gpio 控制 camera sensor 的引脚,以满足 sensor 上下时序要求。
如:使用 gpio 来控制 sensor XSHUTDN 引脚。
注意:需要在 dts 中配置对应的 gpio number。
0:不使用 gpio 来控制;
非0:使用 gpio 来控制 sensor,按照 bit 来使能 gpio。比如: 0x07 则代表使能 [gpio_a, gpio_b, gpio_c] 3 个 gpio。
gpio_level_bit uint32_t 0 1 0 如果选择 gpio_enable_bit,则可以配置 gpio_level_bit 来控制 sensor 引脚低电平。某个 gpio bit 与 sensor 管脚低电平关系如下:
0: 先输出低电平, sleep 1s,再输出高电平;
1: 先输出高电平,sleep 1s,再输出低电平。
比如:0x05 = 101,从 bit0 到 bit2 分别代表 gpio_a 先输出高电平,再输出低电平,gpio_b 先输出低电平,再输出高电平,gpio_c 先输出高电平,再输出低电平。
需要根据 sensor spec 上电时序来自定义。
bus_select uint32_t 0 6 0 sensor i2c number 选择,一般硬件固定后,对应的 i2c 也固定的,所以建议在 dts 中配置,这里可以省去。
dts 中绑定 sensor i2c,详情见:camera 点亮说明文档。
bus_timeout uint32_t 0 - 0 I2C 的 timeout 时间配置。配置了 bus_select,才需要配置。
fps uint32_t 0 120 0 sensor 帧配置。
width uint32_t 0 8192 0 sensor 出图宽度(pixel)
height uint32_t 0 4096 0 sensor 出图高度(pixel)
format uint32_t - - - sensor 数据类型,常见如下:
RAW8: 0x2A;
RAW10: 0x2B;
RAW12: 0x2C;
YUV422 8-bit: 0x1E
flags uint32_t 0 - 0 功能:诊断,恢复,debug 等
extra_mode uint32_t 0 - 0 各 sensor 库内部定制配置: 多用于区分模组功能开关
config_index uint32_t 0 - 0 各 sensor 库内部定制配置: 多用于区分模组功能开关
ts_compensate uint32_t 0 - 0 预留参数,备用
mipi_cfg mipi_config_t - - - MIPI 配置, 置为 NULL 自动从 sensor 驱动获取配置(get_csi_attr)。
calib_lname char - - - sensor 效果路径,默认路径为 /usr/hobot/lib/sensor,支持自定义路径,总长度超过 100 字节。
比如: calib_lname="/userdata/test_tuning.json"。
目前软件版本,如果设置为 disable,则代码默认使用 sensor_name_tuning.json 的字符串传给 isp。
sensor_param char - - - sensor 自定义数据
iparam_mode uint32_t - - - 预留参数,备用
end_flag uint32_t - - - 预留参数,备用

typedef struct deserial_config_s

名称 类型 最小值 最大值 默认值 含义 必选
name char[CAMERA_MODULE_NAME_LEN] - - - Deserial 的名称,例如 max9296。
addr uint32_t 0 - - Deserial 设备地址。
gpio_enable_bit uint32_t 0 - - GPIO 操作使能位,索引自 VCON。
gpio_level_bit uint32_t 0 - - GPIO 工作状态位,表示当前 GPIO 状态。
gpio_mfp uint8_t[CAMERA_DES_GPIO_MAX] 0 CAMERA_DES_GPIO_MAX 0x0 MFP 的 GPIO 功能选择,用于指定 GPIO 的多功能配置。
bus_select uint32_t 0 - - I2C 总线选择,索引自 VCON。
bus_timeout uint32_t 0 - - I2C 超时时间设置,单位毫秒。
lane_mode uint32_t 0 - - PHY 配置的 lane 模式选择。
lane_speed uint32_t 0 - - PHY 配置的 lane 速率。
link_map uint32_t 0 - - Link 和 CSI/VC 的映射关系配置。
link_desp char[CAMERA_DES_LINKMAX][CAMERA_DES_PORTDESP_LEN] - - - 各 Link 连接模组配置描述,用于进程使用。
reset_delay uint32_t 0 - - Reset 操作延迟时间,单位毫秒。
flags uint32_t 0 - - 功能标志,例如诊断、调试等。
poc_cfg poc_config_t* - - NULL POC 配置指针,若为 NULL 则无 POC 功能。
mipi_cfg mipi_config_t* - - NULL MIPI 配置指针,若为 NULL 则自动获取配置。
deserial_param char* - - NULL Deserial 自定义数据指针。
end_flag uint32_t 0 0xFFFFFFFF - 结构配置结束标志。

typedef struct poc_config_s

名称 类型 最小值 最大值 默认值 含义 必选
name char[CAMERA_MODULE_NAME_LEN] - - - POC 的名称,例如 max20087。
addr uint32_t 0 - - POC 设备地址。
gpio_enable_bit uint32_t 0 - - GPIO 操作使能位,索引自 VCON。
gpio_level_bit uint32_t 0 - - GPIO 工作状态位,表示当前 GPIO 状态。
poc_map uint32_t 0 - - POC 与 Link 的映射关系。
power_delay uint32_t 0 - - POC 开关操作延迟时间,单位毫秒。
end_flag uint32_t 0 0xFFFFFFFF - 结构配置结束标志,用于校验完整性。

5.5.5. 返回值说明

错误码 定义 描述 常见原因解决方法
0 HBN_STATUS_SUCESS 成功
1 HBN_STATUS_INVALID_NODE vnode 无效,找不到对应的 vnode
2 HBN_STATUS_INVALID_NODETYPE vnode 类型无效,找不到对应的 vnode 对于 VIN,vnode 类型为 HB_VIN
3 HBN_STATUS_INVALID_HWID 无效硬件模块 id 对于 VIN,hw_id 取值为 0
4 HBN_STATUS_INVALID_CTXID 无效的 context id 设置为 AUTO_ALLOC_ID,由 HBN 框架自动分配
5 HBN_STATUS_INVALID_OCHNID 无效输出通道 id VIN 输出通道为 0
6 HBN_STATUS_INVALID_ICHNID 无效输入通道 id VIN 仅支持1个输入通道
7 HBN_STATUS_INVALID_FORMAT 无效格式
8 HBN_STATUS_INVALID_NULL_PTR 指针
9 HBN_STATUS_INVALID_PARAMETER 无效参数,版本检查失败
10 HBN_STATUS_ILLEGAL_ATTR 无效参数
11 HBN_STATUS_INVALID_FLOW 无效的 flow,找不到对应的 flow
12 HBN_STATUS_FLOW_EXIST flow 已经存在
13 HBN_STATUS_FLOW_UNEXIST flow 不存在
14 HBN_STATUS_NODE_EXIST node 已经存在
15 HBN_STATUS_NODE_UNEXIST node 不存在
16 HBN_STATUS_NOT_CONFIG 预留
17 HBN_STATUS_CHN_NOT_ENABLED 通道未使
18 HBN_STATUS_CHN_ALREADY_ENABLED 通道使
19 HBN_STATUS_ALREADY_BINDED node 已经绑定
20 HBN_STATUS_NOT_BINDED node 未绑定
21 HBN_STATUS_TIMEOUT 超时
22 HBN_STATUS_NOT_INITIALIZED 初始化
23 HBN_STATUS_NOT_SUPPORT 通道支持未激活
24 HBN_STATUS_NOT_PERM 操作允许
25 HBN_STATUS_NOMEM 内存不足
26 HBN_STATUS_INVALID_VNODE_FD 无效的 node 文件描述符
27 HBN_STATUS_INVALID_ICHNID_FD 无效输入通道文件描述符
28 HBN_STATUS_INVALID_OCHNID_FD 无效输出通道文件描述符
29 HBN_STATUS_OPEN_OCHN_FAIL 打开输出通道失败
30 HBN_STATUS_OPEN_ICHN_FAIL 打开输入通道失败
31 HBN_STATUS_JSON_PARSE_FAIL json 解析失败
32 HBN_STATUS_REQ_BUF_FAIL 请求 buffer 失败
33 HBN_STATUS_QUERY_BUF_FAIL 查询 buffer 信息失败
34 HBN_STATUS_SET_CONTROL_FAIL 模块控制、调节参数(如 ISP 效果参数)设置失败
35 HBN_STATUS_GET_CONTROL_FAIL 模块控制、调节参数(如 ISP 效果参数)获取失败
36 HBN_STATUS_NODE_START_FAIL node 开启失败
37 HBN_STATUS_NODE_STOP_FAIL node 停止失败
38 HBN_STATUS_NODE_POLL_ERROR node 通道 poll 错误
39 HBN_STATUS_NODE_POLL_TIMEOUT node 通道 poll 超时
40 HBN_STATUS_NODE_POLL_FRAME_DROP node 通道 poll 时发生
41 HBN_STATUS_NODE_POLL_HUP node 通道 poll 时描述符
42 HBN_STATUS_NODE_ILLEGAL_EVENT node 通道 poll 时事件非法
43 HBN_STATUS_NODE_DEQUE_ERROR node 通道 dequeue buffer 错误
44 HBN_STATUS_ILLEGAL_BUF_INDEX 无效的 buffer 索引
45 HBN_STATUS_NODE_QUE_ERROR node 通道 queue buffer 错误
46 HBN_STATUS_FLUSH_FRAME_ERROR node 通道帧 flush 错误
47 HBN_STATUS_INIT_BIND_ERROR 用 json 解析绑定发生错误
48 HBN_STATUS_ADD_NODE_FAIL 向 flow 中添加 node 失败
49 HBN_STATUS_WRONG_CONFIG_ID 系统支持的 node id
50 HBN_STATUS_BIND_NODE_FAIL flow 绑定 node 时发生错误
51 HBN_STATUS_INVALID_VERSION 底层驱动模块上层版本号匹配错误
52 HBN_STATUS_GET_VERSION_ERROR 获取底层驱动模块版本号错误
53 HBN_STATUS_MEM_INIT_FAIL hbmem 内存初始化失败
54 HBN_STATUS_MEM_IMPORT_FAIL hbmem 内存引入失败
55 HBN_STATUS_MEM_FREE_FAIL hbmem 内存释放失败
56 HBN_STATUS_SYSFS_OPEN_FAIL 系统文件打开失败
57 HBN_STATUS_STRUCT_SIZE_NOT_MATCH hal 层结构大小与 kernel 层匹配
58 HBN_STATUS_RGN_UNEXIST 获取不到对应的 rgn 数据
59 HBN_STATUS_RGN_INVALID_OPERATION rgn 操作无效
60 HBN_STATUS_RGN_OPEN_FILE_FAIL rgn 模块打开文件失败
128 HBN_STATUS_ERR_UNKNOW 未知错误