CameraHardwareInterface.h定义了用于实现设定,获取参数,预览,拍照的硬件抽象层接口。CameraHardwareInterface的基类是RefBase。CameraService调用openCameraHardware()方法就能获得一个指向硬件抽象层类的实例的强类型指针,并且
openCameraHardware()方法能够多次被调用来获得多个实例。
正常的流程如下:
CameraService调用openCameraHardware()之后,getParameters()和setParameters()将会被调用来初始化camera hardware abstract layer(HAL)实例。CameraService接着调用getPreviewHeap()方法来建立对preview堆内存的访问,接着用SurfaceFlinger来注册这段堆内存,这样在预览的时候就能够更高效率的刷新屏幕。接下来调用startpreview()方法,预览线程被启动,camera HAL在受到底层的一桢完整数据的时候就会发送一个CAMERA_MSG_PREVIEW_FRAME消息,预览线程回接收并处理相应的消息。
拍照的过程也很类似,有拍照的指令下来后,CameraService先调用autofocus()方法,自动对焦线程被启动,再完成自动对焦线程后,camera HAL送出一个CAMERA_MSG_FOCUS消息,自动对焦线程接收这个消息,并做相应的处理。接下来CameraService调用takePicture()方法来实现拍照的动作,takePicture回销毁预览线程同时打开拍照线程,拍照线程调用camera HAL完成拍照动作,拍照线程同样接收并处理Shutter,raw,compressed等消息。