SDR 和 HDR 组合

本页面将介绍针对混合 SDR 和 HDR 组合的 SDR 内容调暗功能的要求、配置和验证。

Android 13 引入了以下功能,改进了对在屏幕上同时呈现 SDR 和 HDR 组合的支持:

  • 将 HDR 亮度色调映射到 SDR 兼容的范围。

    使用 libtonemap,可以在硬件混合渲染器 (HWC)、SurfaceFlinger 和应用之间实现一致的色调映射。原始设备制造商 (OEM) 可以实现自己的色调映射曲线,以便在供应商和框架组件之间共享。

  • 在与 HDR 内容同时呈现时,调暗屏幕上的 SDR 内容。

    在屏幕上呈现 HDR 内容时,系统会调高屏幕亮度以适应 HDR 内容的扩大亮度范围。随着屏幕亮度的增加,屏幕中显示的任何 SDR 内容也会无缝变暗,以使 SDR 内容的感知亮度不会发生变化。OEM 可以将内置屏幕配置为在与 HDR 内容一起呈现时调暗屏幕上的 SDR 内容。

OEM 要求

如需通过 HDR 内容调暗使用经过改进的 HDR 和 SDR 内容合成,请遵循以下要求:

  • 实现 HWC 的 AIDL 版本,该版本支持在设备的颜色流水线中实现硬件加速调暗。如需了解如何实现所需功能,请参阅适用于 HWC 的 AIDL

  • 为了精准调暗 HWC 中的硬件叠加层,需要特定的硬件来扩缩叠加层的线性光。没有足够硬件的实现需要由 SurfaceFlinger 将组合推迟到 GPU,从而导致耗电过快并且调暗质量可能不佳。

  • 设备必须至少支持一种由 Display.getHdrCapabilities 报告的 HDR 技术。

配置

混合 SDR 和 HDR 内容组合功能可根据内置屏幕设备特性进行配置,以便在电池续航时间、烧屏和内容保真度之间权衡取舍。

如需启用和调整改进后的组合,可通过架构位于 display-device-config.xsd 中的显示配置来完成。在设置屏幕配置时,以下这些新的关键元素非常重要:

  • sdrHdrRatioMap 元素用于启用 SDR 调暗功能,并定义一个查询表 (LUT),后者用于将要显示的 HDR 屏幕亮度映射到 SDR 白点(当屏幕上有 HDR 内容时)。

    如果定义了 sdrHdrRatioMap,那么 DisplayManagerService 会在控制屏幕亮度的过程中将所需的 SDR 白点传达给 SurfaceFlinger,以便 SurfaceFlinger 可以将每个层的适当调暗比率发送给 HWC。

    如果未定义 sdrHdrRatioMap,即使 HWC 实现支持 SDR 调暗,系统也不会启用 SDR 调暗。

  • minimumHdrPercentOfScreen 元素的值介于 0 到 100 之间,用于控制何时允许开启面板的高亮度模式。在 Android 13 中,此阈值可调,以便在更多情况(例如画中画场景)下启用高亮度模式。旧版 AOSP 已将此值更正为 50%。

如需了解屏幕配置的关键元素,请查看以下代码块:

<displayConfiguration>
    ...
    <highBrightnessMode>
        ...
        <!--Percentage of the screen that must be covered by HDR layers until high brightness mode is enabled.
        <minimumHdrPercentOfScreen>...</minimumHdrPercentOfScreen>
        <!--sdrHdrRatioMap, backed by spline, must have at least two entries -->
        <sdrHdrRatioMap>
            <point>
                <sdrNits>...</sdrNits>
                <hdrRatio>...</hdrRatio>
            </point>
            <point>
                <sdrNits>...</sdrNits>
                <hdrRatio>...</hdrRatio>
            </point>
            <!--More interpolation points may be added –->
            ...
        </sdrHdrRatioMap>
        ...
    </highBrightnessMode>
    ...
</displayConfiguration>

注意事项

启用色调映射和 SDR 内容调暗功能可能会导致以下情况:

  • 当 SDR 内容元素变暗时,设备上播放的 HDR 内容的保真度可能会提高。

  • 在以下场景中,电池续航时间可能会缩短:

    • 将调暗操作推迟到 GPU 的 HWC 实现可能会导致 GPU 使用量增加。

    • 如果屏幕配置支持使用较低的阈值来启用高亮度模式,则可能会增加以较高亮度使用屏幕时的耗电量。

  • 由于在高亮度模式下使用屏幕的时间增加,屏幕健康状况会受到影响,这可能会带来长期问题,例如烧屏。

验证

OEM 可以使用 HWC 测试套件中包含的 VTS 测试来检查调暗正确性验证输入调暗比率

针对此功能的验证取决于设备,因此没有任何 CTS 或 GTS 测试可支持此功能。

OEM 必须运行手动测试来验证调暗 SDR 元素的图片质量是否可接受。OEM 可以通过 SurfaceView 播放设备支持的 HDR 标准的内容,以验证与 HDR 内容一起播放的所有 SDR 元素都不会过亮。

问题

调暗 SDR 图片可能会导致 black crush,或原始图片的较暗区域出现信息丢失。这是因为较深颜色值收合在一组较小的深色代码上。

如果调暗会导致不可接受的 black crush,相应的实现过程必须实现抖动算法,这种算法会将噪声注入最终图片中,以便减少条带效果。

如果 HWC 实现无法在颜色流水线中的适当位置抖动图片,则必须请求 SurfaceFlinger 在 GPU 上应用调暗和抖动。

实现还可以调整 sdrHdrRatioMap 的值以限制 SDR 元素的调暗程度。调暗到极低的亮度需要使用 GPU,这样可以提高图片质量,但可能会缩短电池续航时间。