相机版本支持

本页面详细介绍了相机 HAL、API 和相关兼容性测试套件 (CTS)测试中的版本差异。本页面还介绍了为强化和保护 Android 7.0 中的相机框架而做出的多项架构变更、Android 8.0 中切换到 Treble 的情况,以及供应商为在其相机实现中支持这些变更而必须进行的更新。

术语

本页面使用了以下术语

Camera API1
Android 4.4 及更低版本设备上的应用级相机框架,通过 android.hardware.Camera 类公开。
Camera API2
Android 5.0 及更高版本设备上的应用级相机框架,通过 android.hardware.camera2 软件包公开。
相机 HAL
SoC 供应商实现的摄像头模块层。应用级公共框架构建于摄像头 HAL 之上。
Camera HAL3.1
Android 4.4 发布的摄像头设备 HAL 版本。
Camera HAL3.2
Android 5.0 发布的摄像头设备 HAL 版本。
Camera API1 CTS
在 Camera API1 之上运行的一组摄像头 CTS 测试。
Camera API2 CTS
在 Camera API2 之上运行的另一组摄像头 CTS 测试。
Treble
通过新的供应商接口将供应商实现(设备特定的、由芯片制造商编写的较低级别软件)与 Android 操作系统框架分离。
HIDL
Treble 引入的 HAL 接口定义语言,用于指定 HAL 及其用户之间的接口。
VTS
与 Treble 一起引入的 供应商测试套件

Camera API

Android 包括以下摄像头 API。

Camera API1

Android 5.0 弃用了 Camera API1,随着新的平台开发专注于 Camera API2,Camera API1 将继续被逐步淘汰。但是,淘汰期将很长,Android 版本将在一段时间内继续支持 Camera API1 应用。具体而言,对以下各项的支持将继续:

  • 适用于应用的 Camera API1 接口。构建于 Camera API1 之上的摄像头应用应像在运行较低 Android 版本的设备上一样工作。
  • Camera HAL 版本。包括对 Camera HAL1.0 的支持。

Camera API2

Camera API2 框架向应用公开了更低级别的摄像头控制,包括高效的零拷贝连拍/流式传输流程以及对曝光、增益、白平衡增益、色彩转换、降噪、锐化等的逐帧控制。有关详细信息,请观看 Google I/O 视频概述

Android 5.0 及更高版本包括 Camera API2;但是,运行 Android 5.0 及更高版本的设备可能不支持所有 Camera API2 功能。应用可以通过 Camera API2 接口查询的 android.info.supportedHardwareLevel 属性报告以下支持级别之一:

  • LEGACY:这些设备通过 Camera API2 接口向应用公开的功能与通过 Camera API1 接口向应用公开的功能大致相同。传统框架代码在概念上将 Camera API2 调用转换为 Camera API1 调用;传统设备不支持 Camera API2 功能,例如逐帧控制。
  • LIMITED:这些设备支持某些 Camera API2 功能(但并非全部),并且必须使用 Camera HAL 3.2 或更高版本。
  • FULL:这些设备支持 Camera API2 的所有主要功能,并且必须使用 Camera HAL 3.2 或更高版本以及 Android 5.0 或更高版本。
  • LEVEL_3:这些设备支持 YUV 重新处理和 RAW 图像捕获,以及额外的输出流配置。
  • EXTERNAL:这些设备类似于 LIMITED 设备,但有一些例外;例如,某些传感器或镜头信息可能未报告或帧速率不太稳定。此级别用于外部摄像头,例如 USB 网络摄像头。

各个功能通过 Camera API2 接口中的 android.request.availableCapabilities 属性公开。FULL 设备需要 MANUAL_SENSORMANUAL_POST_PROCESSING 功能以及其他功能。RAW 功能即使对于 FULL 设备也是可选的。LIMITED 设备可以通告这些功能的任何子集,包括无子集。但是,必须始终定义 BACKWARD_COMPATIBLE 功能。

