46. 开发者指南¶
46.1. 概述¶
当图像的最后一个pixel通过后即可取得统计信息, 使用者可通过
CVI_ISP_GetVDTimeOut
以同步获得统计值, 可参考33.1.8的流程。因为Linux系统user space任务调度不能保证一致的实时性, 需要将驱动配置放在kernel space完成。
ISP提供同步回调接口的注册,可以实现与VD同步。
在本章有相应的接口使用描述, 用户可以将实时性要求较高的任务放在同步回调里面, 底层提供HwIRQ,Workqueue两种方式实现, 可以选择相应的实现方式以确定实时级别。
HwIRQ是指任务放在中断服务中实现,实时性最高, Workqueue的实时性取决于linux系统调用。
46.2. API 参考¶
isp_sync_task_register :向ISP注册同步回调接口。
isp_sync_task_unregister :向ISP反注册同步回调接口。
46.2.1. isp_sync_task_register¶
【描述】
向ISP注册同步回调接口
【语法】
int isp_sync_task_register(int vi_pipe, struct isp_sync_task_node *new_node);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
vi_pipe |
VI_PIPE 号 |
输入 |
new_node |
新插入的同步回调节点 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功。 |
非 0 |
失败。 |
【需求】
头文件: cvi_vip_isp_ext.h
库文件:
【注意】
使用前需要确保ISP驱动已加载。
因为ISP同步回调内部实现不保存用户传入的 new_node 指向的实体,所以要求使用 isp_sync_task_node 定义实体时不能为局部变量。
【举例】
无。
【相关主题】
46.2.2. isp_sync_task_unregister¶
【描述】
向ISP反注册同步回调接口
【语法】
int isp_sync_task_unregister(int vi_pipe, struct isp_sync_task_node *del_node);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
vi_pipe |
VI_PIPE 号 |
输入 |
del_node |
需要删除的同步回调节点 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功。 |
非 0 |
失败。 |
【需求】
头文件: cvi_vip_isp_ext.h
库文件:
【注意】
使用前需要确保ISP驱动已加载。
【举例】
无。
【相关主题】
46.3. 数据类型¶
isp_sync_tsk_method :定义同步回调方法,决定实时性。
isp_sync_task_node :定义同步回调节点信息。
46.3.1. isp_sync_tsk_method¶
【说明】
定义同步回调方法,决定实时性
【定义】
enum isp_sync_tsk_method {
ISP_SYNC_TSK_METHOD_HW_IRQ = 0,
ISP_SYNC_TSK_METHOD_WORKQUE,
ISP_SYNC_TSK_METHOD_BUTT
};
【成员】
成员名称 |
描述 |
---|---|
ISP_SYNC_TSK_METHOD_HW_IRQ |
使用硬件中断方式回调。 |
ISP_SYNC_TSK_METHOD_HW_WORKQUE |
使用工作队列方式回调。 |
【注意事项】
无。
【相关数据类型及接口】
无。
46.3.2. isp_sync_task_node¶
【说明】
定义同步回调节点信息
【定义】
struct isp_sync_task_node {
enum isp_sync_tsk_method method;
__s32 (*isp_sync_tsk_call_back)(__u64 data);
__u64 data;
const char *sz_id;
struct list_head list;
};
【成员】
成员名称 |
描述 |
---|---|
method |
回调方式。 |
isp_sync_tsk_call_back |
回调函数,用户注册时传入。 |
data |
回调函数参数,用户注册时传入。 |
sz_id |
节点ID。 |
list |
list节点,用于管理多个回调节点,无需关注。 |
【举例】
isp_sync_task_node sync_node = {
.method = ISP_SYNC_TSK_METHOD_HW_IRQ,
.isp_sync_tsk_call_back = sync_af_calc,
.data = 0,
.sz_id = "hw_0"
};
【注意事项】
无。
【相关数据类型及接口】