Android Camera(一)-框架小结

工作涉及安卓Camera的内容,做一下笔记

Android Camera的分层

最新的Android Camera的框架如下图所示

Android Camera(一)-框架小结_第1张图片
原图:Camera | Android Open Source Project (google.cn)

从上图可知道,Camera的框架主要包括三个进程,从上到下大概分为Camera APP,Camera Sevice,Camera HAL进程

Camera App

packages/apps/Camera2/src/com/android/camera/***

Camera App通过AIDL通信调用Camera Sevice的接口,Camera Sevice通过HIDL调用Camera HAL(Camera Provider)的接口

Camera Framework

frameworks/base/core/java/android/hardware/camera2
frameworks/base/core/jni/android_hardware_Camera.cpp

该层位于Camera APP和CameraSevice之间,封装Camera2 API的实现细节,并将APP的请求通过AIDL接口跨进程通信发送至CameraSevice处理,并将CameraSevice的结果返回给APP

  • android.hardware.camera2.CameraDevice:提供给APP的编程接口,代表一个camera,应用可以此类来对Camera进行拍照等
  • android.hardware.camera2.CameraManger:提供给APP的编程接口,应用可以通过此接口获取相机ID列表,摄像头信息,打开和关闭相机等操作,创建Camera状态回调等
getCameraIdList() : 返回当前设备中可用的相机列表
getCameraCharacteristics(String cameraId) : 根据摄像头id返回该摄像头的相关信息
openCamera(String cameraId, final CameraDevice.StateCallback callback,Handler handler): 打开指定cameraId的相机。参数callback为相机打开时的回调,参数handler为callback被调用时所在的线程

CameraSevice

    frameworks/av/camera/
    frameworks/services/camera/libcameraservice/

CameraSevice在Camera FrameWork和CameraProvider之间,在安卓系统中进程名为cameraserver,封装AIDL的接口给Framework使用,通过HIDL接口跨进程通信请求下发给Camera HAL(Camera Provider)进程,并将结果回传给Framework

  • CameraDeviceClient:实现CameraDevice的功能,CameraDevice通过AIDL通信调用本类执行
  • Camera3Device:代表一个Camera,负责与Camera HAL交互
  • CameraService:实现CameraManager的API,以及管理系统中的Camera,主要的功能是加载系统中的Camera以及打开/关闭Camera
  • CameraProviderManager:管理系统中的ICameraProvider

Camera HAL

Camera HAL包括Camera Provider和OEM/ODM自己实现的Camera HAL module,

1.Camera Provider

hardware/interfaces/camera

Camera Provider作为一个独立进程运行在安卓系统中,提供HIDL接口供CameraSevice使用

  • ICameraProvider:向下调用Camera HAL module,承上启下
  • ICameraDevice:代表HAL层级的一个Camera
  • ICameraDeviceSession:封装HAL层级的Camera操作,包括:拍照,摄像,硬件配置等

2.Camera HAL module

谷歌提供的Camera HAL module参考

hardware/libhardware/modules/camera

OEM/ODM产商对谷歌Camera HAL3的实现,以so库的形式被加载到Camera Provider中,接收来自Provider的请求,发送命令给驱动接口,并将结果上传给Provider

你可能感兴趣的:(Camera开发,android)