对于运行 Android 13 及更高版本的设备,Android 通过动态范围配置文件支持 10 位相机输出,相机客户端可以将这些配置文件配置为流配置的一部分。设备制造商可以添加对 10 位动态范围配置文件的支持,例如 HLG10、HDR 10、HDR 10+ 和 Dolby Vision。
借助 10 位相机输出支持,相机客户端可以通过调用 getSupportedProfiles
来发现设备支持的 10 位动态范围配置文件。然后,框架会返回 DynamicRangeProfiles
的实例,其中包含有关支持的动态范围配置文件的信息,以及(如果可用)捕获请求限制。HLG10
配置文件必须受支持。建议的动态范围配置文件在 REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE
字段中列出。
相机客户端可以通过调用 setDynamicRangeProfile
来配置流组合。如需详细了解强制性输出流组合,请参阅常规捕获中的10 位输出附加保证配置表。
要求
为了支持 10 位相机输出,设备必须配备支持 10 位或更高位深的相机传感器以及相应的 ISP 支持。如需详细了解与 10 位支持相关的兼容性要求,请参阅 CDD 中的7.5. 相机部分。
实现
为了提供对 10 位相机输出的支持,设备制造商必须执行以下 Camera AIDL HAL 集成
- 在相机功能中添加
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT
。 - 使用所有支持的动态范围配置文件及其约束的位图填充
ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP
。HLG10
配置文件必须受支持。您还必须添加建议的动态范围配置文件,以告知相机客户端最佳支持的格式。 - 确保在使用 P010 格式的流或支持实现定义的格式 (
ImageFormat.PRIVATE
) 的流的流配置期间,支持动态范围配置文件值。 - 根据动态范围配置文件,在通知相机服务之前,设置已处理的 Gralloc 4 缓冲区的静态或动态元数据缓冲区。
如需详细了解 Camera HAL 中 10 位相机输出的信息,请参阅 metadata_definitions.xml
中的以下内容
DYNAMIC_RANGE_TEN_BIT
availableDynamicRangeProfilesMap
的 HAL 详细信息recommendedTenBitDynamicRangeProfile
10BIT_OUTPUT
如需参考支持 10 位相机输出的 Camera HAL 实现,请参阅 /hardware/google/camera/devices/EmulatedCamera/hwl
。
验证
为了验证您对 10 位相机输出的实现并确保第三方应用可以启用该功能,我们建议执行以下三个阶段的验证。
为了直观地验证 10 位相机输出,假定设备支持显示 HDR(1000+ 尼特显示屏),并且视频观看应用(例如,Google 相册)支持播放 HDR 视频。
测试 API 功能的正确性
为了测试 10 位相机输出的 API 功能正确性,请运行以下 CTS、相机 ITS 和 VTS 测试
hardware/interfaces/camera/provider/aidl/vts/
:测试基本发现、配置和流式传输,并检查是否存在所需的 HDR 元数据。tests/camera/src/android/hardware/camera2/cts/
:确保相机按照 AOSP API 规范运行。cts/apps/CameraITS
:确认使用 HDR 配置文件时,常规视频行为是一致的。具体测试为tests/scene4/test_video_aspect_ratio_and_crop.py
。
比较原生相机和第三方应用
我们强烈建议确保使用第三方应用捕获 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 更暗。如果调整选项导致无法避免这种情况,请确保第三方应用的行为与原生相机应用的行为一致。