笔记整理自:
https://source.android.google.cn/devices/camera/versioning
https://blog.csdn.net/u013961718/article/details/87302254
https://www.cnblogs.com/blogs-of-lxl/p/10651611.html
首先提出问题:相机随着需求的发展需要开发新的功能,这时候我们应用就需要使用更新版本的API、HAL、android版本,接着就涉及到这些软件之间的版本兼容的问题
- 兼容关系
API1 = 4.4android以下 = HAL3.1
API2 = 5.0android以上 = HAL3.2
应用级框架都是基于兼容的HAL开发的 - 5.5以上的android版本支持API2的级别查询属性:android.info.supportedHardwareLevel
- android IPC:
1) 系统中进程之间需要通信,比如linux中就有共享内存、信号量、消息队列、套接字、命名管道
2) android中IPC方式是binder通信方式,binder实现方法是在进程中创建线程池,用于处理其他进程的IPC和本地进程消息
3) binder是基于client - server模式, - android camera框架:
1) 主要包含三个进程:app进程、camera server进程、HAL(provider)进程,进程之间通过binder方式实现,前两者之间是AIDL(android interface definition language),后两者是HIDL(HAL interfacce definition language)
2) 三个大框分别表示上面的三个进程,红色是AIDL接口、橙色是HIDL接口
1 CameraDevice的open流程
# 定义操作camera设备类的操作对象deviceImpl
# 让操作对象camera 设备获取回调函数
# manager从CameraService 获取检测、连接、相机描述的信息
Note:android里边的service都是SystemService来管理的
# 设置camera device的 user域
2 Native framework
# 路径:frameworks/av/camera/aidl/android/hardware
# app fw通过aidl接口访问native fw
3 camera Service
# frameworks/av/services/camera/
# 向上向app提供服务 向下向HAL获取数据
#
4 hal:有厂商如高通实现结构 名字由google定义好
# path:hardware/interface/camera
3)request:
1 框架流程掌握大法:
# 把类放在合适位置(父类和子类的引用),类框内是类方法
# 不同颜色的箭头表示不同的处理流程
# 参数用文字描述
2 为什么要走配置流程:因为我们的请求是通过session来完成的,session需要surface作为参数
4) request在HAL的处理方式
1 层和模块的交互的框架画法