2.5. RGB 格式

這些格式將每個畫素編碼為一組 RGB 三元組值。它們是打包格式,意味著一個畫素的 RGB 值在記憶體中是連續儲存的,並且每個畫素佔用整數個位元組。當儲存畫素所需的位元數未按位元組邊界對齊時,資料會用額外的位元填充以補齊剩餘的位元組。

這些格式的不同之處在於每個 RGB 分量的位元數(通常但不總是所有分量都相同)、記憶體中分量的順序,以及是否存在 alpha 分量或額外的填充位元。

在支援 alpha 位的格式中(命名為 ARGB 或其排列形式,統稱為 alpha 格式),alpha 位的使用和值取決於裝置型別和硬體操作。捕獲裝置(包括記憶體到記憶體裝置的捕獲佇列)在記憶體中填充 alpha 分量。當裝置捕獲 alpha 通道時,alpha 分量將具有有意義的值。否則,當裝置不捕獲 alpha 通道但可以將 alpha 位設定為使用者可配置的值時,使用 V4L2_CID_ALPHA_COMPONENT 控制來指定該 alpha 值,並且所有畫素的 alpha 分量都將設定為該控制指定的值。否則,必須使用不帶 alpha 分量(XRGB 或 XBGR)的相應格式,而不是 alpha 格式。

輸出裝置(包括記憶體到記憶體裝置的輸出佇列和 影片輸出疊加裝置)從記憶體中讀取 alpha 分量。當裝置處理 alpha 通道時,應用程式必須用有意義的值填充 alpha 分量。否則,必須使用不帶 alpha 分量(XRGB 或 XBGR)的相應格式,而不是 alpha 格式。

包含填充位的格式被命名為 XRGB(或其排列形式)。填充位包含未定義的值,並且應用程式、裝置和驅動程式必須忽略它們,無論是對於 影片捕獲介面 還是 影片輸出介面 裝置。

注意

  • 在所有隨後的表格中,位元 7 是位元組中的最高有效位。

  • ‘r’、‘g’ 和 ‘b’ 分別表示紅色、綠色和藍色分量的位元。‘a’ 表示 alpha 分量的位元(如果格式支援),‘x’ 表示填充位元。

2.5.1. 每個分量少於 8 位元

這些格式將一個 RGB 三元組儲存在一個、兩個或四個位元組中。它們的命名基於 RGB 分量在 8 位、16 位或 32 位字中的順序,然後以小端位元組序儲存在記憶體中(除非 4CC 值中存在位元 31 另有說明),以及每個分量的位元數。例如,RGB565 格式將畫素儲存在一個 16 位字 [15:0] 中,佈局為 [R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0],並在記憶體中儲存為兩個位元組,[R4 R3 R2 R1 R0 G5 G4 G3] 後面跟著 [G2 G1 G0 B4 B3 B2 B1 B0]。

每個分量少於 8 位元的 RGB 格式

識別符號

程式碼

記憶體中位元組 0

位元組 1

位元組 2

位元組 3

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

V4L2_PIX_FMT_RGB332

‘RGB1’

r2

r1

r0

g2

g1

g0

b1

b0

V4L2_PIX_FMT_ARGB444

‘AR12’

g3

g2

g1

g0

b3

b2

b1

b0

a3

a2

a1

a0

r3

r2

r1

r0

V4L2_PIX_FMT_XRGB444

‘XR12’

g3

g2

g1

g0

b3

b2

b1

b0

x

x

x

x

r3

r2

r1

r0

V4L2_PIX_FMT_RGBA444

‘RA12’

b3

b2

b1

b0

a3

a2

a1

a0

r3

r2

r1

r0

g3

g2

g1

g0

V4L2_PIX_FMT_RGBX444

‘RX12’

b3

b2

b1

b0

x

x

x

x

r3

r2

r1

r0

g3

g2

g1

g0

V4L2_PIX_FMT_ABGR444

‘AB12’

g3

g2

g1

g0

r3

r2

r1

r0

a3

a2

a1

a0

b3

b2

b1

b0

V4L2_PIX_FMT_XBGR444

‘XB12’

g3

g2

g1

g0

r3

r2

r1

r0

x

x

x

x

b3

b2

b1

b0

V4L2_PIX_FMT_BGRA444

‘BA12’

r3

r2

r1

r0

a3

a2

a1

a0

b3

b2

b1

b0

g3

g2

g1

g0

V4L2_PIX_FMT_BGRX444

‘BX12’

r3

r2

r1

r0

x

x

x

x

b3

b2

b1

b0

g3

g2

g1

g0

V4L2_PIX_FMT_ARGB555

