Linux V4L2 攝像頭視訊採集
阿新 • • 發佈:2019-02-12
1. 開啟裝置檔案。 int fd=open(”/dev/video0″,O_RDWR);
2. 取得裝置的capability,看看裝置具有什麼功能,比如是否具有視訊輸入,或者音訊輸入輸出等。VIDIOC_QUERYCAP,struct v4l2_capability
3. 選擇視訊輸入,一個視訊裝置可以有多個視訊輸入。VIDIOC_S_INPUT,struct v4l2_input
4. 設定視訊的制式和幀格式,制式包括PAL,NTSC,幀的格式個包括寬度和高度等。
VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format
5. 向驅動申請幀緩衝,一般不超過5個。struct v4l2_requestbuffers
6. 將申請到的幀緩衝對映到使用者空間,這樣就可以直接操作採集到的幀了,而不必去複製。mmap
7. 將申請到的幀緩衝全部入佇列,以便存放採集到的資料.VIDIOC_QBUF,struct v4l2_buffer
8. 開始視訊的採集。VIDIOC_STREAMON
9. 出佇列以取得已採集資料的幀緩衝,取得原始採集資料。VIDIOC_DQBUF
10. 將緩衝重新入佇列尾,這樣可以迴圈採集。VIDIOC_QBUF
11. 停止視訊的採集。VIDIOC_STREAMOFF
12. 關閉視訊裝置。close(fd);
三、常用的結構體(參見/usr/include/linux/videodev2.h):
2. 取得裝置的capability,看看裝置具有什麼功能,比如是否具有視訊輸入,或者音訊輸入輸出等。VIDIOC_QUERYCAP,struct v4l2_capability
3. 選擇視訊輸入,一個視訊裝置可以有多個視訊輸入。VIDIOC_S_INPUT,struct v4l2_input
4. 設定視訊的制式和幀格式,制式包括PAL,NTSC,幀的格式個包括寬度和高度等。
VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format
5. 向驅動申請幀緩衝,一般不超過5個。struct v4l2_requestbuffers
6. 將申請到的幀緩衝對映到使用者空間,這樣就可以直接操作採集到的幀了,而不必去複製。mmap
7. 將申請到的幀緩衝全部入佇列,以便存放採集到的資料.VIDIOC_QBUF,struct v4l2_buffer
8. 開始視訊的採集。VIDIOC_STREAMON
9. 出佇列以取得已採集資料的幀緩衝,取得原始採集資料。VIDIOC_DQBUF
10. 將緩衝重新入佇列尾,這樣可以迴圈採集。VIDIOC_QBUF
11. 停止視訊的採集。VIDIOC_STREAMOFF
12. 關閉視訊裝置。close(fd);
三、常用的結構體(參見/usr/include/linux/videodev2.h):