日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明

發布時間:2023/12/4 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般操作流程(視頻設備):

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):

struct v4l2_requestbuffers reqbufs;//向驅動申請幀緩沖的請求,里面包含申請的個數

struct v4l2_capability cap;//這個設備的功能,比如是否是視頻輸入設備

struct v4l2_input input; //視頻輸入

struct v4l2_standard std;//視頻的制式,比如PAL,NTSC

struct v4l2_format fmt;//幀的格式,比如寬度,高度等

struct v4l2_buffer buf;//代表驅動中的一幀

v4l2_std_id stdid;//視頻制式,例如:V4L2_STD_PAL_B

struct v4l2_queryctrl query;//某一類型的控制

struct v4l2_control control;//具體控制的值

1。User controlls其實就是一些用戶可以用來進行設置的一些屬性,如視頻中的brightness等,

video4linux就提取出了最常見的一些設 置,給他們分配了ID,這樣大家對于這些常見的設置,

就是用這些ID就可以了,可以察看當前設備對該設置的值,也可以給該設置新值,此外,

由于某些設置包 含很多子設置項,因此就又有了menu的含義,即對于一個具體的control,

我們在列舉他的屬性時,發現其類型是包含了menu的,那么我們就可以以 這個control的id為參數,

察看其menu及各自的值。當然用戶可以由自定義的control以及extended control。

好像是Camera Control ID中就有可以設置focus聚焦的control id,這個可以看一看。

2。Data format 應用是可以和device針對通信的數據進行談判的,即可以設置device所使用的數據的格式,

可以獲得設備所使用的數據的格式,也可以嘗試一下某種格 式的數據設備是否支持。

使用 VIDIOC_G_FMT and VIDIOC_S_FMT ioctls,而VIDIOC_TRY_FMT 就是用來試一下某設置是否被設備支持,

而且只是 測試,并不會起作用。我們還是可以用VIDIOC_ENUM_FMT來列舉設備所支持的所有的image的格式的。

關于數據格式,在video中就會涉及到image的格式,大小(寬度,高度),等信息。

3. crapping和scaling

就是把得到的數據作一定的剪裁,和伸縮,剪裁可以只取樣我們可以得到的圖像大小的一部分,

剪裁的主要參數是位置和長度以及寬度,而scale的設置是通過VIDIOC_G_FMT and VIDIOC_S_FMT 來獲得和

設置當前的image的長度,寬度來實現的。看下圖

我們可以假設bounds是最大的能捕捉到的圖像范圍,defrect是我們的設備能夠得到的最大的范圍,

這個可以通過VIDIOC_CROPCAP的ioctl來獲得設備的crap相關的屬性 v4l2_cropcap ,

其中的bounds就是這個bounds,其實就是上限。每個設備都有個默認的取樣范圍,就是defrect,

就是default rect的意思,它比bounds要小一些。這個范圍也是通過VIDIOC_CROPCAP的ioctl來

獲得的 v4l2_cropcap 結構中的defrect來表示的,我們可以通過 VIDIOC_G_CROP and VIDIOC_S_CROP

來獲取和設置設備當前的crop設置。

總結

以上是生活随笔為你收集整理的linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。