Android 13 或更高版本中添加的相机功能只能通过 AIDL 相机 HAL 接口使用 没有HIDL的事情了

https://source.android.com/docs/core/camera/camera3?hl=zh-cn

AIDL 相机 HAL

对于运行 Android 13 或更高版本的设备,相机框架包括对 AIDL 相机 HAL 的支持。相机框架还支持 HIDL 相机 HAL,但在 Android 13 或更高版本中添加的相机功能只能通过 AIDL 相机 HAL 接口使用。要在升级到 Android 13 或更高版本的设备上实现此类功能,设备制造商必须将其 HAL 流程从使用 HIDL 摄像头接口迁移到 AIDL 摄像头接口。

要了解 AIDL 的优势,请参阅用于 HAL 的 AIDL 。

实现 AIDL 相机 HAL

有关 AIDL 相机 HAL 的参考实现,请参阅hardware/google/camera/common/hal/aidl_service/ 。

AIDL 相机 HAL 规范位于以下位置:

对于迁移到 AIDL 的设备,设备制造商可能需要根据代码结构修改Android SELinux 策略 (sepolicy)和 RC 文件。

验证 AIDL 相机 HAL

要测试您的 AIDL 相机 HAL 实施,请确保设备通过所有 CTS 和 VTS 测试。 Android 13 引入了 AIDL VTS 测试VtsAidlHalCameraProvider_TargetTest.cpp 。

https://source.android.com/docs/core/architecture/aidl/aidl-hals?hl=zh-cn#motivation

HAL 的 AIDL

bookmark_border

Android 11 引入了在 Android 中将 AIDL 用于 HAL 的功能。这使得在没有 HIDL 的情况下实现部分 Android 成为可能。尽可能将 HAL 转换为专门使用 AIDL(当上游 HAL 使用 HIDL 时,必须使用 HIDL)。

使用 AIDL 在框架组件(例如system.img中的组件)和硬件组件(例如vendor.img中的组件)之间进行通信的 HAL 必须使用稳定的 AIDL。但是,要在一个分区内进行通信,例如从一个 HAL 到另一个,对使用的 IPC 机制没有限制。

动机

AIDL 的存在时间比 HIDL 长,并且在许多其他地方使用,例如在 Android 框架组件之间或在应用程序中。现在 AIDL 具有稳定性支持,可以使用单个 IPC 运行时实现整个堆栈。 AIDL 还具有比 HIDL 更好的版本控制系统。

  • 使用单一 IPC 语言意味着只有一件事需要学习、调试、优化和保护。
  • AIDL 支持接口所有者的就地版本控制:
    • 所有者可以将方法添加到接口的末尾,或将字段添加到 parcelables。这意味着多年来版本代码更容易,而且年复一年的成本更小(类型可以就地修改,不需要为每个接口版本添加额外的库)。
    • 扩展接口可以在运行时而不是在类型系统中附加,因此无需将下游扩展重新定位到较新版本的接口上。
  • 现有的 AIDL 接口可以在其所有者选择稳定它时直接使用。以前,必须在 HIDL 中创建接口的完整副本。

AIDL/HIDL 的主要区别

使用 AIDL HAL 或使用 AIDL HAL 接口时,请注意与编写 HIDL HAL 相比的差异。

  • AIDL 语言的语法更接近 Java。 HIDL 语法类似于 C++。
  • 所有 AIDL 接口都有内置的错误状态。不要创建自定义状态类型,而是在接口文件中创建常量状态整数,并在 CPP/NDK 后端中使用EX_SERVICE_SPECIFIC并在 Java 后端中使用ServiceSpecificException 。请参阅错误处理
  • 发送活页夹对象时,AIDL 不会自动启动线程池。它们必须手动启动(参见线程管理)。
  • AIDL 不会因未经检查的传输错误而中止(HIDL Return aborts on unchecked errors)。
  • AIDL 只能为每个文件声明一种类型。
  • 除了输出参数之外,AIDL 参数还可以指定为 in/out/inout(没有“同步回调”)。
  • AIDL 使用 fd 作为原始类型而不是句柄。
  • HIDL 使用主要版本进行不兼容的更改,使用次要版本进行兼容的更改。在 AIDL 中,向后兼容的更改是就地完成的。 AIDL 没有明确的主要版本概念;相反,它被合并到包名称中。例如,AIDL 可能使用包名bluetooth2 。
  • AIDL 默认不继承实时优先级。 setInheritRt函数必须用于每个绑定器以启用实时优先级继承。

,

Android 11 引入了在 Android 中将 AIDL 用于 HAL 的功能。这使得在没有 HIDL 的情况下实现部分 Android 成为可能。尽可能将 HAL 转换为专门使用 AIDL(当上游 HAL 使用 HIDL 时,必须使用 HIDL)。

使用 AIDL 在框架组件(例如system.img中的组件)和硬件组件(例如vendor.img中的组件)之间进行通信的 HAL 必须使用稳定的 AIDL。但是,要在一个分区内进行通信,例如从一个 HAL 到另一个,对使用的 IPC 机制没有限制。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值