显示控制器的作用是什么?

显示控制器 (DC) 负责将一个或多个源图片合成为屏幕输出信号。某些 DC 能够并行生成多个输出信号,例如驱动多个监视器。本文档简要介绍了常见的硬件组件,以帮助您了解可用于驱动程序开发的简短数据表(未加注释)。

用于合成一个输出图像的硬件子集通常称为“管道”。竖线由输入平面、色彩校正和混合/合成阶段组成。

每个平面都有一张源图片,这些图片具有自己的尺寸、位置、像素格式颜色空间灰度系数校正和混合行为。必须对管道进行编程,以便正确解码、转换和校正色彩,并将这些平面混合成最终显示图像。

编码器使用最终显示图像,并将原始像素数据与时间生成器结合起来,以编码到连接器端口(DisplayPort、HDMI、DVI 等)的正确电信号中。

平面类型

显示
与“屏幕尺寸”一样大小且正常混合的平面。
叠加层
叠加层是一种使用色度键控透明度的平面。这种平面类型的典型用例是在视频播放之上渲染媒体控件,软件会在(主要是)静态内容中打一个孔,使硬件加速的视频解码器可以将内容转储到叠加层下方的第二个平面中。
精灵
如今,许多驱动程序开发者使用“精灵”这一术语来指代任何并非主要内容的平面。过去,精灵用于对重复使用静态图片进行紧凑式编码。这种类型在 80 年代个人计算机和 80 至 90 年代视频游戏机等内存非常有限的环境中非常流行。
光标:
光标平面通常较小,并且提供的颜色空间选项有限。它们用于在静态内容上叠加光标。大多数软件都通过调整此平面的位置来操控该平面,并且仅在极少数情况下会更改其源图像。

颜色空间

颜色空间由颜色模型(例如 RGB 或 CMYK)和映射函数组成,用于将该颜色空间中的值转换为参考空间(例如 CIELAB 或 CIEXYZ)。

数字图像处理和显示中使用的颜色空间大致可分为两种类型:物理/线性和感知/伽马编码。线性空间中的颜色可以以物理准确的方式组合和转换,例如,将值加倍意味着“光照强度的两倍”。感知颜色空间旨在模仿非线性人类视觉感知,因此将值加倍意味着“亮度的两倍”。

像素格式

像素格式和颜色空间经常被混淆,这会导致颜色准确性 bug。以 RGB_888_24 像素格式为例:每个像素的格式是(R、G、B)字节的三元组,但您不知道这个三元组是 sRGB、Adobe RGB 还是线性 RGB 颜色空间中的一个点。如果合并来自不同颜色空间的两个值(例如将它们相加),生成的像素值在物理上可能不正确。

必须对 DC 进行编程,以便将每个平面的图像转换为线性颜色空间,对其进行合成,然后将生成的图像转换为适合输出设备的颜色空间。HDMI 规范要求显示器至少支持 sRGB。

伽马校正

如需了解详细说明,请参阅 John Novak 的这篇精彩博文

大多数静态数字图像都采用 sRGB 颜色空间,这也是计算机显示器最广泛支持的格式。但是,为了正确合成此类图像以便在显示器上显示,控制器必须将每个平面图像转换为线性颜色空间(“degamma”),然后对其进行混合,然后再转换回 sRGB(“regamma”)和监视器支持的像素格式。

EDID

扩展屏幕标识数据 (EDID) 是一种 VESA 元数据格式,供显示设备用来描述其向视频源的功能。许多显示屏都通过 EDID 公开其颜色格式和输出功能。//src/graphics/display/lib/edid 可用于解析此信息并调整灰度系数和色彩校正编程,以实现更高保真度颜色。

并非所有 EDID 字段都适用于所有显示设备,例如,投影仪没有物理尺寸。

铿锵

管道是显示控制器操作理论中的常见抽象。每个管道专门用于生成单个输出图像,这些图像将进行编码以便在端口上传输。管道的最终输出是针对目标显示屏采用适当格式且经过伽马编码的像素数据。这种职责分离让驱动程序可以使用同一最终图像作为多个编码器/端口对的输入,从而支持显示“镜像”。

端口

端口是物理连接器,可用于连接一个或多个显示屏。示例端口类型包括 DisplayPortHDMIDVIVGA。某些端口规范允许通过菊花链连接多个屏幕,例如 DisplayPort 的多流传输 (MST)。

编码器

编码器将管道的输出图像转换为将通过一个或多个端口传输的信号。例如,HDMI 连接器使用 8b/10b 编码的 TMDS

显示时间

显示时间是一组间隔,它们共同描述了如何对特定面板的信号进行编码。虽然这些间隔与显示模式(分辨率、色深、刷新率)相关,但也包括信号中不传递像素内容的部分,例如从广播电视早期开始保留的垂直消隐间隔这篇文章介绍了有关时间安排的详细信息。