四、細節
int ioctl (int __fd, unsigned long int __request, .../*args*/) ;在進行v4l2開發中,常用的命令標誌符如下(some are optional):
struct v4l2_format fmt;
struct v4l2_requestbuffers req;if (ioctl(fd, vidioc_reqbufs, &req) == -1) v4l2_requestbuffers 結構如下:struct v4l2_requestbuffers;2.4 獲取並記錄快取的物理空間
使用vidioc_reqbufs,我們獲取了req.count個快取,下一步通過呼叫vidioc_querybuf命令來獲取這些快取的位址,然後使用mmap函式轉換成應用程式中的絕對位址,最後把這段快取放入快取佇列:
read、write方式,在使用者空間和核心空間不斷拷貝資料,占用了大量使用者記憶體空間,效率不高。
記憶體對映方式:把裝置裡的記憶體對映到應用程式中的記憶體控制項,直接處理裝置記憶體,這是一種有效的方式。上面的mmap函式就是使用這種方式。
使用者指標模式:記憶體片段由應用程式自己分配。這點需要在v4l2_requestbuffers裡將memory欄位設定成v4l2_memory_userptr。
close(camerafd)如果使用mmap,最後還需要使用munmap方法。
V4L2應用程式框架
用非阻塞模式開啟攝像頭裝置 int camerafd camerafd open dev video0 o rdwr o nonblock,0 如果用阻塞模式開啟攝像頭裝置,上述 變為 camerafd open dev video0 o rdwr,0 int ioctl int fd,unsign...
V4L2應用程式框架
四 細節 用非阻塞模式開啟攝像頭裝置 int camerafd camerafd open dev video0 o rdwr o nonblock,0 如果用阻塞模式開啟攝像頭裝置,上述 變為 camerafd open dev video0 o rdwr,0 int ioctl int fd,u...
V4L2驅動框架
v4l2驅動框架 主裝置號 81 次裝置號 0 63 64 67 192 223 224 255 dev videox 應用層 char驅動 v4l2 具體的驅動 硬體應用層的操作都需要有底層v4l2驅動的支援。核心中有一些非常完善的例子。比如 linux 2.6.26核心目錄drivers med...