ISP API 开发指南
SDK API 接口说明
ISP API
本节介绍 ISP 模块 API 使用方法,描述的 API 都是 ISP SDK 面向应用的,分为系统控制 API、图像效果设置 API 和 tuning 相关的 API,详细解释了相关的参数数据结构、错误码和返回值。主要面向 ISP 效果相关的 tuning 和算法工程师,以及图像相关相关的 setting 功能开发的应用工程师。
系统控制 API
系统控制 API 如下:
- ASR_ISP_Construct:构造 ISP pipeline 上下文环境接口。
- ASR_ISP_Destruct:析构 ISP pipeline 上下文环境接口。
- ASR_ISP_GetFwFrameInfoSize():获取 ISP firmware frameinfo 结构体大小接口。
- ASR_ISP_RegSensorCallBack:向 ISP pipeline 注册 sensor 回调函数接口。
- ASR_ISP_UnRegSensorCallBack:从 ISP pipeline 注销 sensor 回调函数接口。
- ASR_ISP_RegAfMotorCallBack:向 ISP pipeline 注册 sensor 马达回调函数接口。
- ASR_ISP_EnableOfflineMode:使能 ISP pipeline 的 Offline 模式接口。
- ASR_ISP_SetPubAttr:设置 ISP pipeline 公共属性接口。
- ASR_ISP_SetTuningParams:设置 ISP pipeline tuning 相关参数接口。
- ASR_ISP_SetChHwPipeID:设置 ISP pipeline channel 工作的真实硬件 pipe ID 接口。
- ASR_ISP_Init:初始化 ISP pipeline。
- ASR_ISP_DeInit:撤销 ISP pipeline 的初始化。
- ASR_ISP_EnablePDAF:使能 ISP pipeline 的 PDAF。
- ASR_ISP_SetFps:设置该 pipeline 上 sensor/ISP 工作的帧率。
- ASR_ISP_SetFrameinfoCallback:设置 ISP pipeline frameinfo 的回调。
- ASR_ISP_QueueFrameinfoBuffer:设置 ISP pipeline frameinfo buffer 的入队列。
- ASR_ISP_FlushFrameinfoBuffer:清除 ISP pipeline 上的 frameinfo buffer。
- ASR_ISP_Streamon:streamon ISP pipeline。
- ASR_ISP_Streamoff:streamoff ISP pipeline。
- ASR_ISP_TriggerRawCapture:触发 ISP pipeline 进行 Raw 拍照流程。
- ASR_ISP_ReInitPreviewChannel:重新初始化预览 channel。
- ASR_ISP_NotifyOnceHDRRawCapture:通知 ISP pipeline 进入一次 HDR Raw 拍照流程。
- ASR_ISP_UpdateNoneZslStreamAeParams:更新 sensor 相关 AE 的参数。
ASR_ISP_Construct
【描述】
构造 ISP pipeline 上下文环境。
【语法】
int ASR_ISP_Construct(uint32_t pipelineID);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline 的 ID | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h
- 库文件:libisp.so
【注意】
- 如 2.2.1 所述,输入参数 pipelineID 描述的是个虚拟的 pipeline,对应的是 ISPfirmware,一个 pipelineID 对应一个 firmware。
ASR_ISP_Destruct
【描述】
析构 ISP pipeline 上下文环境。
【语法】
int ASR_ISP_Destruct (uint32_t pipelineID);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline 的 ID | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h
- 库文件:libisp.so
ASR_ISP_GetFwFrameInfoSize
【描述】
获取 ISP Firmware frameinfo 结构体的大小。
【语法】
int ASR_ISP_GetFwFrameInfoSize ();
【参数】
无。
【返回值】
参数名称 | 描述 |
---|---|
>0 | 结构体大小 |
<0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h
- 库文件:libisp.so
ASR_ISP_RegSensorCallBack
【描述】
向 ISP pipeline 注册 sensor 的回调函数。
【语法】
IntASR_ISP_RegSensorCallBack(uint32_tpipelineID,ISP_SENSOR_ATTR_S *pstSensorInfo, ISP_SENSOR_REGISTER_S *pstRegister);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline 的 ID | 输入 |
pstSensorInfo | 注册 sensor 的属性 | 输入 |
pstRegister | 注册 sensor 的回调函数结构体 指针 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_sensor_comm.h
- 库文件:libisp.so、libcam_sensors.so
ASR_ISP_UnRegSensorCallBack
【描述】
向 ISP pipeline 注销 sensor 的回调函数。
【语法】
IntASR_ISP_UnRegSensorCallBack(uint32_tpipelineID,ISP_SENSOR_ATTR_S *pstSensorInfo);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline 的 ID | 输入 |
pstSensorInfo | 注册 sensor 的属性 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_sensor_comm.h
- 库文件:libisp.so
ASR_ISP_RegAfMotorCallBack
【描述】
向 ISP pipeline 注册 sensor 马达的回调函数。
【语法】
IntASR_ISP_RegAfMotorCallBack(uint32_tpipelineID,ISP_AF_MOTOR_REGISTER_S *pstAfRegister);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline 的 ID | 输入 |
pstAfRegister | 注册 sensor 马达的回调函数结构体指针 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_sensor_comm.h
- 库文件:libisp.so
ASR_ISP_EnableOfflineMode
【描述】
操作 ISP pipeline offline 模式接口,使能 offline 模式指 ISP 的输入 stream 来自 DDR 而非 sensor, 由 VI 模块从 DDR 读取数据。
【语法】
IntASR_ISP_EnableOfflineMode(uint32_tpipelineID,uint32_tenable,const ISP_OFFLINE_ATTR_S *pstOfflineAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline 的 ID | 输入 |
enable | 使能/关闭 offline 模式 | 输入 |
pstOfflineAttr | 指向 Offline 模式属性结构体得指针 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so
【注意】
- 使能 offline 模式时,sensor 以及马达的 callback 不需要注册,即使注册了,ISP 也不会使用。
- 特殊的拍照场景中 offline pipeline 的处理不需要使用 该函数。
ASR_ISP_SetPubAttr
【描述】
设置 ISP pipeline 上 channel 的公共属性。
【语法】
int ASR_ISP_SetPubAttr(uint32_t pipelineID, uint32_t channelID, const ISP_PUB_ATTR_S
*pstPubAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline ID 号 | 输入 |
channelID | ISP pipeline channel 的 ID | 输入 |
pstPubAttr | ISP pipeline 的公共属性结构体指针 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so
ASR_ISP_SetTuningParams
【描述】
设置 ISP pipeline 上 tuning 相关的属性。为了支持算法开发调试方便,ISP 初始化的 tuning 参数会由两个部分决定:
- 先从 sensor 那边获取(事先将 tuning 好的文件转换成代码)设置;
- 如果此接口告诉 ISP 当前有 tuning file 存在,ISP 会以该文件优先,覆盖之前设置的参数;否则不会执行任何操作。
【语法】
intASR_ISP_SetTuningParams(uint32_tpipelineID,ISP_TUNING_ATTRS_S *pstTuningAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline ID 号 | 输入 |
pstTuningAttr | ISP pipeline 的 tuning 属性结构体指针 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so
【注意】
- 调用该接口之前,ASR_ISP_RegSensorCallBack 或者 ASR_ISP_EnableOfflineMode 需要先调用。
ASR_ISP_SetChHwPipeID
【描述】
设置 ISP pipeline 的 channel 实际工作的硬件 pipe ID。
【语法】
int ASR_ISP_SetChHwPipeID(uint32_t pipelineID, uint32_t channelID, uint32_t hwPipeID);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline ID 号 | 输入 |
channelID | ISP pipeline channel 的 ID | 输入 |
hwPipeID | 实际硬件 pipe ID | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so
【注意】
- 该接口要在 ASR_ISP_Init 之前调用,否则 ISP channel 以默认的 channel ID(硬件 pipe0) 开始运行。
- 参考 2.2.1 节的描述,输入参数 pipelineID 对应的是 ISPfirmware,channelID 对应的是工作模式 preview 或 capture,hwPipeID 对应的是 ISP 硬件 pipelineID。对于特殊的拍照场景,可以用一套 firmware 管理 2 个硬件 pipeline 工作在不同的模式下,这样保证 2 个硬件 pipeline 的图像效果保持一致。
ASR_ISP_Init
【描述】
以之前设置的参数,初始化 ISPpipeline,经过初始化后,第一帧的所有参数已经 ready,原则上不建议在该接口后再设置初始化的参数,因为不会在第一帧生效,而会在第二帧生效。
【语法】
int ASR_ISP_Init(uint32_t pipelineID);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline ID 号 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so
ASR_ISP_DeInit
【描述】
撤销 ISP pipeline 的初始化,清除所有设置在该 pipeline 上的效果参数,注册的一些 callback 是不会清除的。
【语法】
int ASR_ISP_ DeInit (uint32_t pipelineID);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline ID 号 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so
ASR_ISP_EnablePDAF
【描述】
使能/关闭 ISP pipeline 的 PDAF 功能。
【语法】
int ASR_ISP_EnablePDAF(uint32_t pipelineID, uint32_t enable);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline ID 号 | 输入 |
enable | 使能或者关闭 PDAF 的标识位 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so
【注意】
- 必须在 ASR_ISP_Init 之后调用。
ASR_ISP_SetFps
【描述】
设置 ISPpipeline 的帧率,ISP 支持动态帧率,如果需要以特定的帧率运行,请将 fminFps 和 fmaxFps 设置成一样的值。该接口可以在 ASR_ISP_Init 之前或者 ISP 运行期间设置,前者设置后,第一帧便以设置的帧率运行。
【语法】
int ASR_ISP_SetFps(uint32_t pipelineID, float fminFps, float fmaxFps);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline ID 号 | 输入 |
fminFps | 最小帧率 | 输入 |
FmaxFps | 最大帧率 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so
ASR_ISP_SetFrameinfoCallback
【描述】
设置 ISP pipeline 的通知获取 frameinfo 回调函数,ISP 在更新每帧 frameinfo 时,通过该 callback 将 frameinfo 送至 user。
【语法】
int ASR_ISP_SetFrameinfoCallback(uint32_t pipelineID, GetFrameInfoCallBack callback);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipelineID | ISP pipeline 的 ID | 输入 |
callback | User 获取 frameinfo 的回调函数 | 输入 |
【返回值】
参数名称 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败,值为错误码 |
【需求】
- 头文件:spm_cam_isp.h、spm_isp_comm.h
- 库文件:libisp.so