设备的受支持硬件级别以及其支持的特定 Camera API2 功能作为以下功能标志提供,以允许 Google Play 过滤 Camera API2 摄像头应用。

  • android.hardware.camera.hardware_level.full
  • android.hardware.camera.capability.raw
  • android.hardware.camera.capability.manual_sensor
  • android.hardware.camera.capability.manual_post_processing

CTS 要求

运行 Android 5.0 及更高版本的设备必须通过 Camera API1 CTS、Camera API2 CTS 和 CTS 验证程序摄像头测试。

不具备 Camera HAL3.2 实现且无法支持完整 Camera API2 接口的设备仍然必须通过 Camera API2 CTS 测试。但是,设备在 Camera API2 LEGACY 模式下运行(其中 Camera API2 调用在概念上映射到 Camera API1 调用),因此会自动跳过与 Camera API1 之外的功能或能力相关的任何 Camera API2 CTS 测试。

在传统设备上,运行的 Camera API2 CTS 测试使用现有的公共 Camera API1 接口和功能,而没有新的要求。暴露的错误(以及导致 Camera API2 CTS 失败的错误)是设备现有 Camera HAL 中已存在的错误,因此会被现有的 Camera API1 应用发现。我们预计不会出现许多此类错误(但是,必须修复任何此类错误才能通过 Camera API2 CTS 测试)。

VTS 要求

运行 Android 8.0 及更高版本且具有绑定器化 HAL 实现的设备必须通过摄像头 VTS 测试

摄像头框架强化

为了加强媒体和摄像头框架的安全性,Android 7.0 将摄像头服务移出 mediaserver。从 Android 8.0 开始,每个绑定器化 Camera HAL 都在与摄像头服务分离的进程中运行。供应商可能需要在摄像头 HAL 中进行更改,具体取决于所使用的 API 和 HAL 版本。以下部分详细介绍了 HAL1 和 HAL3 的 AP1 和 AP2 中的架构更改以及一般要求。

API1 的架构更改

API1 视频录制可能会假定摄像头和视频编码器位于同一进程中。在 HAL3 上使用 API1 时,其中摄像头服务使用 BufferQueue 在进程之间传递缓冲区,无需供应商更新

  • HAL3,其中摄像头服务使用 BufferQueue 在进程之间传递缓冲区,无需供应商更新

    Android 7.0 camera and media
stack in API1 on HAL3

    图 1. HAL3 上 API1 中的 Android 7.0 摄像头和媒体堆栈

  • HAL1 支持在视频缓冲区中传递元数据,供应商必须更新 HAL 以使用 kMetadataBufferTypeNativeHandleSource(Android 7.0 中不再支持 kMetadataBufferTypeCameraSource。)

    Android 7.0 camera and media
stack in API1 on HAL1

    图 2. HAL1 上 API1 中的 Android 7.0 摄像头和媒体堆栈

API2 的架构更改

对于 HAL1 或 HAL3 上的 API2,BufferQueue 传递缓冲区,因此这些路径继续有效。HAL1 上 API2 的 Android 7.0 架构不受 cameraservice 移动的影响,无需供应商更新

  • HAL1 不受 cameraservice 移动的影响,无需供应商更新
  • HAL3 影响,但无需供应商更新

    Android 7.0 camera and
media stack in API2 on HAL3

    图 3. HAL3 上 API2 中的 Android 7.0 摄像头和媒体堆栈

其他要求

