1、常用的結構體在核心目錄include/linux/videodev2.h中定義
2、常用的ioctl介面命令也在include/linux/videodev2.h中定義
3、操作流程
v4l2提供了很多訪問介面,你可以根據具體需要選擇操作方法。需要注意的是,很少有驅動完全實現了所有的介面功能。所以在使用時需要參考驅動原始碼,或仔細閱讀驅動提供者的使用說明。
下面列舉出一種操作的流程,供參考。
(1)開啟裝置檔案
int fd = open(devicename,mode);
devicename:/dev/video0、/dev/video1 ……
mode:o_rdwr [| o_nonblock]
(2)取得裝置的capability
struct v4l2_capability capability;
int ret = ioctl(fd, vidioc_querycap, &capability);
struct v4l2_input input;
……初始化input
int ret = ioctl(fd, vidioc_querycap, &input);
v4l2_std_id std;
do while (ret == -1 && errno == eagain);
switch (std)
struct v4l2_format fmt;
fmt.type = v4l2_buf_type_video_output;
fmt.fmt.pix.pixelformat = v4l2_pix_fmt_uyvy;
fmt.fmt.pix.height = height;
fmt.fmt.pix.width = width;
fmt.fmt.pix.field = v4l2_field_interlaced;
ret = ioctl(fd, vidioc_s_fmt, &fmt);
if(ret)
(6)向驅動申請幀快取
struct v4l2_requestbuffers req;
if (ioctl(fd, vidioc_reqbufs, &req) == -1)
(7)獲取每個快取的資訊,並mmap到使用者空間
typedef struct videobuffer videobuffer;
videobuffer* buffers = calloc( req.count, sizeof(*buffers) );
struct v4l2_buffer buf;
for (numbufs = 0; numbufs < req.count; numbufs++)
buffers[numbufs].length = buf.length;
// 轉換成相對位址
buffers[numbufs].start = mmap(null, buf.length,
prot_read | prot_write,
map_shared,
fd, buf.m.offset);
if (buffers[numbufs].start == map_failed)
int buf_type= v4l2_buf_type_video_capture;
int ret = ioctl(fd, vidioc_streamon, &buf_type);
(9)取出fifo快取中已經取樣的幀快取
struct v4l2_buffer buf;
memset(&buf,0,sizeof(buf));
buf.type=v4l2_buf_type_video_capture;
buf.memory=v4l2_memory_mmap;
buf.index=0;//此值由下面的ioctl返回
if (ioctl(fd, vidioc_dqbuf, &buf) == -1)
(10)將剛剛處理完的緩衝重新入佇列尾,這樣可以迴圈採集
if (ioctl(fd, vidioc_qbuf, &buf) == -1)
int ret = ioctl(fd, vidioc_streamoff, &buf_type);
close(fd);
from:
v4l2攝像頭驅動
環境 硬體 radxa rock開發板,藍色妖姬t998無驅攝像頭 系統 lubuntu 3月15號韌體,v4l2 其實我只是把草根老師的部落格 改了些引數 1.攝像頭的模式由o rdwr o nonblock改為o rdwr,若不改,會報dq buf的bug 3.n buffer中途會莫名其妙改變...
USB攝像頭驅動配置及V4L2程式設計
摘要 學位授予單位 燕山大學 學位級別 碩士 學位授予年份 2011 其實uboot啟動映像主要是在原來的zimage前加上乙個他要0x40的tag,告訴uboot一些關於核心啟動的資訊。在arch arm boot makefile 62行開始有命令和規則 quiet cmd uimage uim...
V4L2 獲取和配置攝像頭
一 v4l2 獲取和配置攝像頭程式示例 include include include include include include include includeint fd const char input dev dev video0 const char qctrl name null i...