Architecture Legacy
Android Camera当前提供了两套API:API1.0和API2.0。API1.0和API2.0的区别是:
(1) API1.0相对简单且易于使用,应用可以做的事情不多。
(2) API2.0则要复杂得多,但是应用程序可以对底层相机有更多的控制权。比如:efficient zero-copy burst/streaming flows and per-frame controls of exposure, gain, white balance gains, color conversion, denoising, sharpening, and more.
由于Android软件每次更新总是会做到向前兼容,所以在现在的版本上API1.0的相机也是可以跑起来的。但是当前API1.0 Google已经不再提供更新,它会逐渐被淘汰掉。
有关更多Android各版本的细节参考:https://source.android.google.cn/devices/camera/versioning
整体架构概述(Camera2 + HAL3)
Android Camera整体框架主要包括三个进程:app进程、camera server进程、hal进程(provider进程)。进程之间的通信都是通过binder实现,其中app和camera server通信使用 AIDL(Android Interface Definition Language) ,camera server和hal(provider进程)通信使用HIDL(HAL interface definition language) 。
Android Camera2整体架构如下图:
上图Kernel层没有画出来,其它基本可以和Android系统框架对应起来。
大致分为这几个部分:
-
Application framework
这一层是用于给APP提供访问hardware的Camera API2,通过binder来访问camera service。有两个主要的类:(1) CameraManager,CameraManager是一个独一无二地用于检测、连接和描述相机设备的系统服务,负责管理所有的CameraDevice相机设备。通过ICameraService调用到CameraService。
// CameraManager.java private void connectCameraServiceLocked() { // CameraManager是一个系统服务,应该是开机就会被创建起来 IBinder cameraServiceBinder = ServiceManager.getService(CAMERA_SERVICE_BINDER_NAME); ICameraService cameraService = IC