Skip to content

[Bug]: Android 14 HDR 模式选择可能忽略可用的低刷新率 HDR 模式 #492

Description

@Yundi339

问题描述

Android 14+ 会先按 Display.Mode.supportedHdrTypes 筛选候选显示模式,但 DisplayModeManager.selectBestDisplayMode() 的比较基准仍固定为当前 display.mode,即使当前模式不支持用户请求的 HDR 类型。

当当前模式是高刷新 SDR、设备另有低刷新 HDR 模式时,HDR 候选会因为“刷新率降低”被过滤,最终继续使用当前非 HDR 模式,后续又根据该模式判定 HDR 不受支持。

典型场景

  • 当前模式:4K 120 Hz,supportedHdrTypes 不含 HDR10/HDR10+
  • 可用候选:4K 60 Hz,支持 HDR10/HDR10+
  • 串流设置:60 FPS、HDR10 或 HDR10+
  • 默认不允许主动降低刷新率的帧同步策略

bestMode 初始为 120 Hz 当前模式;60 Hz HDR 候选满足 HDR 类型,但因 refreshRateReduced 被跳过。之后 HdrCapabilityHelper 检查当前模式并关闭 HDR。

影响范围

Android 14+ 且不同显示模式具有不同 HDR 类型的电视、盒子、手机或外接显示器。用户明确选择 HDR,设备也存在可用 HDR 模式,但客户端可能错误回退 SDR。

期望行为

只要启用了 HDR 类型筛选,模式选择的基准和候选都应来自支持所请求 HDR 类型的集合;刷新率和分辨率优化应在这个集合内部进行。

建议修复

  • acceptableHdrTypes 非空且存在匹配模式时,不要用不匹配 HDR 类型的当前模式作为 bestMode 初始值。
  • 如果当前模式本身匹配,可以继续优先使用当前模式。
  • 增加覆盖“120 Hz SDR 当前模式 + 60 Hz HDR 候选 + 60 FPS 串流”的模式选择测试。

来源

代码审查发现,首次引入于 #483

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions