camera杂项记录
CalculateExposure 函数pCalculateExposure函数平台输入参数:pCalculateExposureDatarealgain total gainae算法传过来的值或者手动曝光 的值linecount经过平台已经转换过的曝光时间middlerealgainmiddlelinecountshortrealgainshortlinecount::作用于shdrsensorResolutionIndex...输出参数:pExposureInfoanalogRealGainsensor的模拟gainanalogRegisterGainsensor的模拟gain对应的寄存器的值digitalRealGainsensor的数字gaindigitalRegisterGainsensor的数字gain对应的寄存器的值ISPDigitalGain isp的数字gain...LineCount ExposureTime / TlineTline HTS * 1 / vt_clk lineLengthPixelClock一行要处理多少个pixel * 1 / VTPixelClock处理一个pixel的时间vt_clk VTS * HTS * FPS frameLengthLines * lineLengthPixelClock * FPSTline 1 / VTS * FPS1/ frameLengthLines * FPSFillExposureSettings 函数pFillExposureSettings函数输入参数:pExposureData曝光寄存器信息analogRealGainsensor的模拟gaindigitalRealGainsensor的数字gain...输出参数:pRegSettingsInforegSettingCountsensor的寄存器数量regSetting[]sensor的寄存器数组8397 cci增加重试qcx/platformmanager/linux_lrh/src/platformi2c.cppCamStatus_e PLM_I2CInit(uint8_t cciId, I2CType_e i2cTypeInfo) { CamStatus_e rc CAMERA_EBADPARAM; I2CTypeInfo (I2CType_e)i2cTypeInfo; const uint32_t MAX_RETRY_COUNT 5; uint32_t retryCount 0; // Get the I2C type if (I2C_TYPE_CCI I2CTypeInfo) { if (cciId (uint8_t)CCI_DEVICES_NUM) { do { // resolve cci init fail rc CCI_Init(cciId, (uint32_t)I2CTypeInfo); if (CAMERA_SUCCESS rc) { break; } QCX_LOG(PLATFORM, ERROR, CCI_Init failed (rc 0x%x), retry %u/%u, rc, retryCount, MAX_RETRY_COUNT); if (retryCount MAX_RETRY_COUNT) { OSAL_SleepMilliSecond(100); //retry } } while (retryCount MAX_RETRY_COUNT); if (CAMERA_SUCCESS ! rc) { QCX_LOG(PLATFORM, ERROR, CCI_Init failed (rc 0x%x), rc); } else { rc RegisterEventCallback(CAMERA_HWBLOCK_CCI, cciId); if (CAMERA_SUCCESS ! rc) { QCX_LOG(PLATFORM, ERROR, Register fusa cci event callback failed (rc 0x%x)cmos camera sync参数先把逐行扫描时间轴摆出来(所有_lines字段都挂在这条线上)FSYNC沿 │ ├──── fsync_readout_latency_lines ────┤ 开始读第1行(readout start) │ (发令→迈第一步的启动延迟) ├─ readout_framestart_latency_lines ─┤ framestart标记 │ │ │ ├──────── rd2mid_lines ────────┤ 读到中心行 │ │ │ │ ├──── frame_readout_time_ns(读完整帧)────────┤ │ └── 每一格的宽度 line_readout_ns(读一行的耗时) ────────────────────────────────────逐个字段:比喻 作用 实测值一、节拍类(多久拍一帧)字段生动比喻作用例值fps每秒出几张帧率2 或 30fsync_period_ns发令枪多久响一次脉冲周期 1/fps,所有同步相机必须一致2fps→500,000,000;30fps→33,300,000二、延迟/定位类(发令枪响后,走到各时刻要几行)这几个是相位补偿的原料,get_initial_fsync_phase就用它们算 offset。字段生动比喻作用例值line_readout_ns扫描仪扫一行的时间(时间的砖块)把行数换算成纳秒的换算率2fps→83,333;30fps→10,417fsync_readout_latency_lines发令枪响 →真正迈第一步的反应时间从 FSYNC 沿到开始读第1行,注释FSYNC_2_VSYNC VSYNC_2_READOUT 实测误差1696(30x67053-12)rd2mid_lines从起跑扫到画面正中央那一行决定中心行读出时刻,注释FEBDOB裁剪高度/21094(1142176/2)readout_framestart_latency_lines起跑点与 ISP 眼里的**帧开始标记**之间的错位供FRAMESTART_READOUT_MODE和 zone 边界用,注释VSYNC_2_FRAMESTART(83)-VSYNC_2_READOUT(53)30frame_readout_time_ns扫完整幅画要多久整帧读出时长,用于余量/校验1,000,000,000/fps三、曝光类(把对齐点从读出精修到曝光中点)字段生动比喻作用例值default_exp_ns快门开着的时长曝光中心模式offset - default_exp_ns/2,把对齐点从读出往回挪半个曝光由SP1_EXPTIME换算exp_adjust_ns曝光调节留的余量/步进参与get_fsync_zone左右边界,给曝光变化留出相位活动空间6,000,000(2fps)四、护栏类(相位允许落在哪)字段生动比喻作用例值err_tolerance_lines起跑线两侧的误差白线get_fsync_zone用它把窗口向两边放宽,吸收实测抖动3~5五、画幅类(画多大)字段生动比喻作用active_width/active_height画面尺寸(宽×高)有效分辨率;height/2正是中心行的来源六、开关/杂项类字段生动比喻作用ir_mode红外补光挡位RGB-IR / 红外场景标志,影响曝光/同步策略default_delay_fsync等几声枪响再起跑上电后延迟几个 FSYNC 周期再进入同步,给 sensor 稳定时间sensor_shutter_sync是否支持快门也跟着同步TRUE 时连快门时刻一起对齐(imx728 这里为 FALSE)dynamic_fsync_fs_dis关掉动态 FSYNC的开关标记为 v2 设计要移除的旧字段(err_tolerance_lines/fsync_readout_latency_lines/dynamic_fsync_fs_dis)卡片背面旧版栏目注释// remove below in v2_design——下一版时序模型要废弃的字段