OV50C40图像传感器在RK3588平台的RAW格式修复:实现8192x6144分辨率的精准配置
在RK3588平台集成OV50C40高分辨率图像传感器的过程中,开发团队发现该传感器在RAW图像格式的输出上存在异常配置问题。具体表现为输出分辨率被错误设置为4096x3072,而非其原始支持的8192x6144。这不仅影响了图像采集的清晰度,还引发了相机启动和拍摄功能的不稳定性。
为全面解决此问题,开发团队从驱动层、ISP算法配置层以及Camera HAL层进行了系统性参数修正,确保三者之间分辨率配置的一致性。修复后,相机功能恢复正常,各项性能指标均达到设计预期。
本文将围绕OV50C40传感器在RK3588平台的修复过程进行深入解析,重点介绍核心修复逻辑及关键代码调整,为类似高分辨率图像传感器的集成与适配提供实践参考。
修复目标与核心思路
此次修复的核心目标是还原OV50C40传感器8192x6144的原生分辨率,并确保与之相关的多个功能模块——如图像翻转、镜头阴影校正(LSC)、自动对焦(AF)和相位检测(PD)等——能够与该分辨率兼容。
修复工作的主要原则是实现全链路参数的一致性,具体包括:
- RAW图像输出分辨率恢复为8192x6144;
- 确保相机应用能够正常启动并完成拍照操作;
- 图像处理相关功能(如LSC、AF、PD)适配无误。
通过驱动、算法和HAL三层的同步调整,最终实现了从硬件层到软件层的整体功能适配。
关键修复点与代码修改
本次修复涉及的代码模块主要包括ISP配置、Camera HAL配置以及内核驱动三大类,以下为各模块的详细修改内容。
一、ISP算法配置层:调整传感器基础参数与算法配置
配置文件路径:external/camera_engine_rkaiq/iqfiles/isp3x/ov50c40_HZGA06_ZE0082C1.
1. 传感器基础分辨率与翻转设置
- 修复前配置:
"sensor": { "width":8192,"height":6144,"CISFlip":1,"CISMirror":0}, "sensor":{"width":8128,// 修正为有效像素宽度(8192为标称值)"height":6144,"CISFlip":0, // 关闭翻转以避免图像倒置"CISMirror":0}, - 宽度从8192调整为8128,以匹配传感器的有效输出像素;
- 将CISFlip设置为0,以修正图像翻转异常。
2. 镜头阴影校正(LSC)参数适配
- 修复前配置:
"LSC":{"LSC_Enable":1,"LSC_Resolution":"8192x6144","LSC_HSegSize":512,"LSC_VSegSize":384,"LSC_D65":"LSC_OV50C40_D65_8192x6144.bin"} "LSC":{"LSC_Enable":1,"LSC_Resolution":"8128x6144",// 修正为8128x6144以匹配有效像素分辨率"LSC_HSegSize":508, // 修正为8128/16=508,解决分段错位问题"LSC_VSegSize":384,"LSC_D65":"LSC_OV50C40_D65_8128x6144.bin"// 修正为匹配分辨率的参数表} - 所有光照条件下的LSC参数文件名同步更改为8128x6144,以确保加载正确校正表;
- 水平分段尺寸从512修改为508,以避免校正区域错位。
3. 自动对焦(AF)配置优化
- 修复前配置:
"AF":{"FullRangeTbl":[0,16,32,48,64],"FineSearchStep":2,"TrigThers":0.2,"BrightnessPauseEn":1,"PointLightThers":0.1} "AF":{"FullRangeTbl":[0,8,16,24,32,40,48,56,64],"FullRangeTbl_Len":9,// 新增长度字段以避免解析异常"FineSearchStep":null,// 移除无效参数,避免计算错误"TrigThers":0.075, // 降低阈值以提升对焦灵敏度"BrightnessPauseEn":0,// 禁用亮度暂停检测以减少对焦中断"PointLightThers":0.3 // 提高点光源检测阈值以减少误触发}二、Camera HAL层:更新流配置与传感器信息
配置文件路径:hardware/rockchip/camera/etc/camera/camera3_profiles_rk3588.xml
1. 分辨率流配置修正
- 修复前配置:
33333333 33333333 4096x3072 4096x3072
33333333 33333333 33333333 8128x6144 8192x6144 8128x6144
- 新增8128x6144分辨率的BLOB/YCbCr流配置,以支持高分辨率输出;
- 更新传感器信息字段,确保上层应用能够准确识别底层配置。
三、内核驱动层:修正硬件驱动参数
配置文件路径:kernel-5.10/drivers/media/i2c/ov50c40.c
1. 分辨率模式与时序配置
- 修复前配置:
// 错误的4096x3072高帧率模式(被错误设置为默认)static const struct ov50c40_mode ov50c40_mode_4096x3072_30fps = { .width=4096, .height=3072, .hts=4224, .vts=3100, .mipi_freq_idx=1, // 低频率索引 .pix_clk=625000000,};// 被注释的原生8192x6144模式// static const struct ov50c40_mode ov50c40_mode_8192x6144_15fps = {// .width = 8192,// .height = 6144,// .hts = 8320,// .vts = 6176,// .mipi_freq_idx = 2,// .pix_clk = 1250000000,// };// 默认模式赋值错误const struct ov50c40_mode *ov50c40_get_default_mode(void) {return &ov50c40_mode_4096x3072_30fps;} // 注释错误的4096x3072模式,还原原生8192x6144模式// static const struct ov50c40_mode ov50c40_mode_4096x3072_30fps = {// .width = 4096,// .height = 3072,// .hts = 4224,// .vts = 3100,// .mipi_freq_idx = 1,// .pix_clk = 625000000,// };// 还原并修正原生8192x6144模式(有效像素8128)static const struct ov50c40_mode ov50c40_mode_8192x6144_15fps = { .width=8128, // 修正为有效像素宽度 .height=6144, .hts=8256, // 修正为匹配8128宽度的时序 .vts=6176, .mipi_freq_idx=2, // 高频率索引以适配高分辨率带宽 .pix_clk=1250000000,};// 默认模式改为原生分辨率const struct ov50c40_mode *ov50c40_get_default_mode(void) {return &ov50c40_mode_8192x6144_15fps;} - 将默认分辨率设置为8128x6144,并调整水平时序以适配新分辨率;
- 通过修正MIPI频率索引和像素时钟,确保传感器能够在高分辨率下稳定运行。
2. 像素时钟与总线格式修正
- 修复前配置:
// 像素时钟计算错误#define OV50C40_PIX_CLK_1250M (1250 * 1000 * 1000)// 总线格式错误(SGRBG10不符合传感器规格)static const struct ov50c40_mbus_info mbus_info = { .code = MEDIA_BUS_FMT_SGRBG10_1X10, .pixeltype = V4L2_PIX_FMT_SGRBG10,}; // 修正像素时钟宏定义(保持数值,补充注释)#define OV50C40_PIX_CLK_1250M (1250 * 1000 * 1000) // 适配8192x6144分辨率的像素时钟// 修正总线格式为SRGGB10(匹配OV50C40色彩滤波阵列)static const struct ov50c40_mbus_info mbus_info = { .code = MEDIA_BUS_FMT_SRGGB10_1X10, .pixeltype = V4L2_PIX_FMT_SRGGB10,}; - 将总线格式从SGRBG10改为SRGGB10,以匹配OV50C40的原生色彩排列方式;
- 像素时钟保持1250MHz,以满足高分辨率图像采集所需的带宽。
修复验证结果
修复完成后,对OV50C40在RK3588平台的功能进行了全面测试,结果如下:
- 基础功能正常:相机可正常启动,拍照与预览功能无异常,无闪退或卡顿现象;
- 分辨率达标:RAW图像输出分辨率成功还原为8192x6144(有效像素8128x6144);
- 相关功能适配良好:LSC、AF、PD等功能均运行正常,图像质量稳定;
- 系统稳定性高:高分辨率下图像帧率稳定,无丢帧、花屏或拖影等问题。
总结
本次修复的核心在于实现全链路分辨率参数的一致性,从硬件驱动到ISP算法,再到上层HAL,所有层级均同步适配8192x6144分辨率。修复过程中需特别关注多个关联参数的同步调整,例如LSC分段大小、AF阈值、总线格式等,以避免因单一参数错误导致系统功能异常。
修复前后代码的对比清晰地揭示了问题根源:分辨率模式设置错误、有效像素不匹配、翻转异常以及总线格式不兼容是引发此次问题的主要原因。
如需了解更多关于嵌入式图像传感器适配、RK3588平台驱动开发的技术内容,欢迎继续交流探讨。
审核编辑:黄宇