camera开发,我对预览请求的理解
手机启动后camera_hal 进程(Camera Provider)启动和 CameraService 启动分别启动。独立进程camera_hal启动后通过 Binder IPC 和 hwservicemanager 被 CameraService 动态加载和连接( 注意这个get_hw_module)。然后cameraService服务注册到binder驱动中启动线程池等待客户端连接。这里硬件抽象层必须是独立进程不能在cameraService进程这是谷歌要求的防止供应商代码内部有内存泄露或者致命错误导致整个系统垮掉而且也是出于方便硬件供应商代码升级的。此时客户端app发起open请求客户端app通过servicemanager获取到BpBinder客户端然后通过transact发起binder请求。binder驱动收到后转发给cameraservice然后从线程池中挑一个空闲的线程进行处理。此时cameraservice会创建一个cameradevice对象绑定具体的摄像头然后把这个cameradevice对象的代理对象返回给客户端app再有客户端app创建cameraCaptureSession对象。然后开始通过客户端app通过cameradevice代理对象发起cameraCaptureRequest预览请求此时上层会把surface所对应的图形缓存空间传到hal层后续产生的视频就存放在此。然后摄像头创建视频。创建一个视频帧后这个视频会通过数据链路传递。HAL层将帧数据直接写入图形缓存空间共享内存同时通过Binder回调通知CameraService和客户端帧已就绪传递元数据信息。客户端收到通知后从图形缓存空间取出视频帧进行显示。

相关新闻

最新新闻

日新闻

周新闻

月新闻