下面具體說明開發流程(網上找的)
//用非阻塞模式開啟攝像頭裝置
intcamerafd;
camerafd= open(「/dev/video0″, o_rdwr| o_nonblock, 0);
//如果用阻塞模式開啟攝像頭裝置,上述**變為:
camerafd = open(」/dev/video0″, o_rdwr, 0);
關於阻塞模式和非阻塞模式
即使尚未捕獲到資訊,驅動依舊會把快取(dqbuff)裡的東西返回給應用程式。
設定屬性及採集方式
在linux程式設計中,一般使用ioctl函式來對裝置的i/o通道進行管理:
extern intioctl(int__fd, unsigned long int__request, …) __throw;
__request: 具體的命令標誌符。
常用的結構體(參見/usr/include/linux/videodev2.h):
struct v4l2_requestbuffers reqbufs; //向驅動申請幀緩衝的請求,裡面包含申請的個數
struct v4l2_format fmt; //幀的格式,比如寬度,高度等
struct v4l2_buffer buf; //代表驅動中的一幀
struct v4l2_queryctrl query; //查詢的控制
struct v4l2_control control; //具體控制的值
在進行v4l2開發中,一般會用到以下的命令標誌符:
1 vidioc_reqbufs: 分配記憶體
3 vidioc_querycap: 查詢驅動功能
5 vidioc_s_fmt: 設定當前驅動的頻捕獲格式
6 vidioc_g_fmt: 讀取當前驅動的頻捕獲格式
7 vidioc_try_fmt: 驗證當前驅動的顯示格式
8 vidioc_cropcap: 查詢驅動的修剪能力
11 vidioc_qbuf: 把資料從快取中讀取出來
12 vidioc_dqbuf: 把資料放回快取佇列
這些io呼叫,有些是必須的,有些是可選擇的。
uvc和v4l2簡介uvc和v4l2簡介
對這塊不是特別理解,看了幾篇部落格,還是一知半解,先記錄下,以後有機會深入後,再來更新 首先介紹兩個概念 uvc 最新的uvc版本為uvc 1.5,由usb if usb implementers forum 定義包括基本協議及負載格式 1 2 這是wikipedia的解釋。v4l2 從兩個的介紹也...
V4L2程式設計
include include include include include include include include include include typedef struct buftype buftype user buf int n buffer 0 開啟攝像頭裝置 int ope...
V4L2 程式設計
v4l2程式設計 1.定義 2.工作流程 開啟裝置 檢查和設定裝置屬性 設定幀格式 設定一種輸入輸出方法 緩衝區管理 迴圈獲取資料 關閉裝置。3.裝置的開啟和關閉 include int open const char device name,int flags include int close ...