V4L2文檔翻譯(五)

http://linuxtv.org/downloads/v4l-dvb-apis/format.html

數據格式


數據格式協商


不同設備通過應用交換不同種類的數據。比如視頻圖像,raw或分割的VBI數據,RDS數據電報。甚至是一個種類不同格式也是有可能的,特別是豐富的圖像格式。儘管驅動在設備關閉和重打開時提供了一個默認值和一些預置選項,在做數據交換前應用程序也應該協商數據格式。協商意味着應用程序要請求一個特殊格式,驅動選擇並上報硬件能完成的最好、也最能滿足請求的答案。當然,應用可以只請求當前的選擇。

使用結構體struct v4l2_format和VIDIOC_G_FMT和VIDIOC_S_FMT ioctl的組合是一個單獨的用來協商所有數據格式的機制。另外VIDIOC_TRY_FMT ioctl可以用來檢查不用選擇新的數據格式,硬件可以幹什麼。V4L2 API所支持的數據格式涵蓋了第四節:接口中的各種設備。圖片格式請查看第二節:圖片格式。

VIDIOC_S_FMT ioctl在初始化序列中是一個主要的轉折點。在多個panel程序通過同一個設備同時選擇當前輸入之前,改變控制或者修改其他的屬性。第一個VIDIOC_S_FMT會爲分別爲文件句柄分配一個邏輯流(視頻數據、VBI數據等)。

特別是其他應用程序,精確的說是沒有其他的文件句柄可以劫持這個流或者將設備屬性改變爲其他協商參數。一個視頻的標準改變,比如使用一個新的標準掃描不同的行號,會導致所選擇的圖片格式無效。所以只有擁有流的文件句柄可以做無效修改。考慮到多個文件句柄持有不同的邏輯流,那麼要阻止他們互相干涉各自的設置。比如,當視頻overlay將要開始或已經開始後,同時視頻捕捉同樣的裁剪和圖像尺寸就是被限制的。

當應用程序省去VIDIOC_S_FMT ioctl就暗示他的效果在下一步產生,通過VIDIOC_REQBUFS ioctl選擇IO方法或通過第一次的read()或write()。

通常情況下一個邏輯流只能被分配給一個文件句柄,例外是當驅動通過兼容的V4L或早期版本的V4L2同時授權視頻捕捉和overlay使用同樣的文件句柄。

所有能夠與應用程序交換數據的驅動必須支持VIDIOC_G_FMT和VIDIOC_S_FMT ioctl。VIDIOC_TRY_FMT是強烈推薦的,但是可選。


圖像格式列舉

作爲通用格式協商功能,視頻捕捉、overlay或輸出設備支持一個特殊的ioctl來列舉所有圖片格式。

能夠與應用程序交換圖片數據的驅動必須支持VIDIOC_ENUM_FMT ioctl。


重點

驅動並不應該在內核空間完成圖像格式的轉換。他們必須列舉出硬件能夠直接支持的有哪些格式。如果有必要,驅動書寫者應該發佈一個轉換例程或庫。


單一與多平面API


一些設備爲視頻幀輸入或輸出申請的數據可能被放置在不連續的內存空間中。正因爲這樣,一個視頻幀不得不被尋址在一個或多個內存地址中,比如一個平面一個指針。一個平面是當前幀的子緩衝。類似這樣的格式請看第二節:圖像格式。

首先,V4L2 API並不支持多平面緩衝以及一套延伸機制來處理他們。這些延伸組成的就是可以被認爲是多平面的API。

一些V4L2 API調用和結構的解釋不一,這主要取決於使用的是單平面還是多平面。應用程序可以根據ioctl調用選擇不同的方法來匹配對應的緩衝格式。多平面版本的緩衝類型有“_MPLANE”這樣的後綴。可以通過枚舉v4l2_buf_type來查看有效的多平面緩衝類型。


多平面格式

多平面API介紹了一些新的多平面格式。這些格式使用了一套分離自FourCC的代碼。區分多平面API和一個多平面格式是很重要的。多平面API調用可以很好的處理所有單一平面格式(自動他們被融入了多平面API結構體後),而單平面API就不能處理多平面格式。


區分單一和多平面API的調用

  • VIDIOC_QUERYCAP
    兩個多平面添加到一起。他們會被放到一起作爲非多平面格式,這樣單一格式和多平面格式就都可以處理。
  • VIDIOC_G_FMT VIDIOC_S_FMT VIDIOC_TRY_FMT
    有兩個新添加的用來描述多平面格式的結構體:struct v4l2_pix_format_mplane和v4l2_plane_pix_format。驅動可以定義新的多平面格式,這個格式可以和現存的來自FourCC代碼的的單一平面那些截然不同。

  • VIDIOC_QBUF VIDIOC_DQBUF VIDIOC_QUERYBUF
    一個新的描述平面的結構體struct v4l2_plane。這個結構體的集合在struct v4l2_buffer的m.plane成員中。

  • VIDIOC_REQBUFS
    會申請多平面緩衝區。

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