了解各模块版本

1.2 了解各模块版本

这里我们不去考虑HAL层以下厂商他们自家的版本,从AOSP目前发布的代码来看,在上述章节的4层架构中,我们经常会提及的相机版本有以下3个方面:

1.        应用程序框架层的相机API版本(随SDK API发布)

2.        相机模块的版本(CAMERA_MODULE_API_VERSION)

3.        相机硬件抽象层接口的版本(CAMERA_DEVICE_API_VERSION)

在最新发布的Android M版本中,相机SDK的API已经支持到了v2版本,平台支持的最大相机模块版本(Module API)是2.3,支持最大的相机硬件抽象层接口的版本(Device API)是3.2。

但是往往很多厂家的手机最终支持的Module和Device版本都只到1.0版本,比如说,就目前为止我们公司出去的产品Android L版本以前的软件都是这样的,当然这很大的原因是来自于平台提供商的限制。

对于SDK API来说,这个是暴露给用户开发应用程序的接口。v2版本的Camera API是在Lollipop中新发布出来的,目前的平台包括以后很长一段时间v1和v2版本都会共存,不过在Lollipop中已经不推荐使用v1版本了(v1版本被标记deprecated),新的平台的开发将会致力于对v2版本的发展。

对于Module API来说,他指向的是相机硬件模块的版本,对应的是hw_module_t结构体中的module_api_version这个字段。Module API的规则是,如果平台报告说支持API 2.3,言下之意就是同时也支持2.3以下的所有API。

对于Device API来说,他指向的是相机硬件抽象层版本,对应的是hw_module_t结构体中的hal_api_version这个字段。他们各自的版本之间没有太多的依赖性,平台如果支持API 3.0,未必会支持API 1.0。实际情况下往往是支持了API 3.0就不会再支持其他的版本,但是也是允许支持多个版本,系统默认会选择最高的版本。

上述的Module API和Device API是Android硬件抽象层规范里面的内容,更详细的信息可以去查看“通用硬件模块”相关的内容。

 

1.2.1相机应用框架版本说明

目前相机应用框架版本(CameraSDK API)同时支持2个版本,新版本v2应该说是对于旧版本v1的替换,而不是他的扩展。接下来我们看一下每个版本的特点:

q       Camera SDK API v1

最早版本的相机API,通过android.hardware.Camera类暴露给上层的应用开发者,而且是仅仅支持这个类。虽说这个类定义的内容比较少,但是这套API确实是一个完整的相机解决方案。他的扩展性能强,很多功能都可以通过设置参数的方式实现,只要对应的相机系统支持。目前市场上几乎所有的相机应用都用的是API v1,不过这套API在Lollipop已经过时,在未来的app开发中推荐的是API v2。

q       Camera SDK API v2

通过android.hardware.camera2这个包下面的类暴露给上层的应用开发者。这个版本的API是通过Binder直接跟相机服务端通信(API 1.0版本的是通过JNI、相机客户端与服务端通信的)。这个版本可以支持更多的特性和更高的效率。

 

1.2.2相机硬件模块版本说明

目前相机硬件模块版本(ModuleAPI)已经升级到了2.3。他们的各个版本之间是采用向下兼容的方案,接下来我们看一下每个版本的特点:

q       CAMERA_MODULE_API_VERSION_1_0

最早版本的相机API,用这个版本的硬件模块对于设设备HAL只能支持到1.0版本,同时对于应用程序框架层的相机SDK API也只能支持到v1。设备的一部分特性不能支持,比如说不能获取设备的版本,不能获取设备的静态特征等。

q       CAMERA_MODULE_API_VERSION_2_0

用这个版本的硬件模块对于设设备HAL可以支持到1.0或是2.0版本,。这个版本可以支持更过的设备特征,1.0不支持的设备版本、静态特征,都支持。

q       CAMERA_MODULE_API_VERSION_2_1

此版本增加了可以从HAL层异步回调到Framework层的方法,当相机状态发生改变的时候,可以通过这种方式通知到Framework层,只要实现通过set_callbacks()设置回调即可。

q       CAMERA_MODULE_API_VERSION_2_2

此版本增加了静态的制造商标签,废弃了原有的,只能先通过打开相机,再查询制造商信息的这种操作方式。

q       CAMERA_MODULE_API_VERSION_2_3

此版本增加了打开相机的时候可以选择使用旧版本HAL的方式。原本通过open方式打开相机返回的hw_device_t默认采用的是最新版本的HAL,通过open_legacy可以传入指定的HAL版本信息。仅在平台同时支持多个HAL版本的情况下使用有效,否则和open一致。

 

1.2.3相机硬件抽象层版本说明

目前相机硬件抽象层模块版本(DeviceAPI)已经升级到了3.2。他们的各个版本之间是相互独立的,接下来我们看一下每个版本的特点:

q       CAMERA_DEVICE_API_VERSION_1_0

- 仅支持anroid.hardware.Camera这个类的API,即API v1。

q       CAMERA_DEVICE_API_VERSION_2_0

- 支持现有android.hardware.Camera API。

- 支持相机服务层的ZSL队列。

- 未经测试的新功能,如手动捕获控制,拜耳原始数据拍摄、再处理。

q       CAMERA_DEVICE_API_VERSION_3_0

- 仅ABI(应用程序二进制接口)发生变化,相对2.0,需要的硬件能力和运作模式都没发生变化。

- 重新设计了输入请求与流队列的接口。

- 重新封装请求与返回结果的结构。

- 重新封装回调的结构,重定义初始化的动作。

- 简化流管理。

- 定义硬件设备的限制模式。

q       CAMERA_DEVICE_API_VERSION_3_1

- 扩展流管理,增加方法configure_streams用于重置pipeline,以及设置输入输出流。

- 增加flush方法,刷新pipeline中的请求与缓存数据,以便Framework很快的获取所有的状态。

q       CAMERA_DEVICE_API_VERSION_3_2

- 废弃get_metadata_vendor_tag_ops方法,增加get_vendor_tag_ops。(这个特性是在Module API 2.2中加入的)

- 废弃register_stream_buffers,增加process_capture_request。

- 通过process_capture_result,增加分段结果返回的支持。

- 增加camera3_request_template用于控制拍照设置。

- 重构双向和输入流的规范。

- 缓冲区process_capture_result代替process_capture_request返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值