【測控技術與儀器】v4l2視頻采集_第1頁
【測控技術與儀器】v4l2視頻采集_第2頁
【測控技術與儀器】v4l2視頻采集_第3頁
【測控技術與儀器】v4l2視頻采集_第4頁
【測控技術與儀器】v4l2視頻采集_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

V4L2編程V4L2是針對UVC免驅USB設備的編程框架,主要用于采集USB攝像頭等,編程模式如下一設置采集方式打開視頻設備后,可以設置該視頻設備的屬性,例如裁剪、縮放等。這一步是可選的。在LINUX編程中,一般使用IOCTL函數來對設備的I/O通道進行管理EXTERNINTIOCTLINT_FD,UNSIGNEDLONGINT_REQUEST,_THROW_FD設備的ID,例如剛才用OPEN函數打開視頻通道后返回的CAMERAFD;_REQUEST具體的命令標志符。在進行V4L2開發中,一般會用到以下的命令標志符VIDIOC_REQBUFS分配內存VIDIOC_QUERYBUF把VIDIOC_REQBUFS中分配的數據緩存轉換成物理地址VIDIOC_QUERYCAP查詢驅動功能VIDIOC_ENUM_FMT獲取當前驅動支持的視頻格式VIDIOC_S_FMT設置當前驅動的頻捕獲格式VIDIOC_G_FMT讀取當前驅動的頻捕獲格式VIDIOC_TRY_FMT驗證當前驅動的顯示格式VIDIOC_CROPCAP查詢驅動的修剪能力VIDIOC_S_CROP設置視頻信號的邊框VIDIOC_G_CROP讀取視頻信號的邊框VIDIOC_QBUF把數據從緩存中讀取出來VIDIOC_DQBUF把數據放回緩存隊列VIDIOC_STREAMON開始視頻顯示函數VIDIOC_STREAMOFF結束視頻顯示函數VIDIOC_QUERYSTD檢查當前視頻設備支持的標準,例如PAL或NTSC。這些IO調用,有些是必須的,有些是可選擇的。二一般操作流程(視頻設備)1打開設備文件。INTFDOPEN”/DEV/VIDEO0,O_RDWR2取得設備的CAPABILITY,看看設備具有什么功能,比如是否具有視頻輸入,或者音頻輸入輸出等。VIDIOC_QUERYCAP,STRUCTV4L2_CAPABILITYV4L2_STD_IDSTDDORETIOCTLFD,VIDIOC_QUERYSTD,WHILERET1SWITCHSTDCASEV4L2_STD_NTSC/CASEV4L2_STD_PAL/3選擇視頻輸入,一個視頻設備可以有多個視頻輸入。VIDIOC_S_INPUT,STRUCTV4L2_INPUT可不要4設置視頻的制式和幀格式,制式包括PAL,NTSC,幀的格式個包括寬度和高度等。VIDIOC_S_STD,VIDIOC_S_FMT,STRUCTV4L2_STD_ID,STRUCTV4L2_FORMATSTRUCTV4L2_FORMATFMT/V4L2_FORMAT結構如下STRUCTV4L2_FORMATENUMV4L2_BUF_TYPETYPE/數據流類型,必須永遠是V4L2_BUF_TYPE_VIDEO_CAPTUREUNIONSTRUCTV4L2_PIX_FORMATPIXSTRUCTV4L2_WINDOWWINSTRUCTV4L2_VBI_FORMATVBI_U8RAW_DATA200FMTSTRUCTV4L2_PIX_FORMAT_U32WIDTH/寬,必須是16的倍數_U32HEIGHT/高,必須是16的倍數_U32PIXELFORMAT/視頻數據存儲類型,例如是YUV422還是RGBENUMV4L2_FIELDFIELD_U32BYTESPERLINE_U32SIZEIMAGEENUMV4L2_COLORSPACECOLORSPACE_U32PRIV/樣例MEMSETFMTTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREFMTFMTPIXWIDTH320FMTFMTPIXHEIGHT240FMTFMTPIXPIXELFORMATV4L2_PIX_FMT_JPEGIFIOCTLFD,VIDIOC_S_FMT,/RETURN05向驅動申請幀緩沖,一般不超過5個。STRUCTV4L2_REQUESTBUFFERSSTRUCTV4L2_REQUESTBUFFERS_U32COUNT/緩存數量,也就是說在緩存隊列里保持多少張照片ENUMV4L2_BUF_TYPETYPE/數據流類型,必須永遠是V4L2_BUF_TYPE_VIDEO_CAPTUREENUMV4L2_MEMORYMEMORY/V4L2_MEMORY_MMAP或V4L2_MEMORY_USERPTR_U32RESERVED2樣例STRUCTV4L2_REQUESTBUFFERSREQMEMSETREQCOUNT4REQTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREREQMEMORYV4L2_MEMORY_MMAPIFIOCTLFD,VIDIOC_REQBUFS,/RETURN16申請物理內存將申請到的幀緩沖映射到用戶空間,這樣就可以直接操作采集到的幀了,而不必去復制。將申請到的幀緩沖全部入隊列,以便存放采集到的數據VIDIOC_QBUF,STRUCTV4L2_BUFFERVIDEOBUFFERBUFFERSCALLOCREQCOUNT,SIZEOFVIDEOBUFFERPRINTF“SIZEOFVIDEOBUFFERISDN“,SIZEOFVIDEOBUFFERSTRUCTV4L2_BUFFERBUFFORNUMBUFS0NUMBUFSREQCOUNTNUMBUFSMEMSETBUFTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREBUFMEMORYV4L2_MEMORY_MMAPBUFINDEXNUMBUFSIFIOCTLFD,VIDIOC_QUERYBUF,/RETURN1PRINTF“BUFLENISDN“,SIZEOFBUF/內存映射BUFFERSNUMBUFSLENGTHBUFLENGTHBUFFERSNUMBUFSOFFSETSIZE_TBUFMOFFSETBUFFERSNUMBUFSSTARTMMAPNULL,BUFLENGTH,PROT_READ|PROT_WRITE,MAP_SHARED,FD,BUFMOFFSETPRINTF“BUFFERSLENGTHD,BUFFERSOFFSETD,BUFFERSSTART0DN“,BUFFERSNUMBUFSLENGTH,BUFFERSNUMBUFSOFFSET,BUFFERSNUMBUFSSTART0PRINTF“BUF2LENISDN“,SIZEOFBUFFERSNUMBUFSSTARTIFBUFFERSNUMBUFSSTARTMAP_FAILEDPERROR“BUFFERSERRORN“/RETURN1IFIOCTLFD,VIDIOC_QBUF,/RETURN17開始視頻的采集。ENUMV4L2_BUF_TYPETYPETYPEV4L2_BUF_TYPE_VIDEO_CAPTUREIFIOCTLFD,VIDIOC_STREAMON,/RETURN18出隊列以取得已采集數據的幀緩沖,取得原始采集數據。VIDIOC_DQBUF,將緩沖重新入隊列尾,這樣可以循環采集。VIDIOC_QBUFIFIOCTLFD,VIDIOC_DQBUF,/RETURN1BUFTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREBUFMEMORYV4L2_MEMORY_MMAPUNSIGNEDCHARPTCURBUFFERSNUMBUFSSTARTDEBUG“BUFBYTESUSEDDN“,BUFBYTESUSEDINTI1FORI10I1BUFBYTESUSEDI1IFBUFFERSNUMBUFSSTARTI10X000000FFBREAKIFI1BUFBYTESUSEDPRINTF“HUFFMANTABLEDONTEXISTN“INTIFORI0IBUFBYTESUSEDIIFBUFFERSNUMBUFSSTARTI0X000000FFPTCURDEBUG“ID,FF02X,D802XN“,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論