为加强媒体和摄像头框架安全性而进行的架构更改包括以下其他设备要求。

  • 常规。由于 IPC,设备需要额外的带宽,这可能会影响时间敏感的摄像头用例,例如高速视频录制。供应商可以通过运行 android.hardware.camera2.cts.PerformanceTest 和 Google Camera 应用进行 120/240 FPS 高速视频录制来测量实际影响。设备还需要少量额外的 RAM 来创建新进程。
  • 在视频缓冲区中传递元数据仅限 HAL1)。如果 HAL1 在视频缓冲区中存储元数据而不是真实的 YUV 帧数据,则 HAL 必须使用 kMetadataBufferTypeNativeHandleSource 作为元数据缓冲区类型,并在视频缓冲区中传递 VideoNativeHandleMetadata。(Android 7.0 上不再支持 kMetadataBufferTypeCameraSource。)使用 VideoNativeHandleMetadata,摄像头和媒体框架能够通过正确地序列化和反序列化本机句柄在进程之间传递视频缓冲区。
  • 缓冲区句柄地址并不总是存储相同的缓冲区仅限 HAL3)。对于每个捕获请求,HAL3 都会获取缓冲区句柄的地址。HAL 无法使用地址来识别缓冲区,因为在 HAL 返回缓冲区后,地址可能会存储另一个缓冲区句柄。您必须更新 HAL 以使用缓冲区句柄来识别缓冲区。例如,HAL 接收缓冲区句柄地址 A,其中存储缓冲区句柄 A。在 HAL 返回缓冲区句柄 A 后,缓冲区句柄地址 A 在下次 HAL 接收时可能会存储缓冲区句柄 B。
  • 更新 cameraserver 的 SELinux 策略。如果设备特定的 SELinux 策略为 mediaserver 提供了运行摄像头的权限,则必须更新 SELinux 策略以为 cameraserver 提供正确的权限。我们不建议为 cameraserver 复制 mediaserver 的 SELinux 策略(因为 mediaserver 和 cameraserver 通常需要系统中的不同资源)。Cameraserver 应仅具有执行摄像头功能所需的权限,并且应删除 mediaserver 中任何不必要的摄像头相关权限。
  • Camera HAL 和 cameraserver 之间的分离。Android 8.0 及更高版本还在与 cameraserver 不同的进程中分离了绑定器化 Camera HAL。IPC 通过 HIDL 定义的 接口进行。

验证

对于所有包含摄像头并运行 Android 7.0 的设备,请通过运行 Android 7.0 CTS 来验证实现。尽管 Android 7.0 不包含验证摄像头服务更改的新 CTS 测试,但如果您未进行上述更新,则现有 CTS 测试将失败。

对于所有包含摄像头并运行 Android 8.0 及更高版本的设备,请通过运行 VTS 来验证供应商实现。

Camera HAL 版本历史记录

有关评估 Android Camera HAL 的可用测试列表,请参阅 Camera HAL 测试清单

Android 10

Android 10 引入了以下更新。

Camera API

相机 HAL

以下 Camera HAL 版本在 Android 10 中更新。

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics:支持逻辑摄像头设备的物理摄像头 ID 的静态摄像头信息。请参阅 多摄像头支持
  • isStreamCombinationSupported:此方法支持公共 API,可帮助客户端查询是否支持会话配置。请参阅 用于查询流组合的 API

ICameraDeviceSession

  • isReconfigurationNeeded:一种方法,用于告知摄像头框架是否需要为可能的新会话参数值进行完整的流重新配置。这有助于避免不必要的摄像头重新配置延迟。请参阅 会话重新配置查询
  • HAL 缓冲区管理 API:这些 API 允许摄像头 HAL 仅在需要时从摄像头框架请求缓冲区,而不是将每个捕获请求与其在整个摄像头管道中的关联缓冲区耦合,从而可能显着节省内存。
    • signalStreamFlush:向 HAL 发出信号,指示摄像头服务即将执行 configureStreams_3_5,并且 HAL 必须返回指定流的所有缓冲区。
    • configureStreams_3_5:类似于 ICameraDevice3.4.configureStreams,但此外,还提供了 streamConfigCounter 计数器,用于检查 configureStreams_3_5signalStreamFlush 调用之间的竞争条件。

