4. 色彩管理基础:色度学基础、色域与色深
色彩管理是现代 DRM 显示驱动中连接用户空间颜色意图与硬件物理输出的核心桥梁。本章从色度学基本概念出发,系统讲解色域标准(sRGB、Adobe RGB、DCI-P3)与色深(8bit、10bit、12bit)的技术原理,为后续实现驱动级色彩校正与 VBlank 同步色彩更新奠定理论基础。
4.1 色度学基础:从物理光到数字坐标
人眼视网膜含有三种视锥细胞(L、M、S),分别对长波(红)、中波(绿)、短波(蓝)敏感。色度学利用这一特性,将任意颜色表示为三个刺激值的线性组合。
4.1.1 CIE 1931 标准色度系统
国际照明委员会(CIE)在 1931 年基于人眼视觉实验定义了标准色度观察者函数 \(\bar{x}(\lambda)\)、\(\bar{y}(\lambda)\)、\(\bar{z}(\lambda)\)。对于光谱功率分布 \(S(\lambda)\),三刺激值计算如下:
X = ∫ S(λ) · x̄(λ) dλ
Y = ∫ S(λ) · ȳ(λ) dλ
Z = ∫ S(λ) · z̄(λ) dλ
其中 Y 直接对应亮度。通过归一化得到色度坐标 (x, y):
x = X / (X + Y + Z)
y = Y / (X + Y + Z)
z = 1 - x - y
drm_mode_create_blob 传递色彩空间描述符(如 struct drm_color_lut),驱动需将用户空间的色度坐标映射到硬件查找表(LUT)的输入范围。理解 CIE xy 坐标是正确配置硬件色彩引擎的前提。
4.1.2 色度图与色域可视化
下图展示了 CIE 1931 xy 色度图,其中马蹄形边界为单色光谱轨迹,内部区域为所有可见色。三角形区域代表典型显示设备的色域。
4.2 色域标准:sRGB、Adobe RGB、DCI-P3
色域(Color Gamut)是设备能够再现的颜色集合。不同应用场景对色域有不同要求,驱动开发人员必须理解各标准的基色坐标、白点与 Gamma 曲线。
| 标准 | 红基色 (x, y) | 绿基色 (x, y) | 蓝基色 (x, y) | 白点 | Gamma | 覆盖面积 (CIE 1931) |
|---|---|---|---|---|---|---|
| sRGB | (0.6400, 0.3300) | (0.3000, 0.6000) | (0.1500, 0.0600) | D65 | ≈2.2 | ≈35% |
| Adobe RGB | (0.6400, 0.3300) | (0.2100, 0.7100) | (0.1500, 0.0600) | D65 | 2.2 | ≈50% |
| DCI-P3 | (0.6800, 0.3200) | (0.2650, 0.6900) | (0.1500, 0.0600) | D65 或 DCI 白 | 2.6 | ≈45% |
4.2.1 sRGB:Web 与消费电子的基准
sRGB 由 HP 与 Microsoft 于 1996 年制定,是当前最广泛使用的色域标准。其 Gamma 近似 2.2,与 CRT 显示器的电光转换特性一致。DRM 驱动中,若未明确指定色彩空间,默认采用 sRGB。
4.2.2 Adobe RGB:专业影像的扩展
Adobe RGB 在 sRGB 基础上扩展了绿色区域,覆盖更大范围的青绿色,适合印刷与摄影后期。驱动实现时需注意:Adobe RGB 的绿色基色坐标 (0.21, 0.71) 比 sRGB 更靠近光谱轨迹,对硬件 DAC 精度要求更高。
4.2.3 DCI-P3:数字影院的广色域标准
DCI-P3 由数字电影倡导组织(DCI)定义,覆盖约 45% 的 CIE 1931 色域,比 sRGB 大 25%。其 Gamma 为 2.6,白点可选 D65 或 DCI 原生白点 (0.314, 0.351)。现代高端显示器与 HDR 内容广泛采用 DCI-P3。
struct drm_color_ctm(色彩变换矩阵)实现:
/* sRGB 到 DCI-P3 的近似转换矩阵(线性空间) */
static const struct drm_color_ctm srgb_to_dcip3 = {
.matrix = {
0.8225, 0.1775, 0.0000,
0.0332, 0.9668, 0.0000,
0.0171, 0.0724, 0.9105
}
};
4.3 色深:8bit、10bit、12bit 的技术内涵
色深(Bit Depth)决定每个颜色通道可区分的亮度级数。色深越高,量化步长越小,色阶过渡越平滑,伪轮廓(Banding)越少。
| 色深 | 每通道级数 | 总颜色数 | 量化步长(归一化) | 典型应用 |
|---|---|---|---|---|
| 8bit | 256 | 16.7M | 1/255 ≈ 0.00392 | sRGB 显示器、Web 内容 |
| 10bit | 1024 | 1.07B | 1/1023 ≈ 0.00098 | HDR 显示器、专业监视器 |
| 12bit | 4096 | 68.7B | 1/4095 ≈ 0.00024 | 电影制作、高端医疗影像 |
4.3.1 色深与亮度分辨率的物理意义
在 Gamma 编码空间中,8bit 在暗部区域的相对亮度步长可达 0.4%,而 10bit 可降至 0.1% 以下。对于 HDR 内容(峰值亮度 1000 cd/m² 以上),8bit 在暗部会产生肉眼可见的色阶断层。
4.3.2 DRM 驱动中的色深配置
DRM 驱动通过 drm_connector 的 display_info.bpc 字段报告面板支持的色深。用户空间可通过 drm_mode_connector_set_property 设置 "max bpc" 属性来请求更高色深。
/* 驱动初始化时报告面板色深能力 */
static int panel_get_modes(struct drm_connector *connector)
{
struct drm_display_info *info = &connector->display_info;
/* 面板支持 10bit 色深 */
info->bpc = 10;
info->color_formats = DRM_COLOR_FORMAT_RGB444;
/* 填充 EDID 或固定 modes */
drm_connector_update_edid_property(connector, NULL);
return 1;
}
4.3.3 色深与传输接口的匹配
不同色深需要匹配对应的传输带宽。以 4K@60Hz 为例:
- 8bit RGB:需要约 12.54 Gbps 带宽(HDMI 1.4 可支持)
- 10bit RGB:需要约 15.68 Gbps 带宽(需 HDMI 2.0 或 DP 1.2)
- 12bit RGB:需要约 18.82 Gbps 带宽(需 HDMI 2.1 或 DP 1.4)
drm_dp_atomic_check 在 atomic check 阶段验证链路带宽。
4.4 色深与色域的协同:色彩流水线架构
下图展示了 DRM 驱动中从用户空间帧缓冲区到面板显示的完整色彩流水线,涵盖色深转换、色域映射与 Gamma 校正。
4.5 色深与色域在 VBlank 同步中的更新策略
色彩参数的更新(如 Gamma LUT、CTM 矩阵)必须在 VBlank 期间完成,以避免画面撕裂(tearing)或色彩闪烁。DRM 驱动通过 drm_crtc_commit 机制保证原子更新:
- 准备阶段(atomic check):验证新色彩参数是否在硬件能力范围内,计算所需 VBlank 时间。
- 提交阶段(atomic commit):将新参数写入硬件寄存器,但暂不生效。
- VBlank 触发:在垂直消隐期中断服务程序中,切换色彩寄存器为新的值。
- 完成回调:通知用户空间色彩更新已完成。
drm_atomic_helper_commit 的异步提交模式可减少色彩切换延迟。
4.6 本章小结
- 色度学基础:CIE 1931 xy 色度图是色彩管理的数学基础,三刺激值
XYZ是色域转换的桥梁。 - 三大色域标准:sRGB(Web 基准)、Adobe RGB(印刷扩展)、DCI-P3(影院广色域),各有不同的基色坐标与 Gamma 曲线。
- 色深决定量化精度:8bit(256 级)、10bit(1024 级)、12bit(4096 级),高色深是 HDR 与专业色彩的必要条件。
- 驱动实现要点:通过
display_info.bpc报告面板能力,使用drm_color_ctm实现色域映射,在 VBlank 期间原子更新色彩参数。