‘AR15’

g2

g1

g0

b4

b3

b2

b1

b0

a

r4

r3

r2

r1

r0

g4

g3

V4L2_PIX_FMT_XRGB555

‘XR15’

g2

g1

g0

b4

b3

b2

b1

b0

x

r4

r3

r2

r1

r0

g4

g3

V4L2_PIX_FMT_RGBA555

‘RA15’

g1

g0

b4

b3

b2

b1

b0

a

r4

r3

r2

r1

r0

g4

g3

g2

V4L2_PIX_FMT_RGBX555

‘RX15’

g1

g0

b4

b3

b2

b1

b0

x

r4

r3

r2

r1

r0

g4

g3

g2

V4L2_PIX_FMT_ABGR555

‘AB15’

g2

g1

g0

r4

r3

r2

r1

r0

a

b4

b3

b2

b1

b0

g4

g3

V4L2_PIX_FMT_XBGR555

‘XB15’

g2

g1

g0

r4

r3

r2

r1

r0

x

b4

b3

b2

b1

b0

g4

g3

V4L2_PIX_FMT_BGRA555

‘BA15’

g1

g0

r4

r3

r2

r1

r0

a

b4

b3

b2

b1

b0

g4

g3

g2

V4L2_PIX_FMT_BGRX555

‘BX15’

g1

g0

r4

r3

r2

r1

r0

x

b4

b3

b2

b1

b0

g4

g3

g2

V4L2_PIX_FMT_RGB565

‘RGBP’

g2

g1

g0

b4

b3

b2

b1

b0

r4

r3

r2

r1

r0

g5

g4

g3

V4L2_PIX_FMT_ARGB555X

‘AR15’ | (1 << 31)

a

r4

r3

r2

r1

r0

g4

g3

g2

g1

g0

b4

b3

b2

b1

b0

V4L2_PIX_FMT_XRGB555X

‘XR15’ | (1 << 31)

x

r4

r3

r2

r1

r0

g4

g3

g2

g1

g0

b4

b3

b2

b1

b0

V4L2_PIX_FMT_RGB565X

‘RGBR’

r4

r3

r2

r1

r0

g5

g4

g3

g2

g1

g0

b4

b3

b2

b1

b0

V4L2_PIX_FMT_BGR666

‘BGRH’

b5

b4

b3

b2

b1

b0

g5

g4

g3

g2

g1

g0

r5

r4

r3

r2

r1

r0

x

x

x

x

x

x

x

x

x

x

x

x

x

x

2.5.2. 每個分量 8 位元

這些格式將一個 RGB 三元組儲存在三個或四個位元組中。它們的命名基於 RGB 分量在記憶體中的儲存順序,以及每個畫素的總位元數。例如,RGB24 格式將畫素儲存在第一個位元組中的 [R7 R6 R5 R4 R3 R2 R1 R0]、第二個位元組中的 [G7 G6 G5 G4 G3 G2 G1 G0] 和第三個位元組中的 [B7 B6 B5 B4 B3 B2 B1 B0]。這與 DRM 格式命名法不同,後者使用在 24 位或 32 位小端字中看到的分量順序。

每個分量 8 位元的 RGB 格式

識別符號

程式碼

記憶體中位元組 0

位元組 1

位元組 2

位元組 3

V4L2_PIX_FMT_BGR24

‘BGR3’

B7-0

G7-0

R7-0

V4L2_PIX_FMT_RGB24

‘RGB3’

R7-0

G7-0

B7-0

V4L2_PIX_FMT_ABGR32

‘AR24’

B7-0

G7-0

R7-0

A7-0

V4L2_PIX_FMT_XBGR32

‘XR24’

B7-0

G7-0

R7-0

X7-0

V4L2_PIX_FMT_BGRA32

‘RA24’

A7-0

B7-0

G7-0

R7-0

V4L2_PIX_FMT_BGRX32

‘RX24’

X7-0

B7-0

G7-0

R7-0

V4L2_PIX_FMT_RGBA32

‘AB24’

R7-0

G7-0

B7-0

A7-0

V4L2_PIX_FMT_RGBX32

‘XB24’

R7-0

G7-0

B7-0

X7-0

V4L2_PIX_FMT_ARGB32

‘BA24’

A7-0

R7-0

G7-0

B7-0

V4L2_PIX_FMT_XRGB32

‘BX24’

X7-0

R7-0

G7-0

B7-0

2.5.3. 每個分量 10 位元