ICameraDeviceCallback 的更新

  • requestStreamBuffers:摄像头 HAL 调用的同步回调,用于向摄像头服务器请求缓冲区。请参阅 requestStreamBuffers
  • returnStreamBuffers:摄像头 HAL 用于将输出缓冲区返回到摄像头服务器的同步回调。请参阅 returnStreamBuffers

3.4

以下键已添加到 Android 10 中的摄像头元数据。

  • 图像格式
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • 摄像头元数据标记
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • 功能
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT 的值
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • 可用的动态深度流配置
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • 可用的 HEIC 流配置
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT

摄像头模块

以下摄像头模块版本在 Android 10 中更新。

2.5

  • 添加了 notifyDeviceStateChange 方法,供设备在物理变化(例如折叠)影响摄像头和路由时通知摄像头 HAL。

2.4

  • 使用 API 级别 29 或更高级别启动的设备必须为 isTorchModeSupported 报告 true

Android 9

Android 9 版本引入了以下对摄像头 API2 和 HAL 接口的更新。

Camera API

  • 引入了多摄像头 API,以更好地支持具有多个朝向相同方向的摄像头的设备,从而实现散景和无缝变焦等功能。这允许应用将设备上的多个摄像头视为一个逻辑单元(逻辑摄像头)。捕获请求也可以发送到由一个逻辑摄像头包含的各个摄像头设备。请参阅 多摄像头支持
  • 引入了会话参数。会话参数是可以导致修改时出现严重处理延迟的可用捕获参数的子集。如果客户端在捕获会话初始化期间传递其初始值,则可以缓解这些成本。请参阅 会话参数
  • 为应用级稳定和效果添加了光学防抖 (OIS) 数据键。请参阅 STATISTICS_OIS_SAMPLES
  • 添加了外部闪光灯支持。请参阅 CONTROL_AE_MODE_ON_EXTERNAL_FLASH
  • CAPTURE_INTENT 中添加了运动跟踪意图。请参阅 CONTROL_CAPTURE_INTENT_MOTION_TRACKING
  • 弃用了 LENS_RADIAL_DISTORTION,并添加了 LENS_DISTORTION 来代替它。
  • CaptureRequest 中添加了失真校正模式。请参阅 DISTORTION_CORRECTION_MODE
  • 在受支持的设备上添加了对外部 USB/UVC 摄像头的支持。请参阅 INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL

相机 HAL

3.4

ICameraDeviceSession 的更新

ICameraDeviceCallback 的更新

3.3

以下键已添加到 Android 9 中的摄像头元数据。

  • 功能
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
  • 摄像头元数据标记
    • ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
    • ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
    • ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
    • ANDROID_LENS_POSE_REFERENCE
    • ANDROID_LENS_DISTORTION
    • ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
    • ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
    • ANDROID_STATISTICS_OIS_DATA_MODE
    • ANDROID_STATISTICS_OIS_TIMESTAMPS
    • ANDROID_STATISTICS_OIS_X_SHIFTS
    • ANDROID_STATISTICS_OIS_Y_SHIFTS

Android 8.0

Android 8.0 版本引入了 Treble。借助 Treble,供应商 Camera HAL 实现必须是绑定器化的。Android 8.0 还包含以下对摄像头服务的关键增强功能:

  • 共享 Surface:使多个 Surface 能够共享相同的 OutputConfiguration
  • 用于自定义摄像头模式的系统 API
  • onCaptureQueueEmpty

有关这些功能的更多信息,请参见以下各节。

共享 Surface

此功能仅允许一组缓冲区驱动两个输出,例如预览和视频编码,从而降低功耗和内存消耗。为了支持此功能,设备制造商需要确保其摄像头 HAL 和 gralloc HAL 实现可以创建供多个不同使用者(例如硬件合成器/GPU 和视频编码器)而不是仅一个使用者使用的 gralloc 缓冲区。摄像头服务将使用者使用标志传递给摄像头 HAL 和 gralloc HAL;他们需要分配正确类型的缓冲区,或者摄像头 HAL 需要返回错误,表明不支持这种使用者组合。

