2.3. 標準影像格式

為了在驅動程式和應用程式之間交換影像,需要有雙方都能以相同方式解釋的標準影像資料格式。V4L2 包含了幾種此類格式,本節旨在明確指定 V4L2 中的標準影像資料格式。

然而,V4L2 驅動程式不限於這些格式。驅動程式特定的格式是可能的。在這種情況下,應用程式可能依賴編解碼器在需要時將影像轉換為標準格式之一。但資料仍然可以以專有格式儲存和檢索。例如,裝置可能支援專有的壓縮格式。應用程式仍然可以以壓縮格式捕獲和儲存資料,節省大量磁碟空間,並在稍後當影片需要顯示時,使用編解碼器將影像轉換為 X Windows 螢幕格式。

即便如此,最終仍然需要一些標準格式,因此如果沒有明確定義的標準格式,V4L2 規範將不完整。

V4L2 標準格式主要是未壓縮格式。畫素始終在記憶體中從左到右、從上到下排列。影像緩衝區中的第一個資料位元組始終用於最頂行最左側的畫素。緊隨其後的是其右側的畫素,依此類推,直到頂行畫素的末尾。在行的最右側畫素之後,可能有一個或多個填充位元組,以保證每行畫素資料具有一定的對齊方式。在填充位元組(如果有)之後,是第二行最左側畫素的資料,依此類推。最後一行與其它行具有相同數量的填充位元組。

在 V4L2 中,每種格式都有一個類似於 PIX_FMT_XXX 的識別符號,定義在 videodev2.h 標頭檔案中。這些識別符號代表 四字元 (FourCC) 程式碼,這些程式碼也列在下面,但它們與 Windows 世界中使用的不同。

對於某些格式,資料儲存在單獨的、不連續的記憶體緩衝區中。這些格式由一組單獨的 FourCC 程式碼標識,並被稱為“多平面格式”。例如,一個 YUV422 幀通常儲存在一個記憶體緩衝區中,但它也可以放置在兩個或三個單獨的緩衝區中,其中 Y 分量在一個緩衝區中,CbCr 分量在另一個緩衝區中(在2平面版本中),或者每個分量在自己的緩衝區中(在3平面情況下)。這些子緩衝區被稱為“平面”。