目录
1 CameraService简介
Camera Service被设计成一个独立进程,作为一个服务端,处理来自Camera Framework 客户端的跨进程请求,并在内
部进行一定的操作,随后作为客户端将请求再一次发送至作为服务端的 Camera Provider,整个流程涉及到了两个跨进程
操作,前者通过AIDL机制实现,后者通过HIDL机制实现。
而本文则主要介绍CameraService 通过 aidl 与 framework交互的相关内容。
在这里读者可以先去了解一下aidl,不必深究,我认为知道如何使用即可。这里可以参考我的另一篇文章。Android aidl 简单小demo学习过程记录(菜鸟详细版,快速上手aidl)
2 CameraService常用接口
2.1 ICameraService.aidl
定义了ICameraService 接口,实现主要通过CameraService类来实现,主要接口如下:
getNumberOfCameras:获取系统中支持的Camera个数
connectDevice():打开一个Camera 设备
addListener(): 添加针对Camera 设备以及闪光灯的监听对象
2.2 ICameraDeviceCallbacks.aidl
文件中定义了ICameraDeviceCallbacks接口,其实现主要由Framework中的CameraDeviceCallbacks
类进行实现,主要接口如下:
onResultReceived:一旦Service收到结果数据,便会调用该接口发送至Framework
onCaptureStarted():一旦开始进行图像的采集,便调用该接口将部分信息以及时间戳上
传至Framework
onDeviceError(): 一旦发生了错误,通过调用该接口通知Framework
2.3 ICameraDeviceUser.aidl
定义了ICameraDeviceUser接口,由CameraDeviceClient最终实现,主要接口如下:
disconnect:关闭Camera 设备
submitRequestList:发送request
beginConfigure:开始配置Camera 设备,需要在所有关于数据流的操作之前
endConfigure:结束关于Camera 设备的配置,该接口需要在所有Request下发之前被调用
createDefaultRequest:创建一个具有默认配置的Request
2.4 ICameraServiceListener.aidl
定义了ICameraServiceListener接口,由Framework中的CameraManagerGlobal类实现,
主要接口如下:
onStatusChanged:用于告知当前Camera 设备的状态的变更
3 总结
在了解了Android Camera从上到下(一)------Android Camera 架构简介(Api2 + Hal3)之后。其实对于再实际的应用中,出现问题的地方往往不会是本文中所涉及到的部分。所以本文也仅是对一些常用接口做了记录,但这些已经足矣。我们的重点要放在更加后面的文章中。