有关更多详细信息,请参阅 enableSurfaceSharing 开发者文档。

用于自定义摄像头模式的系统 API

公共摄像头 API 定义了两种操作模式:正常模式和受约束的高速录制模式。它们具有相当不同的语义;例如,高速模式一次最多只能限制为两个特定输出。各种 OEM 都表示有兴趣定义其他用于硬件特定功能的自定义模式。在底层,模式只是一个传递给 configure_streams 的整数。请参阅: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams

此功能包括一个系统 API 调用,OEM 摄像头应用可以使用它来启用自定义模式。这些模式必须从整数值 0x8000 开始,以避免与将来添加到公共 API 的模式冲突。

为了支持此功能,OEM 仅需将新模式添加到其 HAL 中,由传递到 configure_streams 的此整数触发,然后让其自定义摄像头应用使用系统 API。

方法名称为 android.hardware.camera2.CameraDevice#createCustomCaptureSession。请参阅: frameworks/base/core/java/android/hardware/camera2/CameraDevice

onCaptureQueueEmpty

此 API 的目的是通过尽可能保持请求队列为空来减少诸如缩放之类的控制更改的延迟。onCaptureQueueEmpty 不需要 HAL 工作;它纯粹是框架侧的添加。想要利用它的应用需要向该回调添加侦听器并做出适当的响应。通常,这是通过向摄像头设备发送另一个捕获请求来实现的。

Camera HIDL 接口

Camera HIDL 接口是对 Camera HAL 接口的全面修订,它使用稳定的 HIDL 定义的 API。在最新的传统版本 3.4 和 2.4(对于摄像头模块)中引入的所有功能和摄像头功能也是 HIDL 定义的一部分。

3.4

对支持的元数据的少量添加以及对 data_space 支持的更改

  • 如果支持 RAW_OPAQUE 格式,则添加 ANDROID_SENSOR_OPAQUE_RAW_SIZE 静态元数据作为强制性元数据。
  • 如果支持任何 RAW 格式,则添加 ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE 静态元数据作为强制性元数据。
  • 使用 dataspace 编码的版本 0 定义,将 camera3_stream_t data_space 字段切换为更灵活的定义。
  • 可用于 HALv3.2 或更高版本的一般元数据添加
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

3.3

扩展功能 HAL 的少量修订

  • OPAQUE 和 YUV 重新处理 API 更新。
  • 对深度输出缓冲区的基本支持。
  • data_space 字段添加到 camera3_stream_t
  • 将 rotation 字段添加到 camera3_stream_t
  • 将 camera3 流配置操作模式添加到 camera3_stream_configuration_t

3.2

扩展功能 HAL 的少量修订

  • 弃用 get_metadata_vendor_tag_ops。请改用 camera_common.h 中的 get_vendor_tag_ops
  • 弃用 register_stream_buffers。框架在 process_capture_request 中提供给 HAL 的所有 gralloc 缓冲区可能随时都是新的。
  • 添加部分结果支持。process_capture_result 可以在完整结果可用之前多次调用,并带有可用结果的子集。
  • 将手动模板添加到 camera3_request_template。应用可以使用此模板直接控制捕获设置。
  • 重新设计双向和输入流规范。
  • 更改输入缓冲区返回路径。缓冲区在 process_capture_result 而不是 process_capture_request 中返回。

3.1

扩展功能 HAL 的少量修订

  • configure_streams 将使用者使用标志传递给 HAL。
  • 刷新调用以尽可能快地丢弃所有正在进行的请求/缓冲区。

3.0

扩展功能 HAL 的首次修订

  • 自 ABI 完全不同以来,主要版本更改。与 2.0 相比,所需的硬件功能或操作模型没有变化。
  • 重新设计了输入请求和流队列接口:框架调用 HAL,下一个请求和流缓冲区已出队。包括同步框架支持,这是高效实现所必需的。
  • 将触发器移到请求中,将大多数通知移到结果中。
  • 将框架中的所有回调整合到一个结构中,并将所有设置方法整合到一个 initialize() 调用中。
  • 将流配置设为单个调用,以简化流管理。双向流取代了 STREAM_FROM_STREAM 构造。
  • 旧版/受限硬件设备的受限模式语义。