這些格式在一個可選的 2 位 alpha 分量的基礎上,將一個 30 位 RGB 三元組儲存在四個位元組中。它們的命名基於 RGB 分量在 32 位字中的順序,然後以小端位元組序儲存在記憶體中(除非 4CC 值中存在位元 31 另有說明),以及每個分量的位元數。

每個顏色分量 10 位元的 RGB 格式

識別符號

程式碼

記憶體中位元組 0

位元組 1

位元組 2

位元組 3

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

V4L2_PIX_FMT_RGBX1010102

‘RX30’

b5

b4

b3

b2

b1

b0

x

x

g3

g2

g1

g0

b9

b8

b7

b6

r1

r0

g9

g8

g7

g6

g5

g4

r9

r8

r7

r6

r5

r4

r3

r2

V4L2_PIX_FMT_RGBA1010102

‘RA30’

b5

b4

b3

b2

b1

b0

a1

a0

g3

g2

g1

g0

b9

b8

b7

b6

r1

r0

g9

g8

g7

g6

g5

g4

r9

r8

r7

r6

r5

r4

r3

r2

V4L2_PIX_FMT_ARGB2101010

‘AR30’

b7

b6

b5

b4

b3

b2

b1

b0

g5

g4

g3

g2

g1

g0

b9

b8

r3

r2

r1

r0

g9

g8

g7

g6

a1

a0

r9

r8

r7

r6

r5

r4

2.5.4. 每個分量 12 位元

這些格式將一個 RGB 三元組儲存在六個或八個位元組中,每個分量 12 位。將每個分量的位元擴充套件到 16 位,資料在高位,低位為零,按小端序排列。

每個分量 12 位元的 RGB 格式

識別符號

程式碼

位元組 1-0

位元組 3-2

位元組 5-4

位元組 7-6

V4L2_PIX_FMT_BGR48_12

‘B312’

B15-4

G15-4

R15-4

V4L2_PIX_FMT_ABGR64_12

‘B412’

B15-4

G15-4

R15-4

A15-4

2.5.5. 每個分量 16 位元

這些格式將一個 RGB 三元組儲存在六個位元組中,每個分量 16 位,以小端位元組序儲存在記憶體中。它們的命名基於 RGB 分量在記憶體中的儲存順序。例如,RGB48 分別將 R7:0 和 R15:8 儲存在位元組 0 和位元組 1 中。這與 DRM 格式命名法不同,後者使用在 48 位小端字中看到的分量順序。

每個分量 16 位元的 RGB 格式

識別符號

程式碼

位元組 0

位元組 1

位元組 2

位元組 3

位元組 4

位元組 5

V4L2_PIX_FMT_BGR48

‘BGR6’

B7-0

B15-8

G7-0

G15-8

R7-0

R15-8

V4L2_PIX_FMT_RGB48

‘RGB6’

R7-0

R15-8

G7-0

G15-8

B7-0

B15-8

2.5.6. 已棄用的 RGB 格式

已棄用的打包 RGB 影像格式 中定義的格式已棄用,新驅動程式不得使用。此處記錄它們以供參考。其 alpha 位 (a) 的含義不明確,根據驅動程式的型別,它們被解釋為對應的 ARGB 或 XRGB 格式。

已棄用的打包 RGB 影像格式

識別符號

程式碼

記憶體中位元組 0

位元組 1

位元組 2

位元組 3

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

V4L2_PIX_FMT_RGB444

‘R444’

g3

g2

g1

g0

b3

b2

b1

b0

a3

a2

a1

a0

r3

r2

r1

r0

V4L2_PIX_FMT_RGB555

‘RGBO’

g2

g1

g0

b4

b3

b2

b1

b0

a

r4

r3

r2

r1

r0

g4

g3

V4L2_PIX_FMT_RGB555X

‘RGBQ’

a

r4

r3

r2

r1

r0

g4

g3

g2

g1

g0

b4

b3

b2

b1

b0

V4L2_PIX_FMT_BGR32

‘BGR4’

b7

b6

b5

b4

b3

b2

b1

b0

g7

g6

g5

g4

g3

g2

g1

g0

r7

r6

r5

r4

r3

r2

r1

r0

a7

a6

a5

a4

a3

a2

a1

a0

V4L2_PIX_FMT_RGB32

‘RGB4’

a7

a6

a5

a4

a3

a2

a1

a0

r7

r6

r5

r4

r3

r2

r1

r0

g7

g6

g5

g4

g3

g2

g1

g0

b7

b6

b5

b4

b3

b2

b1

b0

一個用於確定驅動程式實際支援哪些 RGB 格式的測試工具可在 LinuxTV v4l-dvb 倉庫中找到。請參閱 https://linuxtv.org/repo/ 獲取訪問說明。