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]。
識別符號 |
程式碼 |
記憶體中位元組 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 |
||
|
‘RGB1’ |
r2 |
r1 |
r0 |
g2 |
g1 |
g0 |
b1 |
b0 |
||||||||||||||||||||||||
|
‘AR12’ |
g3 |
g2 |
g1 |
g0 |
b3 |
b2 |
b1 |
b0 |
a3 |
a2 |
a1 |
a0 |
r3 |
r2 |
r1 |
r0 |
||||||||||||||||
|
‘XR12’ |
g3 |
g2 |
g1 |
g0 |
b3 |
b2 |
b1 |
b0 |
x |
x |
x |
x |
r3 |
r2 |
r1 |
r0 |
||||||||||||||||
|
‘RA12’ |
b3 |
b2 |
b1 |
b0 |
a3 |
a2 |
a1 |
a0 |
r3 |
r2 |
r1 |
r0 |
g3 |
g2 |
g1 |
g0 |
||||||||||||||||
|
‘RX12’ |
b3 |
b2 |
b1 |
b0 |
x |
x |
x |
x |
r3 |
r2 |
r1 |
r0 |
g3 |
g2 |
g1 |
g0 |
||||||||||||||||
|
‘AB12’ |
g3 |
g2 |
g1 |
g0 |
r3 |
r2 |
r1 |
r0 |
a3 |
a2 |
a1 |
a0 |
b3 |
b2 |
b1 |
b0 |
||||||||||||||||
|
‘XB12’ |
g3 |
g2 |
g1 |
g0 |
r3 |
r2 |
r1 |
r0 |
x |
x |
x |
x |
b3 |
b2 |
b1 |
b0 |
||||||||||||||||
|
‘BA12’ |
r3 |
r2 |
r1 |
r0 |
a3 |
a2 |
a1 |
a0 |
b3 |
b2 |
b1 |
b0 |
g3 |
g2 |
g1 |
g0 |
||||||||||||||||
|
‘BX12’ |
r3 |
r2 |
r1 |
r0 |
x |
x |
x |
x |
b3 |
b2 |
b1 |
b0 |
g3 |
g2 |
g1 |
g0 |
||||||||||||||||
|
‘AR15’ |
g2 |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
a |
r4 |
r3 |
r2 |
r1 |
r0 |
g4 |
g3 |
||||||||||||||||
|
‘XR15’ |
g2 |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
x |
r4 |
r3 |
r2 |
r1 |
r0 |
g4 |
g3 |
||||||||||||||||
|
‘RA15’ |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
a |
r4 |
r3 |
r2 |
r1 |
r0 |
g4 |
g3 |
g2 |
||||||||||||||||
|
‘RX15’ |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
x |
r4 |
r3 |
r2 |
r1 |
r0 |
g4 |
g3 |
g2 |
||||||||||||||||
|
‘AB15’ |
g2 |
g1 |
g0 |
r4 |
r3 |
r2 |
r1 |
r0 |
a |
b4 |
b3 |
b2 |
b1 |
b0 |
g4 |
g3 |
||||||||||||||||
|
‘XB15’ |
g2 |
g1 |
g0 |
r4 |
r3 |
r2 |
r1 |
r0 |
x |
b4 |
b3 |
b2 |
b1 |
b0 |
g4 |
g3 |
||||||||||||||||
|
‘BA15’ |
g1 |
g0 |
r4 |
r3 |
r2 |
r1 |
r0 |
a |
b4 |
b3 |
b2 |
b1 |
b0 |
g4 |
g3 |
g2 |
||||||||||||||||
|
‘BX15’ |
g1 |
g0 |
r4 |
r3 |
r2 |
r1 |
r0 |
x |
b4 |
b3 |
b2 |
b1 |
b0 |
g4 |
g3 |
g2 |
||||||||||||||||
|
‘RGBP’ |
g2 |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
r4 |
r3 |
r2 |
r1 |
r0 |
g5 |
g4 |
g3 |
||||||||||||||||
|
‘AR15’ | (1 << 31) |
a |
r4 |
r3 |
r2 |
r1 |
r0 |
g4 |
g3 |
g2 |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
||||||||||||||||
|
‘XR15’ | (1 << 31) |
x |
r4 |
r3 |
r2 |
r1 |
r0 |
g4 |
g3 |
g2 |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
||||||||||||||||
|
‘RGBR’ |
r4 |
r3 |
r2 |
r1 |
r0 |
g5 |
g4 |
g3 |
g2 |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
||||||||||||||||
|
‘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 位小端字中看到的分量順序。
識別符號 |
程式碼 |
記憶體中位元組 0 |
位元組 1 |
位元組 2 |
位元組 3 |
|---|---|---|---|---|---|
|
‘BGR3’ |
B7-0 |
G7-0 |
R7-0 |
|
|
‘RGB3’ |
R7-0 |
G7-0 |
B7-0 |
|
|
‘AR24’ |
B7-0 |
G7-0 |
R7-0 |
A7-0 |
|
‘XR24’ |
B7-0 |
G7-0 |
R7-0 |
X7-0 |
|
‘RA24’ |
A7-0 |
B7-0 |
G7-0 |
R7-0 |
|
‘RX24’ |
X7-0 |
B7-0 |
G7-0 |
R7-0 |
|
‘AB24’ |
R7-0 |
G7-0 |
B7-0 |
A7-0 |
|
‘XB24’ |
R7-0 |
G7-0 |
B7-0 |
X7-0 |
|
‘BA24’ |
A7-0 |
R7-0 |
G7-0 |
B7-0 |
|
‘BX24’ |
X7-0 |
R7-0 |
G7-0 |
B7-0 |
2.5.3. 每個分量 10 位元¶
這些格式在一個可選的 2 位 alpha 分量的基礎上,將一個 30 位 RGB 三元組儲存在四個位元組中。它們的命名基於 RGB 分量在 32 位字中的順序,然後以小端位元組序儲存在記憶體中(除非 4CC 值中存在位元 31 另有說明),以及每個分量的位元數。
識別符號 |
程式碼 |
記憶體中位元組 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 |
||
|
‘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 |
|
‘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 |
|
‘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 位,資料在高位,低位為零,按小端序排列。
識別符號 |
程式碼 |
位元組 1-0 |
位元組 3-2 |
位元組 5-4 |
位元組 7-6 |
|---|---|---|---|---|---|
|
‘B312’ |
B15-4 |
G15-4 |
R15-4 |
|
|
‘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 位小端字中看到的分量順序。
識別符號 |
程式碼 |
位元組 0 |
位元組 1 |
位元組 2 |
位元組 3 |
位元組 4 |
位元組 5 |
|---|---|---|---|---|---|---|---|
|
‘BGR6’ |
B7-0 |
B15-8 |
G7-0 |
G15-8 |
R7-0 |
R15-8 |
|
‘RGB6’ |
R7-0 |
R15-8 |
G7-0 |
G15-8 |
B7-0 |
B15-8 |
2.5.6. 已棄用的 RGB 格式¶
在 已棄用的打包 RGB 影像格式 中定義的格式已棄用,新驅動程式不得使用。此處記錄它們以供參考。其 alpha 位 (a) 的含義不明確,根據驅動程式的型別,它們被解釋為對應的 ARGB 或 XRGB 格式。
識別符號 |
程式碼 |
記憶體中位元組 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 |
||
|
‘R444’ |
g3 |
g2 |
g1 |
g0 |
b3 |
b2 |
b1 |
b0 |
a3 |
a2 |
a1 |
a0 |
r3 |
r2 |
r1 |
r0 |
||||||||||||||||
|
‘RGBO’ |
g2 |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
a |
r4 |
r3 |
r2 |
r1 |
r0 |
g4 |
g3 |
||||||||||||||||
|
‘RGBQ’ |
a |
r4 |
r3 |
r2 |
r1 |
r0 |
g4 |
g3 |
g2 |
g1 |
g0 |
b4 |
b3 |
b2 |
b1 |
b0 |
||||||||||||||||
|
‘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 |
|
‘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/ 獲取訪問說明。