首先初略的了解一下 camera preview 图像显示的原理。 Camera application 初始化的时候会创建一个 surfaceview ,从 camera device 接收到的数据就可以通过它显示在屏幕上。内部处理的流程是很复杂的,下面我只给出一个从初始化到绘图函数调用的流程。
Surface 初始化:
Android_view_surface:: Surface_init--> SurfaceComposerClient::CreateSurface-->
SurfaceFlinger:: createSurface--> Android_view_surface:: setSurface
Camera 数据缓冲区 Heap 初始化:
CameraHardwareStub::initHeapLocked--> new MemoryBase--> new FakeCamera
Heap 缓冲区注册到 surface:
Android_hardware_camera:: android_hardware_Camera_setPreviewDisplay-->
Camera:: setPreviewDisplay--> CameraService::Client::setPreviewDisplay-->
CameraService::Client::registerPreviewBuffers--> LayerBuffer::registerBuffers
FakeCamera 原始数据的传递与绘图:
CameraHardwareStub::previewThread--> CameraService::Client::previewCallback-->
CameraService::Client::postPreviewFrame