顯示控制器 (DC) 負責將一或多個來源圖片組合至顯示輸出信號。部分 DC 可以平行產生多個輸出信號,例如驅動多個螢幕。本文將簡單介紹常見的硬體元件,協助您瞭解可用於開發驅動程式庫的常用簡單和未註解資料表。
用來複合輸出圖片的硬體子集通常稱為管道。管道由輸入「平面」、色彩校正和混合/合成階段組成。
每個平面都有具有自身尺寸、位置、像素格式、色域、Gamma 校正和混合行為的來源圖片。管道必須經過程式設計,才能正確解碼、轉換、色彩校正,並將這些平面混成最終顯示圖片。
編碼器會處理最終顯示圖片,並將原始像素資料與時間產生器結合,以為連接器通訊埠 (DisplayPort、HDMI、DVI 等) 編碼為正確的電子訊號。
平面類型
- 螢幕
- 「螢幕尺寸」是正常混合的平面。
- 重疊
- 重疊是一種使用色鍵透明透明度的平面。此平面類型的常見用途是在影片播放上方算繪媒體控制項:軟體會在 (大) 靜態內容上打孔,讓硬體加速視訊解碼器將內容轉儲到重疊顯示的第二個平面上。
- 雪碧
- 現在,許多驅動程式庫開發人員會使用「精靈」一詞,指稱任何並非做為主要內容的飛機。以往,Sprite 常用於將靜態圖片的重複使用情形進行精簡編碼。這種類型在 80 年代個人電腦和 80 至 90 年代電玩遊戲主機的記憶體有限環境中非常熱門。
- 遊標:
- 遊標通常較小,且提供有限的色域選項。它們可用來在靜態內容上重疊遊標。大部分的軟體會調整這個平面的位置,方法是調整其位置,而且只會偶爾變更來源圖片。
色域
色域包含色彩模型 (例如 RGB 或 CMYK),以及可將該色域中的值轉換成參照空間 (例如 CIELAB 或 CIEXYZ) 的對應函式。
數位圖片處理和顯示所用的色域大致可分為兩種:實體/線性和感知/以 Gamma 編碼。線性空間中的顏色可以用實體準確的方式組合及轉換,例如,將值加倍表示「光是五分之一」就是這些數值。感知色彩空間的用意是模仿非線性人類視覺感知,因此請將值加倍表示「亮度為兩倍」。
像素格式
Pixel 的格式和色域通常容易混淆,導致顏色準確度錯誤。例如,使用 RGB_888_24 像素格式:每個像素的格式都是採用 (R、G、B) 位元組的三元組,但您不知道三重是 sRGB、Adobe RGB 或線性 RGB 色域中的點。如果將不同色域的兩個值合併 (例如新增這些值),產生的像素值可能實際不正確。
DC 必須編寫程式,將每個平面的圖片轉換為線性色域,將其全部合併,並將產生的圖片轉換為適合輸出裝置的色域。顯示器須支援至少 sRGB 的 HDMI 規格。
Gamma 校正
詳情請參閱 Novak 撰寫的這篇優質網誌文章。
大多數靜態數位圖片都會採用 sRGB 色域,這也是電腦螢幕最支援的格式。不過,為了正確合成這類圖片並在螢幕上顯示,控制器必須把每個平面圖像轉換成線性色域 (「degamma」),然後混合這些圖片,再轉換回 sRGB 和螢幕支援的像素格式。
EDID
擴充顯示識別資料 (EDID) 是一種 VESA 中繼資料格式,用於向影片來源說明裝置的功能。許多螢幕都會透過 EDID 公開顏色格式和輸出功能。//src/graphics/display/lib/edid 可用來剖析這項資訊,並調整 Gamma 和色彩校正程式設計,以達到更高的擬真度。
EDID 的欄位不一定適用於所有顯示裝置,例如投影機沒有實體尺寸。
鏗鏘
管線是顯示控制器作業理論中的常見抽象層。每個管道都專門產生單輸出映像檔,以供在通訊埠上進行編碼。管道的最終輸出是採用適當格式的像素資料,並採用 Gamma 編碼以供目標顯示。透過這種區隔責任區分,驅動程式可以用相同的最終圖像做為多個編碼器/通訊埠組合的輸入內容,以支援顯示「鏡像」模式。
連接埠
通訊埠是實體連接器,可用來連接一或多個螢幕。通訊埠類型範例包括 DisplayPort、HDMI、DVI 和 VGA。部分通訊埠規格允許透過串連 (例如 DisplayPort 的多串流傳輸 (MST)) 連接多個螢幕。
編碼器
編碼器會將管道的輸出圖片轉換成由一或多個通訊埠傳送的信號。舉例來說,HDMI 連接器採用 8b/10b 編碼的 TMDS。
顯示時間
顯示時間是一組間隔,說明如何將特定面板的信號編碼。雖然這些間隔與顯示模式相關 (解析度、色彩深度、刷新率),但也包含不會傳送像素內容的信號部分,例如從廣播電視開始那天就已保留的垂直空白間隔。本文將說明時間的細節。