4、Dolby Vision 元数据详解:RPU、L1/L2/L3 与 Trim Passes
Dolby Vision 是当前消费电子与专业影院中应用最广的 动态 HDR 标准之一。其核心在于 RPU(Reference Processing Unit)——一个携带在视频流 SEI 中的元数据容器,承载了从内容创作到显示设备的所有色调映射与颜色转换指令。本章深入拆解 RPU 的结构、L1/L2/L3 三级元数据、Trim Passes 以及 Color Mapping Matrix(CMM)的作用与解析方法。
4.1 RPU(Reference Processing Unit)结构总览
RPU 是 Dolby Vision 元数据的载体,通常以 NAL 单元形式嵌入在 HEVC 或 AV1 视频流中。其内部结构采用 TLV(Type-Length-Value) 格式,便于解析器逐段读取。一个典型的 RPU 包含以下主要字段:
| 字段 | 长度(bits) | 说明 |
|---|---|---|
| rpu_type | 8 | 标识 RPU 类型(0 = 全帧,1 = 增量帧) |
| vdr_rpu_profile | 8 | Profile 版本(如 Profile 5/8.1/8.4) |
| vdr_rpu_level | 8 | Level 等级(决定最大亮度与色域) |
| num_ext_blocks | 8 | 扩展块数量(用于厂商自定义数据) |
| ext_blocks[] | 可变 | 扩展块列表(包含 L1/L2/L3 元数据) |
| rpu_data_mapping | 可变 | 颜色映射矩阵(CMM)参数 |
| trim_pass_metadata | 可变 | Trim Passes 参数(用于 SDR 或低亮度映射) |
rpu_type 和 vdr_rpu_profile,跳过不支持的 Profile。Profile 5 使用 ICtCp 颜色空间,Profile 8.1 使用 YCbCr,两者 CMM 解析逻辑不同。
4.2 L1 元数据:全局亮度与色域边界
L1 元数据定义了内容的 全局统计特征,用于显示设备判断当前场景的亮度与色域范围。主要参数包括:
- Luminance Parameters:
max_content_light_level (MaxCLL):整部影片的最大像素亮度(cd/m²)max_frame_average_light_level (MaxFALL):整部影片的帧平均亮度上限min_pq/max_pq:当前场景在 PQ 曲线上的最小/最大亮度编码值
- Color Primaries:
- 母版色域边界(如 DCI-P3 或 BT.2020)
- 白点坐标(通常为 D65)
4.3 L2 元数据:色调映射曲线(Tone Mapping)
L2 元数据定义了从母版亮度到目标显示亮度的 映射曲线。这是 RPU 中最复杂的部分,包含多个分段曲线参数:
| 参数 | 说明 | 典型值范围 |
|---|---|---|
tone_mapping_curve_num | 曲线段数量(通常 1~3 段) | 1 ~ 3 |
targeted_system_display_maximum_luminance | 目标显示设备最大亮度(cd/m²) | 100 ~ 10000 |
base_curve_anchor | 基础曲线锚点(亮度拐点) | 0.0 ~ 1.0 |
base_curve_offset | 曲线偏移量(调整暗部/亮部) | -0.5 ~ 0.5 |
base_curve_power | 曲线幂次(控制对比度) | 0.5 ~ 2.0 |
L2 映射的核心公式(简化):
// 伪代码:L2 色调映射
float map_luminance(float L_in, L2_Metadata *l2) {
float L_norm = (L_in - l2->min_pq) / (l2->max_pq - l2->min_pq);
float L_mapped = pow(L_norm, l2->base_curve_power);
L_mapped = L_mapped * (1.0 - l2->base_curve_offset) + l2->base_curve_offset;
return L_mapped * l2->targeted_system_display_maximum_luminance;
}
4.4 L3 元数据与 Trim Passes:场景级微调
L3 元数据(Trim Passes)是 Dolby Vision 实现 场景级精确映射 的关键。它允许内容创作者针对不同显示亮度等级(如 100 cd/m² SDR、600 cd/m² HDR、1000 cd/m² HDR)分别指定微调参数。每个 Trim Pass 包含:
- target_display_index: 目标显示亮度等级(0 = SDR, 1 = 600 cd/m², 2 = 1000 cd/m², 3 = 2000 cd/m², 4 = 4000 cd/m²)
- trim_slope: 斜率调整(对比度微调)
- trim_offset: 偏移调整(亮度偏移)
- trim_power: 幂次调整(伽马微调)
- trim_chroma_weight: 色度权重(饱和度微调)
- trim_saturation_gain: 饱和度增益
4.5 Color Mapping Matrix (CMM):颜色空间转换
CMM 是 RPU 中负责 颜色空间转换 的矩阵集合。Dolby Vision 母版通常使用 ICtCp 颜色空间(Profile 5)或 YCbCr(Profile 8.1),而显示设备需要输出到 RGB 或 YCbCr。CMM 定义了:
- 从 ICtCp 到 RGB 的 3x3 矩阵(含色域映射)
- 从 YCbCr 到 RGB 的 3x3 矩阵(含色域映射)
- 色域缩放系数(将母版色域映射到目标色域)
- 交叉色项系数(用于色域外颜色修正)
CMM 矩阵格式示例(ICtCp → RGB):
// CMM 3x3 矩阵 (定点数, Q16 格式)
int32_t cmm[3][3] = {
{ 0x1A2B, 0x3C4D, 0x5E6F }, // R = a*I + b*Ct + c*Cp
{ 0x7F80, 0x9A1B, 0xC2D3 }, // G = d*I + e*Ct + f*Cp
{ 0xE4F5, 0x0607, 0x0809 } // B = g*I + h*Ct + i*Cp
};
4.6 嵌入式解析优化要点
在嵌入式显示子系统中,RPU 解析与 CMM 应用需注意以下优化策略:
| 优化项 | 方法 | 收益 |
|---|---|---|
| RPU 缓存 | 缓存最近 10 帧的 RPU 元数据,避免重复解析 | 减少 CPU 负载 30% |
| L2 LUT 预计算 | 将 L2 曲线预计算为 1024 点 16-bit LUT | 消除实时 pow() 运算 |
| CMM 定点化 | 使用 Q16 定点矩阵乘法,避免浮点 | 提升 2~3 倍性能 |
| Trim Pass 选择 | 根据 EDID 读取设备亮度,提前选择 Trim Pass | 减少运行时判断 |
| 增量 RPU 处理 | 仅处理 rpu_type=1 的增量帧,跳过全帧 | 降低带宽占用 |