本页面将介绍针对混合 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,这样可以提高图片质量,但可能会缩短电池续航时间。