本讲是Camera KMD ISP子系统专题的第15讲,我们讲解Camera KMD ISP子系统CRM之初识PipelineDelay。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
Realtime Pipeline
Realtime pipeline或实时Pipeline,在这个Pipeilne上的硬件设备有一些特点:
- 实时,实时是指streamon后一直在出图,如下图的蓝色线(flash和actuator不会出图,但也是挂载到Realtime pipeline上面)
- 图像数据不是来自DDR
Realtime Pipeline CaptureRequest的布局
什么是RPC
RPC: Realtime Pipeline CaptureRequest
RPC的布局
RPC包括Settings和Buffers,这个跟Android里面定义的CaptureRequest概念’类似’。
- Settings里面包括各Realtime硬件设备的参数(ISP,Sesnor、Actuator等)
- Buffers里面包括各路图像数据Buffer,各统计数据Buffer(也就是当前Request要求ISP需要输出的所有数据信息)
RPC CaptureRequest转换为Device Request
RPC CaptureRequest实际在使用的时候会拆成Device Request
- ISP Output buffers,整个Realtime pipeilne最后只有ISP来写DDR, Buffers都给它
-
ISP Settings,比如ISP内部各IQ模块的参数设置
-
Sensor settings,比如曝光时间、Gain
- Actuator Settings,比如马达要推到哪个位置(DAG值)
Pipeline Delay
只有Realtime pipeline才会有Pipeline delay(我们也叫Device delay),它表示的是当前硬件设备需要过多少帧才能生效当前的配置,不同的硬件设备有不同的Pipeline delay。
Sensor 设备的Pipeline Delay
假如我们在下图Frame 1的SOF修改了Sesensor的settings,实际生效的可能会在Frame 3,这样的话Sensor的Pipeilne delay就是2。
同理,Frame 2配置的参数要在Frame 4才生效,以此类推。
实际代码中Sensor的Pipeline delay配置:
int cam_sensor_publish_dev_info(struct cam_req_mgr_device_info *info)
{
info->p_delay = CAM_PIPELINE_DELAY_2;
}
ISP 设备的Pipeline Delay
假如我们在下图Frame 1的SOF修改了ISP的settings,实际生效的会在Frame 2,这样的话ISP的Pipeilne delay就是1。
实际代码中ISP的Pipeline delay配置:
static int __cam_isp_ctx_get_dev_info_in_acquired(struct cam_context *ctx, struct cam_req_mgr_device_info *dev_info)
{
dev_info->p_delay = CAM_PIPELINE_DELAY_1;
}
总结下:
- Pipeline delay就是device delay,描述的是该硬件设备需要多少帧才能生效设置
-
Pipeline delay 1的硬件设备: isp, flash, actuator
-
Pipeline delay 2的硬件设备: sensor
大多数Sensor的pipeline delay都是2,但不是绝对的,实际要参考Sensor datasheet。