Android的camera硬件抽象层(HAL)将更高层次的android.hardware.Camera中的camera框架层API与底层的camera驱动和camera硬件模块连接了起来。Android最新版本介绍了camera栈的一个新的、底层的实现。如果你有一个以前开发的camera HAL模块,可以驱动android其他版本,那你将发现在camera流水线中发生了非常大的变化。

由于很多设备都依赖于camera HAL层的第一个版本,所以android发布的新版本仍然会支持它。Android camera service层也支持camera HAL层v1和v3两个版本,当你想让camera HAL层的v1版本支持较少的前置camera而v3版本支持更高级的后置版本时,这个是很有用的。V2版本只是v3的一个过渡版本,将不再支持。

我们只有一个camera HAL模块(有自己的版本号,一般为12或者2.1),它对应于多个拥有自己版本号的camera设备。为了支持设备的v2或者更新版本,Camera模块需要提供v2或者更新版本,这类的camera模块有一个多个camera设备版本混合的版本号。这就是当我们所说的android支持多个camera HAL层的实现。

注:在camera architecture图中可以看到camera HAL层有四个模块,分别为:Camera HAL Device v1Camera HAL Device v2Camera HAL Device v3Camera HAL ModuleCamera模块的版本必须与camera设备的版本匹配。

注意:新的camera HAL层正在开发中,随时都可能发生变化。这篇文档在较高层次描述了camera子系统的设计,忽略了很多细节问题。参考Camera versionsupport获知我们的计划。

 

1.        Overview

Camera子系统的第一个版本被设计为高层控制的一个黑盒。粗略地将,旧的子系统分为三种操作模式:

·        预览

·        视频录制

·        拍照

每种模式差别甚微,且功能重叠。这使得很难实现新的功能,例如burst模式,因为在两种模式之间切换时会停止。

注:burst模式指的是快速拍照,在规定的时间内连续不断地进行拍照。在第一版的camera子系统中,拍一张照片后,会回到预览模式,然后再拍一张,再回到预览模式。这种处理,很难满足burst模式的需求。

 

Figure 1.Camera components

 

 

2.        Version 3 enhancements

重新设计android camera API的目的是为了充分地提高android设备上应用程序控制camera子系统的能力。重组API,使得它更高效和可维护。

新增控制使得在android设备上更容易创建高质量的能稳定地在多个android产品上运行的camera应用程序,同时在使用设备指定的算法的前提下尽可能地使得质量和性能最大化。

第三版的Camera子系统构建了一个单一且统一视图的操作模式,能用来实现以前的任何模式以及其他模式,比如burst模式。这使得用户可以更好地控制聚集、曝光及后处理,比如去噪,对比度增强和锐化。另外,这种简化的视图使得应用程序开发者更容易使用camera的各种功能。这版API使camera子系统形成一个流水线,按照11的比例,将帧数据的多次捕获转为多帧数据的请求。这些请求封装了捕获和处理这帧数据的所有配置信息。这些信息包括:分辨率,像素格式,sensor调整,镜头和闪光灯控制,3A操作模式,RAWYUV处理,统计信息产生,等等。

注:这里的描述,是第三版与第一版最大的区别。第一版中,操作模式多次运行,比如要五张图片,则进行五次拍照。而第三版中,先把需求描述清楚,作为一个个请求,在每个请求中将本次图像数据情况描述清楚,将请求依次发送到底层。这对底层camera硬件要求很高,因为这些请求中相邻两个请求的图像数据分辨率,格式等等都有可能不同。需要底层camera硬件在有效的时间范围内,必须提供上层所需要的图像数据。

简单地说,application framework层向camera子系统请求一帧数据,camera子系统返回一帧图像数据即可。另外,包含例如颜色空间,lens shading等信息的元数据需要被包含在每一个返回的数据单元里。下面的图片给出了各个组件更多的细节。你可以将camera第三个版本看作第一个单行处理的流水线。它将每一个拍照请求转化为sensor捕获的一帧图像,其处理如下:

·        返回一个拍照相关的拥有元数据的对象。

·        一个或者多个图像数据buffer,每个都有自己的目标surface。

可能的输出surface被预先配置:

·        每一个surface是固定分辨率的多个图像buffer的目标。

·        只有很少数量的surface可以被配置为立即输出。

一个请求包含了所有拍照的配置,输出surface的列表被添加到图像buffer(所有被配置的单元的输出)。一个请求可能只发送一次,也有可能会被多次发送。拍照优先于被重复发送的请求。

 

Figure 2.Camera core operation model

 

3.        Supported version

支持camera HAL v3版本的camera设备,在camera_device_t.common.version

camera_info_t.device_version (来自于camera_module_t.get_camera_info)中,必须返回

CAMERA_DEVICE_API_VERSION_3_1。包含v3.1设备的camera模块至少需要实现camera模块接口的v2.0版本(由camera_module_t.common.module_api_version定义)。

 

Website

https://source.android.com/devices/camera/camera3.html#supported-version

 

更多相关文章

  1. android的2种Animation模式配置
  2. Android(安卓)导入v7包常见错误
  3. Android(安卓)4.4(KitKat)窗口管理子系统 - 体系框架
  4. Android(安卓)context 文件模式
  5. Android框架模式(1)-MVP入门
  6. android recovery模式及ROM制作
  7. 【Android】Support兼容包详解
  8. Android版本更新知识(检测、升级)总结
  9. Android声音管理AudioManager使用

随机推荐

  1. android 设置布局为无标题样式
  2. android 通过 button 弹出menu
  3. android-passwordsafe - Android(安卓)Pa
  4. Android(安卓)结束进程的方法
  5. Android的Bluetooth Profile与UUID
  6. Android(安卓)Unable to find instrument
  7. android webview ERR_UNKNOWN_URL_SCHEME
  8. Android(安卓)Studio v1.0 项目无法运行
  9. android中的两端对齐
  10. Android(安卓)AIDL 理解及开发要点