10 位相机输出

对于搭载 Android 13 及更高版本的设备,Android 支持通过动态范围配置文件进行 10 位相机输出,相机客户端可在输出流配置过程中配置该配置文件。设备制造商可以添加对 HLG10、HDR 10、HDR 10+ 和杜比视界等 10 位动态范围配置文件的支持。

有了 10 位相机输出支持,相机客户端就可以通过调用 getSupportedProfiles 发现设备支持的 10 位动态范围配置文件。随后,框架会返回一个 DynamicRangeProfiles 实例,其中包含有关支持的动态范围配置文件的信息,以及拍摄请求限制条件(如有)。必须支持 HLG10 配置文件。推荐的动态范围配置文件列于 REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE 字段中。

相机客户端可以调用 setDynamicRangeProfile 来配置输出流组合。如需详细了解强制性输出流组合,请参阅常规拍摄中的“10 位输出的其他有保证配置”表。

要求

如需支持 10 位相机输出,设备必须具备 10 位或更高色深的相机传感器以及相应的 ISP 支持。如需详细了解对 10 位支持的相关兼容性要求,请参阅 CDD 中的 7.5. 摄像头部分。

实现

若要支持 10 位相机输出,设备制造商必须执行以下相机 AIDL HAL 集成:

  • 在相机功能中添加 ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT
  • 使用所有支持的动态范围配置文件及其限制条件的位图填充 ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP。必须支持 HLG10 配置文件。您还必须添加一个推荐的动态范围配置文件,用于告知相机客户端最佳的支持格式。
  • 确保在对采用 P010 格式的输出流进行输出流配置期间支持该动态范围配置文件值,或支持由实现定义的格式 (ImageFormat.PRIVATE)。
  • 根据动态范围配置文件,在通知相机服务之前设置已处理 Gralloc 4 缓冲区的静态或动态元数据缓冲区。

如需详细了解相机 HAL 中的 10 位相机输出,请参阅 metadata_definitions.xml 中的以下内容:

如需查看支持 10 位相机输出的相机 HAL 参考实现,请参阅 /hardware/google/camera/devices/EmulatedCamera/hwl

验证

若要验证 10 位相机输出实现并确保第三方应用可启用该功能,建议执行以下三个阶段的验证。

对于 10 位相机输出的视觉验证,假定设备支持显示 HDR(1000 尼特以上的屏幕),且视频观看应用(例如 Google 相册)支持播放 HDR 视频。

测试 API 功能正确性

为了测试 10 位相机输出的 API 功能正确性,请运行以下 CTS 测试、相机 ITS 测试和 VTS 测试:

比较原生相机和第三方应用

我们强烈建议确保使用第三方应用拍摄 10 位视频的结果与使用原生相机应用拍摄的结果哪怕不能完全相同也要相似。这意味着,应将曝光、动态范围和色彩等微调选择从原生应用沿用到第三方应用。如需验证设备上支持 10 位相机输出的第三方应用的视频录制行为,请使用 GitHub 上的 Camera2Video 示例应用。由于传感器、面板、观看条件和供应商偏好设置可发生变化,以下准则用于说明可以目视辨别的 HDR 方面但没有给出目标数字。

建议用于进行比较的场景

如需对原生相机应用和第三方应用进行比较,请在原生相机应用和 Camera2Video 示例应用中使用多个不同场景拍摄视频。以下是建议用于进行比较的场景:

  • 中等光线到弱光的场景,有蜡烛或明亮的小灯等可形成显著亮度范围的明亮物体。此场景用于确认自动曝光行为和动态范围。
  • 明亮的户外场景,色彩鲜艳并有能产生明亮高光的反光物体,例如汽车上的铬合金保险杠。此场景用于确认能否呈现具有更明亮高光的明亮场景。
  • 普通低动态范围场景,例如住宅或办公室中的室内自然场景。此场景用于确认不太极端的光照条件下的行为是否符合预期。

对于所有场景,我们都建议包含人物和人脸,用于验证曝光、色彩和肤色处理。减少镜头间的差异可以简化连续比较。

比较标准动态范围和高动态范围

为了确保能够感知到使用 10 位动态范围配置文件优于标准动态范围配置文件,请将使用 SDR(无 HDR 配置文件)拍摄的视频与 HDR 视频进行比较,确认能够在拍摄中表现出 HDR 的关键方面。如需比较 SDR 和 HDR,请使用 Camera2Video 示例应用建议使用的场景对原生相机应用和第三方应用进行比较。

以下是在建议使用的场景中需要验证的关键方面。由于支持 HDR 的显示面板具有不同的亮度(以尼特或流明为衡量单位),因此下面给出的数字仅用作示例:

  • 在中等光线到弱光的场景中,蜡烛或小灯的明亮高光在 HDR 片段中以屏幕的最大亮度(可能高达 1000 尼特)呈现,而在 SDR 片段中则以 SDR 的最大亮度(约 100 尼特)呈现。在 HDR 片段中,明亮的高光应从屏幕上透出,让用户感知到该场景真正的动态范围。与 HDR 片段相比,SDR 片段应当显得反差较小、亮度较低。
  • 在明亮的输出场景中,根据设备的微调选择,HDR 片段的屏幕亮度会显示出与 SDR 片段的明显差异。在 HDR 片段中,整个场景的屏幕亮度(具体取决于动态余量)应更高(例如高达 800 尼特),而铬合金保险杠等明亮高光部位的屏幕亮度甚至更高(差不多达到屏幕最大亮度)。
  • 在普通低动态范围室内拍摄中,HDR 和 SDR 片段的色彩和色调相似,只是 HDR 拍摄的亮度可能高于 SDR 拍摄。HDR 的亮度不应低于 SDR。如果因为微调选择而导致不可能做到这一点,请确保第三方应用的行为与原生相机应用的行为一致。