4. HDR 元数据定义:静态元数据(SMPTE ST 2086)与动态元数据(SMPTE ST 2094)的结构与字段解析

HDR 元数据是连接内容制作与显示设备的“色彩与亮度契约”。没有元数据,显示设备无法准确还原创作者意图。本章深入解析两大核心标准:SMPTE ST 2086(静态元数据)与 SMPTE ST 2094(动态元数据),涵盖其结构、字段含义及适用场景。

核心概念:静态元数据一次性描述整部内容的显示特性;动态元数据按场景或帧序列调整,实现更精准的亮度与色彩映射。

4.1 静态元数据:SMPTE ST 2086

SMPTE ST 2086 定义了一组在内容生命周期内不变的元数据字段,主要用于 HDR10 格式。它提供“主显示器”的色域、白点、亮度范围等信息,帮助下游设备理解内容的原始 mastering 环境。

4.1.1 字段结构

字段名称 字节数 描述 示例值
display_primaries 16 红、绿、蓝三基色在 CIE 1931 xy 色度图中的坐标(x,y 各 2 字节) R: (0.680, 0.320), G: (0.265, 0.690), B: (0.150, 0.060)
white_point 4 白点坐标(x, y),通常为 D65 (0.3127, 0.3290)
max_display_mastering_luminance 4 主显示器最大亮度(单位:cd/m²,0.0001 cd/m² 精度) 1000.0000 cd/m²
min_display_mastering_luminance 4 主显示器最小亮度(单位:cd/m²,0.0001 cd/m² 精度) 0.0050 cd/m²
max_content_light_level (MaxCLL) 4 内容中任何单帧的最大亮度(单位:cd/m²) 4000 cd/m²
max_frame_average_light_level (MaxFALL) 4 内容中任何单帧的平均亮度最大值(单位:cd/m²) 800 cd/m²
关键理解:MaxCLL 和 MaxFALL 是内容分析统计值,而非 mastering 显示器参数。它们帮助显示设备预判内容的亮度峰值与整体亮度分布,避免 Tone Mapping 时过度压缩或丢失细节。

4.1.2 静态元数据传递流程

在 HDMI 或 DisplayPort 传输中,ST 2086 元数据嵌入在 HDR Infoframe(HDMI 2.0a+)或 Dynamic Range and Mastering InfoFrame 中。接收端解析后,用于初始化显示设备的全局映射曲线。

静态元数据(ST 2086)传递与解析流程 内容制作 封装 / 复用 传输接口 显示设备解析 MaxCLL / MaxFALL 统计 HDMI Infoframe 全局 Tone Mapping 曲线初始化

4.2 动态元数据:SMPTE ST 2094

SMPTE ST 2094 是一系列标准(2094-10/20/30/40),允许元数据按场景或帧序列动态更新。它解决了静态元数据无法适应内容亮度剧烈变化的问题,是 Dolby Vision、HDR10+ 等格式的基础。

4.2.1 标准家族与格式对应

标准编号 对应格式 核心特点
ST 2094-10 Dolby Vision 基于 RPU(Reference Processing Unit),逐场景传递 L1/L2/L3/L6/L8 元数据
ST 2094-20 HDR10+ 基于 SEI 消息,逐场景传递亮度、色域映射参数
ST 2094-30 SL-HDR1/2/3 (Technicolor) 面向 SDR 兼容分发,包含反向 Tone Mapping 参数
ST 2094-40 Philips HDR 侧重于环境光自适应与峰值亮度管理

4.2.2 动态元数据核心字段(以 ST 2094-10 为例)

