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 驱动中,用户空间通过 drm_mode_create_blob 传递色彩空间描述符(如 struct drm_color_lut),驱动需将用户空间的色度坐标映射到硬件查找表(LUT)的输入范围。理解 CIE xy 坐标是正确配置硬件色彩引擎的前提。

4.1.2 色度图与色域可视化

下图展示了 CIE 1931 xy 色度图,其中马蹄形边界为单色光谱轨迹,内部区域为所有可见色。三角形区域代表典型显示设备的色域。

CIE 1931 xy 色度图与典型色域 sRGB Adobe RGB DCI-P3 D65 380nm 780nm 色域三角形顶点为红、绿、蓝基色色度坐标,面积越大表示可显示颜色越丰富

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。

色域转换矩阵示例: 从 sRGB 到 DCI-P3 的线性转换需要 3×3 矩阵乘法。驱动中通常使用 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)
驱动开发避坑: 当用户空间请求 10bit 色深但传输链路带宽不足时,驱动应自动降级为 8bit 或启用 DSC(显示流压缩)。切勿直接返回错误导致黑屏,应通过 drm_dp_atomic_check 在 atomic check 阶段验证链路带宽。

4.4 色深与色域的协同:色彩流水线架构

下图展示了 DRM 驱动中从用户空间帧缓冲区到面板显示的完整色彩流水线,涵盖色深转换、色域映射与 Gamma 校正。

DRM 色彩流水线:色深与色域处理 用户空间 FB 8/10/12bit 色深转换 dithering / truncation 色域映射 CTM 矩阵 Gamma LUT 面板输出(物理显示) 最终色深 = min(流水线色深, 面板 bpc, 链路带宽限制) 色彩流水线关键说明 • 色深转换:高位深到低位深需使用空间抖动(dithering)避免色阶断层 • 色域映射:通过 drm_color_ctm 实现不同色域标准间的线性变换 • Gamma LUT:用户空间通过 drm_mode_create_blob 上传 1D/3D LUT,驱动在 VBlank 期间更新

4.5 色深与色域在 VBlank 同步中的更新策略

色彩参数的更新(如 Gamma LUT、CTM 矩阵)必须在 VBlank 期间完成,以避免画面撕裂(tearing)或色彩闪烁。DRM 驱动通过 drm_crtc_commit 机制保证原子更新:

  1. 准备阶段(atomic check):验证新色彩参数是否在硬件能力范围内,计算所需 VBlank 时间。
  2. 提交阶段(atomic commit):将新参数写入硬件寄存器,但暂不生效。
  3. VBlank 触发:在垂直消隐期中断服务程序中,切换色彩寄存器为新的值。
  4. 完成回调:通知用户空间色彩更新已完成。
性能优化建议: 对于 10bit 或 12bit 的 Gamma LUT(通常为 1024 或 4096 个条目),建议在驱动初始化时预分配 DMA 缓冲区,避免在 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 期间原子更新色彩参数。