在嵌入式開發(fā)中,RK3588憑借強(qiáng)勁的算力常被用于邊緣計(jì)算、工業(yè)視覺等場景,而USB攝像頭作為常見外設(shè),調(diào)試過程中難免遇到各類“卡殼”問題。最近我們在RK3588上調(diào)試USB攝像頭時(shí),先后遇到分辨率不兼容、預(yù)覽靜置崩潰等問題,最終通過針對性排查逐一解決。今天就把完整調(diào)試流程分享出來,幫大家少走彎路。
一、第一步:確認(rèn)攝像頭節(jié)點(diǎn)與支持格式
調(diào)試的前提是“摸清”攝像頭的基礎(chǔ)信息——比如它在系統(tǒng)中對應(yīng)的設(shè)備節(jié)點(diǎn)(videoX),以及實(shí)際支持的分辨率、格式。
1.定位USB攝像頭節(jié)點(diǎn)
通過sysfs文件系統(tǒng)可快速找到攝像頭對應(yīng)的節(jié)點(diǎn),執(zhí)行以下命令:
grep''/sys/class/video4linux/video*/name
命令會(huì)輸出所有視頻設(shè)備的名稱,比如:
/sys/class/video4linux/video0/name: USB Camera: USB Camera/sys/class/video4linux/video1/name: rkisp-statistics
其中標(biāo)注“USB Camera”的video0就是我們要調(diào)試的USB攝像頭節(jié)點(diǎn)(實(shí)際節(jié)點(diǎn)可能是video1、video2等,以實(shí)際輸出為準(zhǔn))。
2.查看攝像頭支持的格式與分辨率
確定節(jié)點(diǎn)后,用v4l2-ctl工具查看攝像頭的詳細(xì)能力(需提前安裝v4l-utils):
v4l2-ctl -d /dev/video0 --list-formats-ext
該命令會(huì)列出攝像頭支持的像素格式(如YUYV、MJPEG)、分辨率、幀率等關(guān)鍵信息。我們此次調(diào)試的攝像頭,從輸出中明確看到最大支持3840×2160分辨率,這為后續(xù)排查問題埋下關(guān)鍵線索。
二、核心問題1:分辨率不兼容導(dǎo)致報(bào)錯(cuò)
當(dāng)我們打開相機(jī)錄像預(yù)覽時(shí),系統(tǒng)直接拋出錯(cuò)誤:
ECameraSource: Video dimension (4096x3072) is unsupported
明明攝像頭最大只支持3840×2160,為何系統(tǒng)會(huì)調(diào)用4096×3072的分辨率?問題出在媒體配置文件上。
1.定位媒體配置文件來源
一開始我們嘗試直接拉取設(shè)備上的配置文件查看:
adb pull /vendor/etc/media_profiles_V1_0.xml
但對比代碼中的device/google/bonito/media_profiles_V1_0.xml和device/google/crosshatch/media_profiles_V1_0.xml時(shí),發(fā)現(xiàn)差異極大——這兩個(gè)文件并非RK3588實(shí)際使用的配置。
經(jīng)過排查發(fā)現(xiàn):RK3588編譯時(shí)會(huì)將
/device/rockchip/media_profiles_defaults.xml
拷貝到/vendor/etc/media_profiles_V1_0.xml,也就是說,真正生效的配置文件是media_profiles_defaults.xml
2.修改分辨率配置
打開/device/rockchip/media_profiles_defaults.xml,找到對應(yīng)錄像配置的VideoProfile節(jié)點(diǎn),發(fā)現(xiàn)其中錯(cuò)誤配置了分辨率:
<VideoProfilename="4K"codec="h264"width="4096"height="3072"bitRate="100000000"frameRate="30"/>
將分辨率修改為攝像頭實(shí)際支持的3840×2160:
<VideoProfilename="4K"codec="h264"width="3840"height="2160"bitRate="100000000"frameRate="30"/>
修改后重新編譯固件并燒錄,分辨率不兼容的報(bào)錯(cuò)消失。
三、核心問題2:預(yù)覽靜置幾分鐘必現(xiàn)崩潰
解決分辨率問題后,新的異常出現(xiàn):打開相機(jī)錄像預(yù)覽頁面靜置2-5分鐘,必然會(huì)出現(xiàn)崩潰——我們連續(xù)測試5次,100%復(fù)現(xiàn)。
1.定位問題根源:媒體處理庫缺失
排查發(fā)現(xiàn),RK3588處理媒體編解碼依賴libmpp.so庫(Rockchip多媒體處理庫),當(dāng)前系統(tǒng)中該庫版本存在穩(wěn)定性問題,導(dǎo)致長時(shí)間預(yù)覽時(shí)資源泄漏或編解碼異常。
2.更新媒體庫并驗(yàn)證
將附件中的最新libmpp.so庫推送到設(shè)備指定路徑,覆蓋舊庫:
adb push libmpp.so /vendor/lib/adb reboot # 重啟設(shè)備使庫生效
重啟后再次測試:打開預(yù)覽頁面靜置10分鐘以上,未出現(xiàn)任何崩潰——靜置異常問題徹底解決。
四、最終驗(yàn)證與SDK同步
問題解決后,需確保后續(xù)開發(fā)中不再出現(xiàn)類似問題,因此要將更新同步到SDK:
將驗(yàn)證通過的libmpp.so庫更新到SDK的以下路徑:
vendor/rockchip/common/vpu/lib/libmpp/arm/mpp_dev
同步后重新編譯整個(gè)項(xiàng)目,多次測試確認(rèn):
1.攝像頭預(yù)覽長時(shí)間靜置無崩潰;
2.錄像分辨率正常(3840×2160),無報(bào)錯(cuò);
3.重啟設(shè)備后配置與庫均生效。
五、調(diào)試總結(jié)與避坑要點(diǎn)
1.節(jié)點(diǎn)確認(rèn)是基礎(chǔ):遇到攝像頭識別問題,先通過sys/class/video4linux路徑確認(rèn)節(jié)點(diǎn),避免操作錯(cuò)誤設(shè)備;
2.配置文件別找錯(cuò):RK3588平臺優(yōu)先看/device/rockchip/media_profiles_defaults.xml,而非Google設(shè)備的配置文件;
3.庫版本要匹配:媒體相關(guān)問題(如預(yù)覽崩潰、編解碼失敗),優(yōu)先檢查libmpp.so等核心庫的版本,確保與硬件適配;
4.驗(yàn)證要“極端”:類似靜置崩潰的問題,需多次長時(shí)間測試,避免偶發(fā)問題遺漏。
如果你的RK3588 USB攝像頭調(diào)試也遇到類似問題,不妨按照上述步驟排查。若有其他調(diào)試疑問,歡迎在評論區(qū)交流~
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20442瀏覽量
333962 -
usb
+關(guān)注
關(guān)注
60文章
8438瀏覽量
284434 -
攝像頭
+關(guān)注
關(guān)注
61文章
5091瀏覽量
103108 -
RK3588
+關(guān)注
關(guān)注
8文章
556瀏覽量
7318
發(fā)布評論請先 登錄
RK3588編解碼盒子之RTL8211FS-CG光口調(diào)試
RK3588資料
介紹一種基于RK3588平臺的便攜式8K錄播一體機(jī)解決方案
基于RK3588芯片打造360度8K全景攝像機(jī)的產(chǎn)品解決方案
RK3588芯片支持8K視頻的硬編解碼
求一種基于RK3588平臺的高端游戲掌機(jī)產(chǎn)品解決方案
ArmSoM RK3588/RK3576核心板,Rockchip攝像頭使用
快速上手RK3588:攝像頭調(diào)試
RK3326平臺GC2385攝像頭調(diào)試實(shí)戰(zhàn):從報(bào)錯(cuò)到功能正常的完整排查指南
RK3588攝像頭配置:搞懂CPhy與DPhy的區(qū)別,再也不踩坑!
RK?平臺?USB?攝像頭成像調(diào)試指南:從信號到畫質(zhì)的全流程優(yōu)化
RK3588平臺USB攝像頭調(diào)試實(shí)戰(zhàn):從報(bào)錯(cuò)到穩(wěn)定運(yùn)行
評論