Dolby Vision 的 RPU 元数据包含多个层级(Level),每个 Level 承载不同维度的动态信息:

  • L1 (Level 1): 逐场景的亮度范围描述,包括 min_pq、max_pq、avg_pq,用于指导显示设备的 Tone Mapping 曲线动态调整。
  • L2 (Level 2): 色域映射参数,包含 targeted_system_display_maximum_luminance 和色域压缩系数,确保不同色域设备间的色彩一致性。
  • L3 (Level 3): 辅助映射曲线(Trim Pass),允许创作者为特定亮度范围(如 1000/4000/10000 cd/m²)微调亮度、对比度、饱和度。
  • L6 (Level 6): 高动态范围元数据扩展,包含 active_area 定义,用于非矩形显示区域适配。
  • L8 (Level 8): 保留字段,用于未来扩展或厂商自定义参数。
注意:动态元数据并非每帧都更新,而是按场景切换点(Scene Cut)触发。编码器需要在视频分析阶段检测场景变化,并生成对应的元数据包。更新频率过高会增加带宽开销,过低则失去动态调整意义。

4.2.3 动态元数据传递架构

动态元数据在传输层通常通过 SEI NAL 单元(H.265/HEVC)或 RPU 数据包(独立于视频编码流)传递。接收端解码器提取后,与视频帧同步送入显示处理管线。

动态元数据(ST 2094)传递架构 视频编码帧 动态元数据 复用 / 封装 传输层 解复用 / 同步 显示处理管线 SEI / RPU 数据包 场景级 Tone Mapping 更新

4.3 静态 vs 动态元数据对比

对比维度 静态元数据(ST 2086) 动态元数据(ST 2094)
更新粒度 整部内容一次 逐场景或逐帧序列
带宽开销 极低(约 24 字节) 中等(每场景约 100-500 字节)
映射精度 全局统一,暗场或高亮场景可能过曝或欠曝 场景自适应,保留更多细节
设备兼容性 所有 HDR 显示设备均支持 需要专用解码器与处理管线
典型格式 HDR10 Dolby Vision, HDR10+
创作者控制力 低(仅描述 mastering 环境) 高(可逐场景微调亮度、色域、对比度)
实践建议:在流媒体分发场景中,建议同时携带静态元数据作为 fallback,确保不支持动态元数据的旧设备仍能获得基础 HDR 体验。动态元数据则作为增强层,提升高端显示设备的画质表现。

4.4 元数据解析与校验要点

显示设备在接收元数据后,需要进行严格的解析与校验,避免错误元数据导致显示异常:

  1. 范围检查:色度坐标必须在 [0, 1] 范围内;亮度值必须为正数,且 max ≥ min。
  2. 一致性校验:MaxCLL 不应超过 max_display_mastering_luminance 的 10 倍(经验规则),否则可能为异常值。
  3. 时序同步:动态元数据必须与对应视频帧精确同步,偏移超过 1 帧可能导致闪烁或映射错误。
  4. 默认值处理:当元数据缺失时,设备应使用预设默认值(如 D65 白点、1000 cd/m² 最大亮度)进行映射,避免黑屏或错误显示。
// 伪代码:静态元数据解析示例
typedef struct {
    uint16_t display_primaries[3][2]; // 3 基色 x,y
    uint16_t white_point[2];
    uint32_t max_display_mastering_luminance;
    uint32_t min_display_mastering_luminance;
    uint32_t max_content_light_level;
    uint32_t max_frame_average_light_level;
} ST2086_Metadata;

bool validate_st2086(ST2086_Metadata *md) {
    // 检查亮度范围
    if (md->max_display_mastering_luminance <= md->min_display_mastering_luminance) {
        return false;
    }
    // 检查色度坐标范围
    for (int i = 0; i < 3; i++) {
        if (md->display_primaries[i][0] > 50000 || md->display_primaries[i][1] > 50000) {
            return false; // 超出 0.5 定点表示范围
        }
    }
    return true;
}
工程提示:在 SoC 显示驱动中,元数据解析通常放在视频解码器的后处理阶段(DPB 输出后),与 Tone Mapping 算法模块紧密耦合。建议使用双缓冲机制存储动态元数据,避免场景切换时的撕裂或闪烁。