OV50C40图像传感器在RK3588平台的RAW格式修复:实现8192x6144分辨率的精准配置

2026-02-28 20:15:31
关注

OV50C40图像传感器在RK3588平台的RAW格式修复:实现8192x6144分辨率的精准配置

在RK3588平台集成OV50C40高分辨率图像传感器的过程中,开发团队发现该传感器在RAW图像格式的输出上存在异常配置问题。具体表现为输出分辨率被错误设置为4096x3072,而非其原始支持的8192x6144。这不仅影响了图像采集的清晰度,还引发了相机启动和拍摄功能的不稳定性。

为全面解决此问题,开发团队从驱动层、ISP算法配置层以及Camera HAL层进行了系统性参数修正,确保三者之间分辨率配置的一致性。修复后,相机功能恢复正常,各项性能指标均达到设计预期。

本文将围绕OV50C40传感器在RK3588平台的修复过程进行深入解析,重点介绍核心修复逻辑及关键代码调整,为类似高分辨率图像传感器的集成与适配提供实践参考。

修复目标与核心思路

此次修复的核心目标是还原OV50C40传感器8192x6144的原生分辨率,并确保与之相关的多个功能模块——如图像翻转、镜头阴影校正(LSC)、自动对焦(AF)和相位检测(PD)等——能够与该分辨率兼容。

修复工作的主要原则是实现全链路参数的一致性,具体包括:

  1. RAW图像输出分辨率恢复为8192x6144;
  2. 确保相机应用能够正常启动并完成拍照操作;
  3. 图像处理相关功能(如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 333333334096x30724096x3072
  • 修复后配置:
  •   33333333 33333333  333333338128x6144 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平台驱动开发的技术内容,欢迎继续交流探讨。

审核编辑:黄宇

您觉得本篇内容如何
评分

评论

您需要登录才可以回复|注册

提交评论

广告
提取码
复制提取码
点击跳转至百度网盘