Platform: rk3399
OS: Android 7.1
Kernel: v4.4.83
概述:
随着系统的升级,Camera的版本也跟着一起升级,升级的本质无非就是接口的更新或增加,以下的相机框图可以看到各个层的版本差异以及调用过程。
不同层次有不同类型的api版本,依次是Camera API, Module API, Device API, HAL API。
Camera API:
Camera API位于Java层,现在有v2和v1两个版本,两者差异较大,摘网友一段差异说明:
功能上api2提供了更加细致的控制功能,api1子系统被设计为具备高级控制功能的黑盒,能够发出请求,但无法控制图像的缓冲区和元数据,无法再帧层面控制传感器的特性,无法通过访问和修改元数据信息(如3A信息)对捕获的帧应用任何增强功能,重新设计api2旨在大幅提高应用程序控制摄像头子系统的能力,性能也有一定的提升。
Module API:
CameraService会去根据module api版本决定某些接口是否要调用,这些接口是相应版本对应增加的,例如服务创建时(onFirstRef()) 当api>2.2之后才调用setUpVendorTags().
if (mModule->getModuleApiVersion() >= CAMERA_MODULE_API_VERSION_2_2) {
setUpVendorTags();
}
版本以及对应接口定义和注释可在 hardware/libhardware/include/hardware/camera_common.h 中看到:
定义:
/**
* All module versions <= HARDWARE_MODULE_API_VERSION(1, 0xFF) must be treated
* as CAMERA_MODULE_API_VERSION_1_0
*/
#define CAMERA_MODULE_API_VERSION_1_0 HARDWARE_MODULE_API_VERSION(1, 0)
#define CAMERA_MODULE_API_VERSION_2_0 HARDWARE_MODULE_API_VERSION(2, 0)
#define CAMERA_MODULE_API_VERSION_2_1 HARDWARE_MODULE_API_VERSION(2, 1)
#define CAMERA_MODULE_API_VERSION_2_2 HARDWARE_MODULE_API_VERSION(2, 2)
#define CAMERA_MODULE_API_VERSION_2_3 HARDWARE_MODULE_API_VERSION(2, 3)
#define CAMERA_MODULE_API_VERSION_2_4 HARDWARE_MODULE_API_VERSION(2, 4)
#