OV50C40图像传感器在RK3588平台的RAW格式异常修复方案

2026-02-27 18:15:43
关注

OV50C40图像传感器在RK3588平台的RAW格式异常修复方案

在RK3588平台与OV50C40图像传感器的集成过程中,曾发现该传感器输出的RAW格式图像分辨率出现偏差,系统将其识别为4096x3072,而非传感器实际支持的8192x6144。该问题不仅限制了图像采集的分辨率上限,还引发了一系列与图像处理链相关的异常表现,如相机启动失败、拍照功能失常等。

为解决这一问题,技术人员从驱动层、图像信号处理器(ISP)算法层以及Camera HAL层进行全链路的参数调整与修正,最终成功恢复了传感器的原生分辨率输出,并确保相关功能的稳定运行。

修复核心理念与目标

修复策略围绕“还原传感器原生分辨率”展开,重点在于确保从硬件驱动到图像处理算法、上层应用接口的每一环节均与8192x6144分辨率严格匹配。此外,还需处理由于分辨率不一致带来的连锁问题,包括图像翻转、镜头阴影校正(LSC)、自动对焦(AF)以及相位检测(PD)等功能异常。

修复目标包括:

  1. 恢复RAW格式的输出分辨率为8192x6144;
  2. 确保相机正常启动与拍照功能稳定;
  3. 保证LSC、AF、PD等图像辅助功能正常运行。

关键修复内容与代码调整

修复工作涉及多个核心模块的代码调整,覆盖了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, // 修正为传感器实际有效输出宽度 "height":6144, "CISFlip":0, // 关闭图像翻转以防止画面颠倒 "CISMirror":0},

修改说明:

  • 将图像宽度从8192调整为8128,以匹配传感器实际输出的有效像素。
  • 关闭CISFlip翻转设置,以防止因分辨率调整引发的图像方向错误。

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", // 与有效分辨率匹配 "LSC_HSegSize":508, // 修正为8128 / 16 = 508 "LSC_VSegSize":384, "LSC_D65":"LSC_OV50C40_D65_8128x6144.bin"}

修改说明:

  • 所有LSC参数文件名均改为8128x6144,确保算法加载对应的校正表。
  • 将水平分段尺寸从512调整为508,以适配有效输出分辨率,解决LSC校正区域错位问题。

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`

核心:流配置与传感器信息修正

修复前:

  33333333  33333333    4096x3072 4096x3072 

修复后:

  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 = 8128, // 使用有效像素宽度 .height = 6144, .hts = 8256, .vts = 6176, .mipi_freq_idx = 2, .pix_clk = 1250000000, };

2. 像素时钟与总线格式修正

修复前:

#define OV50C40_PIX_CLK_1250M (1250 * 1000 * 1000) 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) // 像素时钟适配高分辨率 static const struct ov50c40_mbus_info mbus_info = { .code = MEDIA_BUS_FMT_SRGGB10_1X10, .pixeltype = V4L2_PIX_FMT_SRGGB10, };

修改说明:

  • 总线格式由SGRBG10改为SRGGB10,以匹配OV50C40传感器的色彩滤波阵列(R-G-G-B排列),解决色彩失真问题。
  • 像素时钟设置为1250MHz,满足高分辨率图像传输的带宽需求。

修复验证结果

修复完成后,对系统进行了全面的功能验证,结果如下:

  • 基础功能:相机能够正常打开,拍照与预览无异常,系统运行稳定。
  • 分辨率达标:RAW图像输出成功恢复为8192x6144(有效像素8128x6144),满足硬件规格。
  • 辅助功能:LSC、AF、PD等功能运行正常,无对焦失败、图像失真等问题。
  • 性能表现:高分辨率下图像帧率稳定,无丢帧、画面拖影等问题。

总结

此次修复的核心在于实现全链路分辨率参数的对齐,包括驱动层的硬件模式、ISP算法层的图像处理参数以及HAL层的流配置。

  • 修复涉及多个层级的协调调整,如LSC分段尺寸、AF阈值、总线格式等。
  • 关键问题包括分辨率模式错误、有效像素未匹配、图像翻转异常、总线格式不兼容等。

更多有关嵌入式图像传感器适配与RK3588平台开发的技术细节,欢迎继续探讨。

审核编辑:黄宇

您觉得本篇内容如何
评分

评论

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

提交评论

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