2.0

扩展功能 HAL 的初始版本 (Android 4.2) [camera2.h]

  • 足以实现现有的 android.hardware.Camera API。
  • 允许在摄像头服务层中使用 ZSL 队列。
  • 尚未针对任何新功能进行测试,例如手动捕获控制、Bayer RAW 捕获、RAW 数据的重新处理等。

1.0

初始 Android 摄像头 HAL (Android 4.0) [camera.h]

  • 从 C++ CameraHardwareInterface 抽象层转换而来。
  • 支持 android.hardware.Camera API。

摄像头模块版本历史记录

本节包含摄像头硬件模块的模块版本信息,基于 camera_module_t.common.module_api_version。两个最高有效十六进制数字表示主版本,两个最低有效数字表示次版本。

2.4

此摄像头模块版本添加了以下 API 更改

  1. 手电筒模式支持。框架可以为任何具有闪光灯单元的摄像头设备打开手电筒模式,而无需打开摄像头设备。摄像头设备访问闪光灯单元的优先级高于摄像头模块;如果通过模块接口启用了手电筒模式,则打开摄像头设备会关闭手电筒模式。当存在任何资源冲突时(例如,调用 open() 以打开摄像头设备),摄像头 HAL 模块必须通过手电筒模式状态回调通知框架手电筒模式已关闭。
  2. 外部摄像头(例如,USB 热插拔摄像头)支持。API 更新指定仅当摄像头连接且准备好用于外部热插拔摄像头时,摄像头静态信息才可用。当摄像头状态不是 CAMERA_DEVICE_STATUS_PRESENT 时,对获取静态信息的调用是无效调用。框架完全依赖设备状态更改回调来管理可用的外部摄像头列表。
  3. 摄像头仲裁提示。添加了对显式指示可以同时打开和使用的摄像头设备数量的支持。为了指定设备的有效组合,应始终在 get_camera_info 调用返回的 camera_info 结构中设置 resource_costconflicting_devices 字段。
  4. 模块初始化方法。在加载 HAL 模块后由摄像头服务调用,以允许 HAL 进行一次性初始化。它在调用任何其他模块方法之前调用。

2.3

此摄像头模块版本添加了打开旧版摄像头 HAL 设备支持。如果同一设备可以支持多个设备 API 版本,则框架可以使用它将摄像头设备作为较低设备 HAL 版本 HAL 设备打开。标准硬件模块打开调用 (common.methods->open) 继续使用最新支持的版本打开摄像头设备,这也是 camera_info_t.device_version 中列出的版本。

2.2

此摄像头模块版本添加了来自模块的供应商标记支持,并弃用了旧的 vendor_tag_query_ops,该标记以前只能通过打开设备访问。

2.1

此摄像头模块版本添加了对摄像头 HAL 模块异步回调框架的支持,该回调用于通知框架有关摄像头模块状态的更改。提供有效 set_callbacks() 方法的模块必须至少报告此版本号。

2.0

报告此版本号的摄像头模块实现了摄像头模块 HAL 接口的第二个版本。可通过此模块打开的摄像头设备可以支持摄像头设备 HAL 接口的版本 1.0 或版本 2.0。camera_infodevice_version 字段始终有效;如果 device_version 字段为 2.0 或更高版本,则 camera_infostatic_camera_characteristics 字段有效。

1.0

报告这些版本号的摄像头模块实现了初始摄像头模块 HAL 接口。可通过此模块打开的所有摄像头设备仅支持摄像头设备 HAL 的版本 1。camera_infodevice_versionstatic_camera_characteristics 字段无效。此模块及其设备只能支持 android.hardware.Camera API。