OV50C40图像传感器在RK3588平台RAW格式分辨率异常修复
在RK3588平台集成OV50C40高分辨率图像传感器的过程中,技术团队发现其RAW格式输出分辨率被错误配置为4096x3072,而传感器本身支持的原生分辨率为8192x6144。该问题不仅影响了图像采集精度,还引发了相机启动异常及拍摄功能不稳定等连锁反应。通过系统性地调整驱动、ISP算法配置以及Camera HAL层参数,最终成功修复了分辨率配置错误问题,使传感器功能回归正常。
本文将深入解析此次修复过程中所涉及的核心技术策略及代码修改细节,为类似高分辨率图像传感器在RK3588平台上的适配工作提供实用参考。
修复总体思路
修复工作围绕还原OV50C40图像传感器的原生分辨率8192x6144展开,核心原则是确保从驱动层到算法层,再到上层HAL的全链路配置参数与该分辨率保持一致。同时,也对与分辨率不匹配相关的辅助功能如镜头阴影校正(LSC)、自动对焦(AF)和相位检测(PD)进行了优化。
修复目标包括:
- RAW格式输出分辨率恢复为8192x6144
- 相机正常启动并支持稳定拍照
- LSC、AF、PD等辅助功能适配无异常
修复工作覆盖了硬件驱动、ISP算法及HAL层的参数调整。
关键代码修改细节
修改内容主要集中在RK3588平台的相机适配相关模块,涵盖ISP配置、Camera HAL配置以及内核传感器驱动三大方面。
ISP算法配置层:调整传感器与算法相关参数
文件路径:external/camera_engine_rkaiq/iqfiles/isp3x/ov50c40_HZGA06_ZE0082C1.
作为ISP算法配置的核心文件,需对分辨率、图像翻转等关键参数进行调整,确保与传感器原生输出一致。
传感器分辨率与翻转配置
修改前代码:
"sensor": { "width":8192,"height":6144,"CISFlip":1,"CISMirror":0},修改后代码:
"sensor":{"width":8128, // 修正为传感器实际有效像素"height":6144,"CISFlip":0, // 关闭图像翻转,解决画面颠倒问题"CISMirror":0},修改要点包括将宽度从8192调整为8128,关闭图像翻转功能。
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","LSC_HSegSize":508, // 根据有效宽度重新计算水平分段大小"LSC_VSegSize":384,"LSC_D65":"LSC_OV50C40_D65_8128x6144.bin"}此次修改包括分辨率文件名的更新及水平分段尺寸的重新计算。
自动对焦(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}此次修改重点包括AF步长数组长度的补充与触发阈值的优化。
Camera HAL层:更新流配置与传感器信息
文件路径:hardware/rockchip/camera/etc/camera/camera3_profiles_rk3588.xml
HAL层作为连接上层应用与底层驱动的桥梁,其流配置和传感器信息必须与底层硬件一致。
修改前代码:
33333333 33333333 4096x3072 4096x3072
修改后代码:
33333333 33333333 33333333 8128x6144 8192x6144 8128x6144
修改内容包括新增8128x6144的流配置,并修正传感器信息字段。
Kernel驱动层:优化硬件驱动配置
文件路径:kernel-5.10/drivers/media/i2c/ov50c40.c
驱动层直接控制传感器硬件,修改内容涉及分辨率模式、像素时钟及总线格式。
分辨率模式与时序配置
修改前代码:
staticconststruct ov50c40_mode ov50c40_mode_4096x3072_30fps = { .width=4096, .height=3072, .hts=4224, .vts=3100, .mipi_freq_idx=1, .pix_clk=625000000,};修改后代码:
staticconststruct ov50c40_mode ov50c40_mode_8192x6144_15fps = { .width=8128, .height=6144, .hts=8256, .vts=6176, .mipi_freq_idx=2, .pix_clk=1250000000,};此次修改将默认模式更换为原生分辨率,并调整时序参数以适配高分辨率。
像素时钟与总线格式调整
修改前代码:
staticconststructov50c40_mbus_info mbus_info = { .code = MEDIA_BUS_FMT_SGRBG10_1X10, .pixeltype = V4L2_PIX_FMT_SGRBG10,};修改后代码:
staticconststructov50c40_mbus_info mbus_info = { .code = MEDIA_BUS_FMT_SRGGB10_1X10, .pixeltype = V4L2_PIX_FMT_SRGGB10,};修改后将总线格式设置为SRGGB10,以匹配传感器原生色彩滤波阵列。
修复效果验证
修复完成之后,对OV50C40图像传感器的功能表现进行了多维度验证,结果如下:
- 相机启动与拍照功能稳定无异常
- RAW格式输出成功恢复为8192x6144分辨率
- LSC、AF、PD等辅助功能适配良好
- 高分辨率模式下画面质量稳定,无花屏或拖影现象
总结
本次修复工作围绕全链路参数一致性展开,核心在于:
- 从驱动层、ISP配置层到HAL层,全面同步为8192x6144分辨率
- 在参数调整的同时,考虑各模块间的依赖关系
- 通过代码对比,明确错误原因,例如分辨率模式配置错误、像素宽度未匹配、图像翻转异常及总线格式不兼容等
更多关于嵌入式相机传感器适配及RK3588平台驱动开发的细节,欢迎交流探讨。
审核编辑:黄宇