您的位置:华清远见教育科技集团 >> Android资料 >> Android Camera拍照源码分析  
 
Android Camera拍照源码分析
分享到:

为了执行Camera的功能,Camera应用需要完成和Camera原生服务的一系列通信,如启动预览、自动对焦、拍照等,以及基于模拟器下CameraHardwareStub的实现。Camera应用调用Camera原生接口的过程如下图所示。


Java层调用Camera原生服务的过程

流程说明:

在系统启动时,Android Runtime会调用register_android_hardware_Camera()注册Camera相关的navtive函数到JNI。当Camera应用启动后,首先会通过Camera客户端向Camera原生服务发出连接Camera设备的请求。Camera原生服务在收到连接Camera设备的请求后,创建一个内部类Client的对象,调用HAL的CameraHardwareInterface::openCameraHardware()方法打开Camera设备,在模拟器环境下,会创建一个CameraHardwareStub对象,配置初始化参数。调用HAL的CameraHardwareStub::useOverlay()方法,设置图像的渲染方式为Overlay。

在Aurora中,在默认情况下,预览帧速率为15帧/秒,预览帧元数据为YUV 420,拍照分辨率为2048×1536像素,图像质量为100。参数初始化工作在QualcommCamera Hardware:: initDefaultParameters()方法中实现。

当Java层发出预览请求后,经过Camera客户端的转发,Camera原生服务会调用HAL层的CameraHardwareStub::startPreview()方法创建一个预览线程,在该线程中接收硬件上传的数据。如果是在模拟器上运行,则将FakeCamera的数据传给UI,在原始Android代码中,默认的预览分辨率为176×144像素(QCIF)。在Aurora中,目前支持的预览分辨率为WVGA、VGA、HVGA、CIF、QVGA、QCIF。

当Java层发出自动对焦请求后,经过Camera客户端的转发,Camera原生服务会调用HAL层的CameraHardwareStub:: autoFocus ()方法创建一个自动对焦的线程。

当Java层发出拍照请求后,经过Camera客户端的转发,Camera原生服务会调用HAL层的CameraHardwareStub:: takePicture ()方法完成Camera的拍照工作,然后通过回调函数传给UI。

 更多相关文章

·Android Camera原生服务架构
·Android Camera录像过程分析
·Android 原生层媒体播放过程
·Android 视频解码过程详解
·Android 视频编码源码分享