video caputure device linux v4l2 API usag

對於linux下的一個v4l2設備編程一般包括以下步驟:

1) 打開設備

2)改變設備屬性,選擇一個視頻和聲音輸入(有時候一個物理設備可能包括多個視頻和聲音輸入)、視頻標準、圖像亮度等。

3)和驅動協商一個數據格式

4)和驅動協商輸入輸出方法(read,write,mmap,User Pointers,DMA buffer importing,等)

5)數據的輸入輸出循環(獲取數據)

6)關閉設備

注:實際編程的步驟是依賴具體的屬於那種設備,例如,Video Capture,Video Overlay ,Video Output,Video Output Overlay,Codec,Effect Devices,Raw VBI Data,

Sliced VBI Data,Teletext ,Radio,RDS,Event,Sub-device

本文主要翻譯有關caputure device 部分。

視頻捕捉設備對視頻模擬信號採樣,將採樣得到的數字信號存儲在內存中。現在幾乎所有的視頻捕捉設備能夠在每秒捕捉25到30幀。

按照慣例,v4l2視頻捕捉設備能夠通過名爲/dev/video0--/dev/video63(其主設備號爲81,此設備號從0到63)的特殊字符設備文件來訪問。通常,、/dev/video一般符號鏈接到優先選用的視頻設備。注意,相同的設備文件被視頻輸出設備使用。(不懂?)

1)打開和關閉設備分別用open(),和close()函數 

2)因爲v4l2覆蓋很多中設備,不是所有的API可以應用到所有設備上的,此外,相同種類的設備可能有不同的能力。querying capabilities可以讓我們忽略一些複雜難懂而且不是太重要的API。所有的v4l2驅動都支持VIDIOC_QUERYCAP命令,應用程序也應該在打開設備後,用ioctl()函數調用此命令。檢查是否支持想用的設備功能如caputure功能,I/O方法(read/write,mmap等)。

3)爲了知道可用的視頻輸入輸出的數量和屬性,應用程序能列舉每個輸入輸出,分別用VIDIOC_ENUMINPUT and VIDIOC_ENUMOUTPUT ioctl。

VIDIOC_G_INPUT and VIDIOC_G_OUTPUT ioctl返回當前視頻的輸入輸出。應用程序可以使用VIDIOC_S_INPUT and VIDIOC_S_OUTPUT ioctl選擇視頻的輸入輸出通道。

4)其他補充的功能。

視頻捕捉設備可能會支持audio input, tuner, controls, cropping and scalingand streaming parameterioctl

5)圖像格式協商

視頻捕捉的結果由cropping(裁剪)和圖像格式參數決定。cropping選擇設備捕捉視頻圖像的區域,圖像格式,決定圖像以什麼格式存儲的在內存中,例如以RGB還是YUV顏色空間、圖像的寬和高(以像素爲單位),兩者一起決定了圖像怎樣被裁剪。

照例,以上這些參數不在open()函數時重新設定,對一個設備編程就好像對一個普通的文件進行讀,適當的書面v4l2應用程序確保設備得到他們想要的,包括cropping和scaling。(Well written V4L2 applications ensure they really get what they want, including cropping and scaling.)

裁剪初始化最小的要求是重新設定裁剪參數到默認值,爲了去查詢現在圖像的格式,應用程序需要用call the VIDIOC_G_FMT ioctl,爲了要求不同的圖像格式參數,應用程序call the VIDIOC_S_FMT ioctl.

6)讀取圖像數

據視頻捕捉設備可能支持read(),也可能之處l流I/O(即mmap和user pointer io)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章