Camera知識體系架構(gòu)之驅(qū)動
點擊上方「嵌入式云IOT技術(shù)圈」,選擇「置頂公眾號」第一時間查看嵌入式筆記!C
Camera知識體系龐大、又雜、又難,雖然資料也不少,但是都很亂,很容易讓人感到迷茫,失去學(xué)習(xí)的信心。對于初入這個體系的小白很難找到自己的學(xué)習(xí)的目標(biāo)和方法。眾所周知,學(xué)好Camera相關(guān)的知識,能夠在音視頻相關(guān)等行業(yè)拿到非常高的報酬:
根據(jù)最近自己調(diào)試瑞芯微RV1109平臺Camera的一些心得體會,我將它們一一總結(jié)出來分享給大家:
1、瑞芯微平臺Camera調(diào)試知識體系
1.1、調(diào)試RK
平臺攝像頭的一些關(guān)鍵縮寫語
縮寫 | 全稱 |
---|---|
3A =>(AWB, AE, AF) | 表示AWB, AE, AF的簡寫 |
AE =>(Auto Exposure) | 表示自動曝光 |
AF =>(Auto Focus) | 表示自動對焦 |
AWB =>(Auto White Balance) | 表示自動白平衡 |
FBC =>(Frame Buffer Compressed) | 表示幀緩沖壓縮 |
FBC0 =>f(Rockchip yuv420sp fbc encoder) | 表示RK平臺yuv420sp fbc 編碼 |
FBC2 =>(Rockchip yuv422sp fbc encoder) | 表示RK平臺yuv422sp fbc 編碼 |
RkAiq =>(Rockchip Automatical Image Quality) | 表示RK平臺自動圖像質(zhì)量 |
IQ =>(Image Quality) | 表示圖像質(zhì)量 |
ISP =>(Image Signal Process) | 表示圖像信號處理 |
ISPP =>(Image Signal Post Process) | 表示圖像信號后處理 |
1.2、瑞芯微平臺Camera調(diào)試知識體系劃分
以上分為:軟件控制流程、圖像算法、圖像效果,這是相對于Android平臺來劃分的(圖片來源于韋東山老師專家計劃的Camera相關(guān)章節(jié)的學(xué)習(xí)筆記)。對于驅(qū)動工程師,我們只需要關(guān)注以下兩個點:圖像算法:ISP算法(硬件)、3A算法(AE(曝光),AF(自動對焦),AWB(自動白平衡)、后處理算法(HDR、MFNR)圖像效果調(diào)試(Tunning):ISP調(diào)試、3A調(diào)試、后處理算法調(diào)試1.3、瑞芯微平臺中Camera的數(shù)據(jù)流通路
如上圖(圖片來源于瑞芯微原廠文檔)所示,這張圖反饋了以下信息:Camera數(shù)據(jù)經(jīng)過ISP20采集,ISP20再輸出經(jīng)過一系列圖像處理算法后的數(shù)據(jù),RkAiq不斷從ISP20獲取統(tǒng)計數(shù)據(jù),并經(jīng)過3A等算法生成新的參數(shù)反饋給ISP20,如上所示,以上的設(shè)備節(jié)點并不是固定的,它可能會改變,我們可以使用media-ctl查看對應(yīng)的節(jié)點。RKISP
驅(qū)動主要是依據(jù)v4l2 / media framework
實現(xiàn)硬件的配置、中斷處理、控制 buffer輪轉(zhuǎn),以及控制subdevice
(如mipi dphy
及sensor)的上下電等功能,它的處理過程其實是非常復(fù)雜的,我們來看下面這張圖(圖片來源于瑞芯微原廠文檔)就知道了:1.3.1、通過搜索/sys
目錄下查找對應(yīng)的節(jié)點名稱
grep?""?/sys/class/video4linux/*/name
來獲取相應(yīng)的節(jié)點,如下所示,這是通過grep "" /sys/class/video4linux/*/name
來獲取的節(jié)點信息:這里你可能會發(fā)現(xiàn),一個ISP
節(jié)點有多個video節(jié)點的對應(yīng)關(guān)系,其實它們是位于不同的media設(shè)備下的,因此在不同的media下所對應(yīng)的video節(jié)點也是不同的。其中,冒號前面的一部分表示video節(jié)點,冒號后面一部分就是ISP
節(jié)點:如上所示,video節(jié)點為:/sys/class/video4linux/v4l-subdev0/name
ISP
節(jié)點為:rkispp-subdev
1.3.2、通過media-ctl獲取拓?fù)湫畔?/span>
我們可以通過media-ctl
獲取拓?fù)湫畔?,然后找到相?yīng)的數(shù)據(jù)通路,分別輸入以下指令:media-ctl?-p?-d?/dev/media0
media-ctl?-p?-d?/dev/media1
media-ctl?-p?-d?/dev/media2
media-ctl?-p?-d?/dev/media3
然后我們就可以找到ISP20輸出的四路數(shù)據(jù)的信息了:也就是說,我們在應(yīng)用程序中只需要去操作:/dev/video30??或??rkispp_m_bypass
/dev/video31??或??rkispp_scale0
/dev/video32??或??rkispp_scale1
/dev/video33??或??rkispp_scale2
就可以對攝像頭進行驅(qū)動了,另外:rkispp_m_bypass這路數(shù)據(jù)流比較特殊,其不支持設(shè)置分辨率,其輸出分辨率由ISP輸入的分辨率決定,可以通過media-ctl查看拓?fù)浣Y(jié)構(gòu)確定ISP輸入的分辨率:如上所示,rkispp_m_bypass這路輸出的分辨率為1920x1080。其它三路數(shù)據(jù):rkispp_scale0、rkispp_scale1、rkispp_scale2節(jié)點支持縮放,每一路支持的最大分辨率如下所示:節(jié)點名稱 | 視頻設(shè)備ID | 最大支持寬度 | 支持輸出格式 |
---|---|---|---|
rkispp_m_bypass | /dev/video30 | 不支持設(shè)置分辨率,不支持縮放 | NV12/NV16/YUYV/FBC0/FBC2/ |
rkispp_scale0 | /dev/video31 | max width: 3264,最大支持8倍縮放 | NV12/NV16/YUYV |
rkispp_scale1 | /dev/video32 | max width: 1280,最大支持8倍縮放 | NV12/NV16/YUYV |
rkispp_scale2 | /dev/video33 | max width: 1280,最大支持8倍縮放 | NV12/NV16/YUYV |
1.3.3、圖像優(yōu)化調(diào)試3A算法
當(dāng)Sensor輸出RAW BAYER RGB格式時,如RGGB,BGGR,GBRG,GRBG等,需要ISP20提供一系列圖像處理算法來優(yōu)化圖像效果,此時需要RkAiq模塊介入。SDK提供了一種3A獨立進程的方式(ispserver)集成了RkAiq庫librkaiq.so,當(dāng)我們使用RK提供的RKMEDIA進行編程獲取據(jù)流時,能夠得到具有ISP調(diào)試效果的圖像。2、RKISP
調(diào)試
21、查看攝像頭sensor驅(qū)動的適配情況
我選用的是gc2053
這款攝像頭,并且在Linux設(shè)備樹中已經(jīng)做了相應(yīng)的支持,故我們可以通過獲取內(nèi)核啟動信息來查看攝像頭驅(qū)動的加載情況,獲取方法:dmesg?|?grep?"gc2053"
我們可以看到如下信息:其中,如果能在內(nèi)核信息中看到以上兩行信息:[????0.831096]?gc2053?1-0037:?Detected?GC2053?sensor
[????0.831201]?rockchip-mipi-dphy-rx?ff4b0000.csi-dphy:?match?m00_f_gc2053?1-0037:bus?type?4
即表示攝像頭已經(jīng)適配成功了!2.2、獲取驅(qū)動版本號
搜索相應(yīng)的字段:dmesg?|?grep?"rkisp?driver?version"
dmesg?|?grep?"rkispp?driver?version"
如下:或者通過以下命令獲?。?/p>cat?/sys/module/video_rkisp/parameters/version
cat?/sys/module/video_rkispp/parameters/version
如下:2.3、如何判斷RKISP
驅(qū)動加載狀態(tài)
RKISP
驅(qū)動如果加載成功,會有video及media設(shè)備存在于/dev/
目錄下。系統(tǒng)中可能存在多個/dev/video
設(shè)備,通過/sys可以查詢到RKISP
注冊的video節(jié)點:grep?''?/sys/class/video4linux/video*/name
查詢信息如下:當(dāng)然也可以通過media-ctl
命令來打印拓?fù)浣Y(jié)構(gòu)查看pipeline的狀態(tài)是否正常,如果RKISP驅(qū)動加載成功,則在內(nèi)核中能看到如下打?。?/p>dmesg?|?grep?Async
如果沒有的話,則需要返回到1.1步驟去檢查攝像頭sensor驅(qū)動是否有報錯,檢測I2C通訊是否正常。往期精彩
超輕量級網(wǎng)紅軟件定時器multi_timer(51 stm32雙平臺實戰(zhàn))使您的軟件運行起來: 防止緩沖區(qū)溢出(C語言精華帖)RT-Thread UART設(shè)備驅(qū)動框架初體驗(中斷方式接收帶\r\n的數(shù)據(jù))
數(shù)顯儀表盤顯示“速度、方向、計數(shù)器”的跑馬燈
MCU串口命令解析器的實現(xiàn)TKM32F499評估板串口通信學(xué)習(xí)與實踐筆記
覺得本次分享的文章對您有幫助,隨手點
[在看]
并轉(zhuǎn)發(fā)分享,也是對我的支持。