在RK3588平臺適配OV50C40高分辨率圖像傳感器的過程中,我們發現傳感器RAW格式輸出分辨率出現異常,被錯誤配置為4096x3072,而非硬件原生的8192x6144,直接導致相機拍照分辨率未達硬件規格,還伴隨部分配置不匹配引發的相機啟動、拍照異常問題。本次通過驅動層、ISP算法配置層、Camera HAL層的全鏈路參數修正,徹底解決了該RAW格式分辨率錯誤問題,修復后相機可正常打開,拍照功能完全達標,各項關聯功能也適配正常。
本文將詳細拆解本次OV50C40傳感器的修復思路與核心代碼修改點,為高分辨率圖像傳感器在RK3588平臺的適配提供可落地的參考。

核心修復思路
本次修復圍繞還原OV50C40傳感器8192x6144原生RAW分辨率展開,核心原則是全鏈路參數統一匹配原生分辨率,同時修正因分辨率不匹配引發的傳感器翻轉、鏡頭陰影校正(LSC)、自動對焦(AF)、相位檢測(PD)等關聯配置異常,最終實現:
1.RAW格式輸出分辨率恢復為8192x6144;
2.相機正常打開、拍照功能無異常;
3.傳感器對焦、LSC、PD等輔助功能適配正常。
修復涉及三個核心層級的代碼修改,實現從硬件驅動到算法配置、上層HAL的全鏈路參數對齊。
關鍵代碼修改細節(含修復前后對比)
本次修復的代碼文件集中在RK3588平臺的相機適配相關目錄,涵蓋ISP配置、Camera HAL配置、Kernel傳感器驅動三大模塊,以下為各模塊的核心修改點及代碼對比。
一、ISP算法配置層:修正傳感器與算法核心參數
文件路徑:
external/camera_engine_rkaiq/iqfiles/isp3x/ov50c40_HZGA06_ZE0082C1.json
作為ISP算法的核心配置文件,此處需同步分辨率參數,并修正所有關聯的算法配置,確保與原生分辨率匹配。
1.傳感器基礎分辨率+翻轉配置(核心)
修復前代碼:
"sensor": { "width":8192,"height":6144,"CISFlip":1,"CISMirror":0},
修復后代碼:
"sensor":{"width":8128,// 修正:硬件實際有效像素寬度(8192為標稱值,8128為有效輸出)"height":6144,"CISFlip":0, // 修正:關閉翻轉,解決畫面上下顛倒問題"CISMirror":0},
修改說明:
?寬度從8192調整為8128,匹配傳感器硬件實際輸出的有效像素;
?關閉CISFlip翻轉(1→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",// 修正:匹配有效像素分辨率"LSC_HSegSize":508, // 修正:8128/16=508,原512適配8192,分辨率不匹配會導致LSC失效"LSC_VSegSize":384,"LSC_D65":"LSC_OV50C40_D65_8128x6144.bin"http:// 修正:關聯對應分辨率的LSC參數表}
修改說明:
?所有光照條件(D65/A/CWF等)的LSC參數文件名同步改為8128x6144,確保算法加載正確的校正表;
?水平分段尺寸從512改為508,計算公式為「有效寬度/16」,解決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
HAL層作為應用與底層驅動的中間層,需同步更新分辨率相關的流配置和傳感器信息,確保上層應用識別正確的硬件規格。
核心:分辨率流配置修正
修復前代碼:
33333333 33333333 4096x3072 4096x3072
修復后代碼:
33333333 33333333 33333333 8128x6144 8192x6144 8128x6144
修改說明:
?新增8128x6144分辨率的BLOB/YCbCr流配置,讓上層應用支持原生高分辨率輸出;
?修正sensor-info中的有效陣列/像素陣列尺寸,解決上層識別分辨率與底層不匹配的問題。
三、Kernel驅動層:修正傳感器硬件驅動參數
文件路徑:kernel-5.10/drivers/media/i2c/ov50c40.c
驅動層是傳感器硬件的直接控制層,需修正分辨率模式、像素時鐘、總線格式等核心硬件參數,還原原生分辨率的硬件驅動邏輯。
1.分辨率模式+時序配置(核心)
修復前代碼:
// 錯誤的4096x3072高幀率模式(被錯誤設為默認)staticconststruct 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,// };// 默認模式賦值錯誤conststruct 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)staticconststruct ov50c40_mode ov50c40_mode_8192x6144_15fps = { .width=8128, // 修正:有效像素寬度 .height=6144, .hts=8256, // 修正:時序匹配8128寬度 .vts=6176, .mipi_freq_idx=2, // 高頻率索引,適配高分辨率帶寬 .pix_clk=1250000000,};// 默認模式改為原生分辨率conststruct ov50c40_mode *ov50c40_get_default_mode(void) {return&ov50c40_mode_8192x6144_15fps;}
2.像素時鐘+總線格式修正
修復前代碼:
// 像素時鐘計算錯誤#defineOV50C40_PIX_CLK_1250M (1250 * 1000 * 1000)// 總線格式錯誤(SGRBG10不符合傳感器規格)staticconststructov50c40_mbus_info mbus_info = { .code = MEDIA_BUS_FMT_SGRBG10_1X10, .pixeltype = V4L2_PIX_FMT_SGRBG10,};
修復后代碼:
// 修正像素時鐘宏定義(保持數值,補充注釋)#defineOV50C40_PIX_CLK_1250M (1250 * 1000 * 1000) // 適配8192x6144分辨率的像素時鐘// 修正總線格式為SRGGB10(匹配OV50C40色彩濾波陣列)staticconststructov50c40_mbus_infombus_info = { .code = MEDIA_BUS_FMT_SRGGB10_1X10, .pixeltype = V4L2_PIX_FMT_SRGGB10,};
修改說明:
?總線格式從SGRBG10改為SRGGB10,匹配OV50C40傳感器的原生色彩濾波陣列(R-G-G-B排列),解決畫面色彩失真問題;
?像素時鐘保持1250MHz,適配8192x6144高分辨率的帶寬需求。
修復后驗證效果
本次全鏈路參數修正完成后,對OV50C40傳感器在RK3588平臺的功能進行了全面實測,核心驗證結果如下:
1.基礎功能:相機可正常打開,拍照、預覽功能無異常,無閃退、卡死等問題;
2.分辨率達標:RAW格式輸出分辨率成功還原為傳感器原生的8192x6144(有效像素8128x6144),拍照分辨率符合硬件規格;
3.關聯功能正常:LSC鏡頭陰影校正、自動對焦、PD相位檢測等功能均正常工作,對焦觸發靈敏、畫面無陰影、相位檢測精準;
4.性能穩定:8128x6144高分辨率下,幀率輸出穩定,無丟幀、花屏、拖影等畫質問題。
總結
1.本次修復核心是全鏈路分辨率參數對齊:從驅動層的硬件分辨率模式,到ISP算法層的LSC/AF/PD配置,再到HAL層的流配置,全部同步為OV50C40原生的8192x6144(有效8128x6144);
2.代碼修改需兼顧“數值修正”和“關聯配置適配”:比如分辨率調整后,需同步修正LSC分段尺寸、AF觸發閾值、總線格式等,避免單一參數修改引發新異常;
3.修復前后的代碼對比清晰展示了核心問題點:分辨率模式賦值錯誤、有效像素未匹配、翻轉配置異常、總線格式不兼容是本次問題的核心誘因。
更多嵌入式相機傳感器適配、RK3588平臺硬件驅動開發的技術細節,歡迎一起交流探討~
審核編輯 黃宇
-
傳感器
+關注
關注
2576文章
55070瀏覽量
791547 -
RK3588
+關注
關注
8文章
556瀏覽量
7354
發布評論請先 登錄
避坑指南!RK3588 D/C-PHY硬件設計致命誤區,別讓Camera和LCD“打架”(android12)
一文打通Rockchip DP調試:從原理到實戰,覆蓋RK3399/RK3576/RK3588全平臺
RK3588平臺USB攝像頭調試實戰:從報錯到穩定運行
RK3588?平臺?MPP?編譯?+ VPU?格式測試
RK3588 Android12 外設相機能力升級:前置切換+高清錄制雙buff加持
迅為RK3588開發板Android系統修改屏幕分辨率和density
RK這2款旗艦芯片RK3588 PK RK3576,誰是最優選
如何使用Banana Pi BPI-M7,BPI-M5 Pro 瑞芯微RK3588,RK3576芯片攝像頭功能
RK3576 vs RK3588:為何越來越多的開發者轉向RK3576?
RK3588S和RK3588S2差異說明
CX3上的AR0245傳感器的探頭控制分辨率錯誤怎么解決?
RK3588主板:多元場景的硬核“芯”力量
rk3588 android12 OV50C40傳感器RAW格式異常修復:還原8192x6144原生分辨率
評論