一. 簡介
RK3588從入門到精通
開發板:ArmSoM-W3
Kernel:5.10.160
OS:Debian11
上篇文檔介紹了rockchip平臺怎么配置MIPI-CSI的通路,本?主要介紹在Rockchip平臺下Camera相關測試命令
二. 攝像頭連接
ArmSoM-W3開發板與imx415連接圖如下:
w3-camera-hardware注意
排線的金屬引腳朝向板子
三. 使用攝像頭
連接攝像頭模塊并上電后,可查看開機日志。
如果沒有報錯,那表明模塊在正常運行,在Linux系統中,你可以使用多種方法來訪問和利用該攝像頭設備。
3.1 使用命令行工具
media-ctl 和 v4l2-ctl 是在Linux環境下用于配置和管理視頻和多媒體設備的命令行工具。它們通常與V4L2(Video for Linux 2)子系統一起使用,用于管理攝像頭、視頻采集卡、顯示設備和其他多媒體硬件的設置和參數。
media-ctl工具的操作是通過/dev/medio0等media 設備,它管理的是Media的拓撲結構中各個節點的 format、大小、 鏈接。 v4l2-ctl工具則是針對/dev/video0,/dev/video1等 video設備,它在video設備上進行set_fmt、 reqbuf、qbuf、dqbuf、stream_on、stream_off 等一系列操作。
n為4的倍數(0,1,2,3…) /dev/videon+0:視頻輸出 SP主通道 /dev/videon+1:視頻輸出 MP自身通道 /dev/videon+2:3A統計 /dev/videon+3:3A參數設置
3.1.1 顯示拓撲結構
使用以下命令可以顯示拓撲結構:
media-ctl -p -d /dev/media0
主要關注的是有沒有找到Sensor的Entity。如果沒有找到Sensor的Entity,說明Sensor注冊有問題。
開發板上接上攝像頭后可以看到如下的輸出:
3.2.2 查看攝像頭信息
使用命令列出所有攝像頭設備:
其中/dev/video11就是這個攝像頭的設備。
查看設備的預覽支持格式:
查看設備的所有信息:
3.2.3 顯示圖像
使用v4l2-ctl抓一幀圖片:
參數說明:
-d: 攝像頭對應設備文件 --set-fmt-video:指定了寬高及pxielformat(用FourCC表示)。NV12即用FourCC表示的pixelformat --stream-mmap:指定buffer的類型為mmap,即由kernel分配的物理連續的或經過iommu映射的buffer --stream-to:指定幀數據保存的文件路徑 --stream-skip:指定丟棄(不保存到文件)前3幀 --stream-count:指定抓取的幀數,不包括--stream-skip丟棄的數量
抓取的圖片使用adb工具拷貝到Windows下用7YUV工具打開,也可以用ffplay命令打開
ffplay是FFmpeg提供的一個極為簡單的音視頻媒體播放器(由ffmpeg庫和SDL庫開發),可以用于音視頻播放、可視化分析 ,提供音視頻顯示和播放相關的圖像信息、音頻的波形等信息,也可以用作FFmpeg API的測試工具使用。
使用 ffplay 非常簡單,只需在終端中運行以下命令來播放媒體文件:
ffplay /data/4k_nv12.yuv -f rawvideo -pixel_format nv12 -video_size 3840x2160
3.2.3 顯示視頻
使用v4l2可以錄制視頻:
使用ffplay播放:
ffplay -f rawvideo -video_size 3840x2160 -pixel_format nv12 out.yuv
3.3 使用多媒體框架應用程序
GStreamer:GStreamer是一種多媒體框架,你可以使用它來構建自定義的多媒體應用程序,捕獲攝像頭視頻,進行處理和展示。
你可以使用以下GStreamer管道捕獲視頻:
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink
1. v4l2src:從 /dev/video11 捕獲視頻數據。
2. video/x-raw:指定輸出數據格式為原始視頻,format 參數設置為 NV12,width 設置為 3840,height 設置為 2160,framerate 設置為 30fps。
3. videoconvert:執行格式轉換,確保輸出數據適用于后續的元素。
4. autovideosink:自動選擇適當的視頻輸出插件,將視頻顯示在屏幕上。
顯示如下:
camera-screenshot注意:顯示器的分辨率是1920x1080,攝像頭的分辨率是3840x2160,導致如左上角畫面顯示不全,雙擊邊框可以得到分辨率是1920x1080的畫面。
下面有一個簡單的Python示例,用于創建一個GStreamer管道并啟動捕獲視頻可供參考:
3.4.自定義應用程序開發
特定的定制功能,一般是使用編程語言(如C++或Python)開發自己的攝像頭應用程序
總的來說,應用程序通過API接口采集視頻數據大致分為五個步驟:
首先,打開視頻設備文件,進行視頻采集的參數初始化,設置視頻圖像的采集窗口、采集的點陣大小和格式;
其次,申請若干視頻采集的幀緩沖區,并將這些幀緩沖區從內核空間映射到用戶空間,便于應用程序讀取/處理視頻數據;
第三,將申請到的幀緩沖區在視頻采集輸入隊列排隊,并啟動視頻采集;
第四,驅動開始視頻數據的采集,應用程序從視頻采集輸出隊列取出幀緩沖區,處理完后,將幀緩沖區重新放入視頻采集輸入隊列,循環往復采集連續的視頻數據;
第五,停止視頻采集。
四. 結語
根據需求,選擇最適合的方法來訪問和使用攝像頭設備,每個具體型號的攝像頭可能有其獨特的設置和要求,各個系統下的使用攝像頭的方法也有很多,如果你有疑問或者需要幫助,可以在ArmSom論壇提出問題,與其他開發者分享經驗和獲取支持。
-
攝像頭
+關注
關注
59文章
4836瀏覽量
95599 -
開發板
+關注
關注
25文章
5032瀏覽量
97375 -
RK3588
+關注
關注
6文章
325瀏覽量
4313
發布評論請先 登錄
相關推薦
評論