
IMX385 60/120 FPS 适配修改说明IMX385 60/120 FPS 适配修改说明1. Sensor 模式定义1.1 VMAX 和行数上限1.2 工作模式枚举2. Sensor AE 和曝光控制2.1 视频模式表2.2 HMAX 寄存器地址2.3 AE 按当前模式计算2.4 曝光寄存器计算2.5 ISP RAW 参数3. Sensor 初始化和 MIPI 时序4. Sample sensor 类型和 ISP 属性5. VI RAW10/RAW12 配置6. VB 和 VENC 帧率配置7. 模式选择IMX385 60/120 FPS 适配修改说明本文档总结 Sony IMX385 在 Hi3519DV500 SDK 中从原有 30fps 扩展到 60/120fps 的代码修改。正式代码目录smp/a55_linux/source/mpp/cbb/isp/user/sensor/hi3519dv500/sony_imx385/ smp/a55_linux/source/mpp/sample/common/ smp/a55_linux/source/mpp/sample/vio/1. Sensor 模式定义文件imx385_cmos.h1.1 VMAX 和行数上限修改前#defineIMX385_FULL_LINES_MAX0xFFFFF#defineIMX385_VMAX_4K2K_LINEAR(3300IMX385_INCREASE_LINES)修改后#defineIMX385_FULL_LINES_MAX0x1FFFF#defineIMX385_VMAX_1080P30_LINEAR1125#defineIMX385_VMAX_1080P60_LINEAR1125#defineIMX385_VMAX_1080P120_LINEAR1125作用将行数上限调整为适合 IMX385 1080p 高帧率模式的范围。使用 1125 行作为 1080p 的标准 VMAX。30/60/120fps 的主要差异由 HMAX、FRSEL、ADBIT 和 MIPI 时序决定。1.2 工作模式枚举修改后typedefenum{IMX385_SENSOR_2M_30FPS_LINEAR_MODE0,IMX385_SENSOR_2M_60FPS_LINEAR_MODE,IMX385_SENSOR_2M_120FPS_LINEAR_MODE,IMX385_MODE_BUTT}imx385_res_mode;作用为 ISP、AE、VI 和 sensor 初始化代码提供三个独立的模式编号。同时新增imx385_mirror_flip()接口用于向 ISP 注册镜像/翻转控制。2. Sensor AE 和曝光控制文件imx385_cmos.c2.1 视频模式表修改后模式表从单一 30fps 配置扩展为 30/60/120fps 三组配置constimx385_video_mode_tbl g_imx385_mode_tbl[IMX385_MODE_BUTT]{{IMX385_VMAX_1080P30_LINEAR,...,30,0.26,1920,1080,...},{IMX385_VMAX_1080P60_LINEAR,...,60,0.52,1920,1080,...},{IMX385_VMAX_1080P120_LINEAR,...,120,1.03,1920,1080,...},};作用使 ISP 根据img_mode获取正确的最大帧率、曝光比例和图像尺寸。2.2 HMAX 寄存器地址修改前#defineIMX385_HMAX_ADDR_L0x301C#defineIMX385_HMAX_ADDR_H0x301D修改后#defineIMX385_HMAX_ADDR_L0x301B#defineIMX385_HMAX_ADDR_H0x301C作用修正 HMAX 寄存器地址使 AE 调整帧率时写入正确位置。2.3 AE 按当前模式计算修改前ae_sns_dft-hmax_times1000000000/(sns_state-fl_std*30);修改后td_float max_fpsg_imx385_mode_tbl[sns_state-img_mode].max_fps;ae_sns_dft-hmax_times1000000000/(sns_state-fl_std*max_fps);lines_per500ms、慢速帧率计算和最大曝光时间也从固定 30fps 改为使用当前 mode 的max_fps。作用避免 60fps/120fps 下仍按 30fps 计算曝光周期。2.4 曝光寄存器计算修改前valuesns_state-fl[0]-int_time;valuemin(max(value,8),sns_state-fl[0]-4);修改后int_timemin(int_time,sns_state-fl[0]-3);valuesns_state-fl[0]-int_time-1;valuemin(max(value,2),sns_state-fl[0]-2);作用按照 IMX385 的 SHS1 约束计算曝光值保证高帧率下曝光不会越过帧周期边界。2.5 ISP RAW 参数增益表修正如下。修改前30220,31282,32381,41519,34697,修改后30220,31282,32381,33519,34697,DNG RAW 配置模式RAW 位宽White level30fps / 60fps12 bit4095120fps10 bit1023作用让 120fps 模式按 RAW10 处理避免 RAW10 被错误识别为 RAW12。3. Sensor 初始化和 MIPI 时序文件imx385_sensor_ctl.c原代码使用了0x200、0x205、0x218等短地址。修改后统一使用 IMX385 完整寄存器地址。修改前imx385_write_register(vi_pipe,0x200,0x01);imx385_write_register(vi_pipe,0x205,0x01);imx385_write_register(vi_pipe,0x218,...);修改后imx385_write_register(vi_pipe,0x3000,0x01);/* STANDBY */imx385_write_register(vi_pipe,0x3005,timing-adbit);imx385_write_register(vi_pipe,0x3018,0x65);/* VMAX */imx385_write_register(vi_pipe,0x301B,timing-hmax_l);imx385_write_register(vi_pipe,0x301C,timing-hmax_h);作用避免不同寄存器地址空间混用。新增imx385_linear_timing结构统一保存每个 mode 的帧率、位宽、HMAX、FRSEL、CSI 数据类型和 MIPI PHY 参数。模式数据格式ADBITFRSELHMAXCSI 数据类型黑电平30fpsRAW120x010x020x11300x0C0xF060fpsRAW120x010x010x08980x0C0xF0120fpsRAW100x000x000x044C0x0A0x3C初始化函数根据img_mode选择三组时序if(img_modeIMX385_SENSOR_2M_120FPS_LINEAR_MODE)timingg_imx385_1080p120_timing;elseif(img_modeIMX385_SENSOR_2M_60FPS_LINEAR_MODE)timingg_imx385_1080p60_timing;elsetimingg_imx385_1080p30_timing;另外镜像/翻转使用寄存器0x3007。黑电平使用0x300A/0x300B。Standby、Master Start、XVS/XHS 使用0x3000、0x3002、0x3049。120fps 模式关闭 VI 侧 TNR以降低高帧率处理压力。4. Sample sensor 类型和 ISP 属性文件sample/common/sample_comm.h修改后新增两种 sensor 类型SONY_IMX385_MIPI_2M_30FPS_12BIT,SONY_IMX385_MIPI_2M_60FPS_12BIT,SONY_IMX385_MIPI_2M_120FPS_10BIT,作用允许 sample 通过SENSOR0_TYPE选择三种 IMX385 模式。文件sample/common/sample_comm_isp.c新增三组 ISP 公共属性模式ISP frame_rateBayer30fps30RGGB60fps60RGGB120fps120RGGB三种类型都返回同一个 IMX385 sensor objectg_sns_imx385_obj作用将 sample 的帧率传递给 ISP并让三种模式共用 IMX385 sensor object。5. VI RAW10/RAW12 配置文件sample/common/sample_comm_vi.c新增 120fps MIPI 配置staticcombo_dev_attr_tg_mipi_4lane_chn0_sensor_imx385_10bit_2m_120fps_attr{.devno0,.input_modeINPUT_MODE_MIPI,.data_rateMIPI_DATA_RATE_X1,.img_rect{0,0,1920,1080},.mipi_attr{DATA_TYPE_RAW_10BIT,OT_MIPI_WDR_MODE_NONE,{0,1,2,3,-1,-1,-1,-1}}};模式映射模式MIPI 数据类型30fps / 60fpsDATA_TYPE_RAW_12BIT120fpsDATA_TYPE_RAW_10BIT三种模式统一使用图像尺寸1920x1080。MIPI 4 lane0, 1, 2, 3。OT_WDR_MODE_NONE。单 pipe。120fps 的 VI pipe 使用pipe_attr.pixel_formatOT_PIXEL_FORMAT_RGB_BAYER_10BPP;作用保证 sensor、MIPI 接收端和 VI pipe 的 RAW10 格式一致。120fps 还使用相应的 component mask并关闭 VI 侧 3DNR/TNR。原有 IMX385 dev2、lane 4-7 配置被保留。6. VB 和 VENC 帧率配置文件sample/common/sample_comm.h修改后在通道参数结构体中增加bit_rate字段typedefstruct{td_u32 frame_rate;td_u32 bit_rate;td_u32 stats_time;...}sample_comm_venc_chn_param;作用允许不同帧率使用独立的 H.265 CBR 码率。文件sample/common/sample_comm_venc.c修改后允许 sample 传入码率并覆盖默认值sample_comm_venc_h265_cbr_param_init(...);if(chn_param-bit_rate!0){chn_attr-rc_attr.h265_cbr.bit_ratechn_param-bit_rate;}作用使用 sample 传入的高帧率码率覆盖默认值。文件sample/vio/sample_vio.c新增高帧率码率宏#defineH265_1080P60_BIT_RATE8192#defineH265_1080P120_BIT_RATE16384根据 ISP 公共属性动态获取 sensor 帧率g_venc_chn_param.frame_ratesample_vio_get_sensor_frame_rate();if(frame_rate120){bit_rateH265_1080P120_BIT_RATE;gop120;}elseif(frame_rate60){bit_rateH265_1080P60_BIT_RATE;}else{bit_rate0;}作用不再固定按 30fps 启动 VENC。120fps 使用 120 帧 GOP约为 1 秒一个 GOP。60/120fps 使用更高的 H.265 CBR 码率。DIS 输入帧率同步使用当前 sensor 帧率。VB 默认数量调整如下。修改前.blk_num{4,6}修改后.blk_num{6,8}改为更适合高帧率处理的数量120fps 下动态保证 raw/yuv VB 数量至少为 8/12。7. 模式选择默认配置仍然是 30fps。这里的SENSOR0_TYPE是 sample 应用的编译期宏具体来自smp/a55_linux/source/mpp/sample/Makefile.paramsample/vio/Makefile会 include 这个文件。它不是下面这两个位置的开关smp/a55_linux/source/mpp/cbb/isp/user/sensor/hi3519dv500/sony_imx385/Makefile 传感器驱动侧 Makefile.param可在smp/a55_linux/source/mpp/sample/Makefile.param中设置SENSOR0_TYPESONY_IMX385_MIPI_2M_30FPS_12BIT SENSOR0_TYPESONY_IMX385_MIPI_2M_60FPS_12BIT SENSOR0_TYPESONY_IMX385_MIPI_2M_120FPS_10BIT也可以在编译 sample/vio 时用 make 命令覆盖例如makeSENSOR0_TYPESONY_IMX385_MIPI_2M_120FPS_10BIT120fps 必须同时满足sensor 选择SONY_IMX385_MIPI_2M_120FPS_10BIT。VI 使用 RAW10 MIPI 数据类型。ISP/VI pipe 使用RGB_BAYER_10BPP。sensor 初始化使用 120fps MIPI 时序。