本页介绍了混合 SDR 和 HDR 合成中 SDR 内容调暗功能的要求、配置和验证。
Android 13 通过引入以下功能,改进了对同时在屏幕上呈现 SDR 和 HDR 合成的支持
将色调映射 HDR 亮度转换为 SDR 兼容范围。
使用
libtonemap
,可以使硬件合成器 (HWC)、SurfaceFlinger 和应用之间的色调映射保持一致。OEM 可以实现自己的色调映射曲线,以便在供应商组件和框架组件之间共享。在与 HDR 内容同时呈现时,调暗屏幕上的 SDR 内容。
当 HDR 内容在屏幕上时,屏幕亮度会增加,以适应 HDR 内容增加的亮度范围。屏幕上的任何 SDR 内容也会随着屏幕亮度的增加而无缝调暗,以便 SDR 内容的感知亮度不会发生变化。OEM 可以配置其内置显示屏,以便在与 HDR 内容一起呈现时调暗屏幕上的 SDR 内容。
OEM 要求
如需通过 SDR 内容调暗功能使用改进的 HDR 和 SDR 内容合成,请遵循以下要求
实现 HWC 的 AIDL 版本,其中包括对设备颜色管道中硬件加速调暗功能的支持。请参阅用于 HWC 的 AIDL,了解如何实现所需的功能。
在 HWC 中准确调暗硬件叠加层需要特定的硬件来缩放叠加层的线性光。没有足够硬件的实现方案需要通过 SurfaceFlinger 将合成推迟到 GPU,从而导致电池耗电和可能的低质量调暗。
设备必须支持
Display.getHdrCapabilities
报告的至少一项 HDR 技术。
配置
可以根据内置显示设备特性配置混合 SDR 和 HDR 内容合成功能,以便在电池续航时间、老化和内容保真度之间建立权衡。
启用和调整改进的合成是通过显示屏配置完成的,该配置的架构位于 display-device-config.xsd
中。以下新键元素对于设置显示屏配置非常重要
sdrHdrRatioMap
元素启用 SDR 调暗功能,并定义用于映射要显示的 HDR 屏幕亮度与屏幕上有 HDR 内容时的 SDR 白点的查找表 (LUT)。如果定义了
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 可以使用 VTS 测试(包含在 HWC 的测试套件中)来检查调光正确性,并验证输入调光比率。
此功能的验证取决于设备,因此没有 CTS 或 GTS 测试来支持它。
OEM 必须运行手动测试来验证调暗的 SDR 元素的图像质量是否可接受。OEM 可以播放设备通过 SurfaceView
支持的 HDR 标准的内容,以验证与 HDR 内容一起播放的任何 SDR 元素是否不会变得过亮。
问题
调暗 SDR 图像可能会导致黑阶碾压,或原始图像中较暗区域的信息丢失。这是由于较暗的颜色值折叠到较小的一组暗码上造成的。
导致无法接受的黑阶碾压的调光实现必须实现抖动算法,该算法将噪声注入到最终图像中,以减少条带效应。
无法在颜色管道中的适当位置抖动图像的 HWC 实现必须请求 SurfaceFlinger 在 GPU 上应用调光和抖动。
实现还可以调整 sdrHdrRatioMap
的值,以限制 SDR 元素的调光量。调光到非常低的亮度级别需要使用 GPU,这可以提高图像质量,但可能会缩短电池续航时间。