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

歡迎訪問 生活随笔!

生活随笔

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

linux

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

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

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

1. 打開設(shè)備文件。 int fd=open("/dev/video0",O_RDWR);

2. 取得設(shè)備的capability,看看設(shè)備具有什么功能,比如是否具有視頻輸入,或者音頻輸入輸出等。VIDIOC_QUERYCAP,struct v4l2_capability

3. 選擇視頻輸入,一個視頻設(shè)備可以有多個視頻輸入。VIDIOC_S_INPUT,struct v4l2_input

4. 設(shè)置視頻的制式和幀格式,制式包括PAL,NTSC,幀的格式個包括寬度和高度等。

VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format

5. 向驅(qū)動申請幀緩沖,一般不超過5個。struct v4l2_requestbuffers

6. 將申請到的幀緩沖映射到用戶空間,這樣就可以直接操作采集到的幀了,而不必去復制。mmap

7. 將申請到的幀緩沖全部入隊列,以便存放采集到的數(shù)據(jù).VIDIOC_QBUF,struct v4l2_buffer

8. 開始視頻的采集。VIDIOC_STREAMON

9. 出隊列以取得已采集數(shù)據(jù)的幀緩沖,取得原始采集數(shù)據(jù)。VIDIOC_DQBUF

10. 將緩沖重新入隊列尾,這樣可以循環(huán)采集。VIDIOC_QBUF

11. 停止視頻的采集。VIDIOC_STREAMOFF

12. 關(guān)閉視頻設(shè)備。close(fd);

常用的結(jié)構(gòu)體(參見/usr/include/linux/videodev2.h):

struct v4l2_requestbuffers reqbufs;//向驅(qū)動申請幀緩沖的請求,里面包含申請的個數(shù)

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

struct v4l2_input input; //視頻輸入

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

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

struct v4l2_buffer buf;//代表驅(qū)動中的一幀

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

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

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

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

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

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

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

我們在列舉他的屬性時,發(fā)現(xiàn)其類型是包含了menu的,那么我們就可以以 這個control的id為參數(shù),

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

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

2。Data format 應(yīng)用是可以和device針對通信的數(shù)據(jù)進行談判的,即可以設(shè)置device所使用的數(shù)據(jù)的格式,

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

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

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

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

3. crapping和scaling

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

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

設(shè)置當前的image的長度,寬度來實現(xiàn)的。看下圖

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

這個可以通過VIDIOC_CROPCAP的ioctl來獲得設(shè)備的crap相關(guān)的屬性 v4l2_cropcap ,

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

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

獲得的 v4l2_cropcap 結(jié)構(gòu)中的defrect來表示的,我們可以通過 VIDIOC_G_CROP and VIDIOC_S_CROP

來獲取和設(shè)置設(shè)備當前的crop設(shè)置。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。