目前需要做一个语音通话及视频聊天功能开发,主要分为音频及视频两个部分,必然会涉及到Camera及AudioFlinger部分,对于显示部分又会涉及到SurfaceFlinger部分,因此需要一步步的进行学习并确认设计是否合理.
这篇文章主要针对Camera作个简要的介绍,了解需要开发的各个环节。
摄像头系统提供的功能如下几个方面:
a、预览功能preview
b、视频儿取功能 recording
c、拍照功能 takePicture
d、参数设置
1、android中基本的架构都是C/S层架构,客户端提供调用接口,实现工作由服务端完成,那么Camera也同样
首先我们来理清其工作流程,如此才能够知道到底是个啥回事:
通过阅读其interface函数知道,ICamera中提供的都是控制类接口,而ICameraClient定义的都是回调函数
2、重点介绍一下CamerService , 这是一个承上启下的服务进程
class CameraService : public BnCameraService
{
// ICameraService interface
virtual sp<ICamera>
void
//... 省略部分内容
class Client : public BnCamera
{
//... 省略部分内容
} }
运行过程中,利用CameraService::connect得于一个CameraService::Client 代码如下所示:
sp<ICamera> CameraService::connect(const sp<ICameraClient>& cameraClient)
{
...
// create a new Client object
mClient = client;
return client;
}
使用过程中,主要通过mClient这个类的接口来实现完成Camera 的功能
具体看下实现层代码:
拍照功能:
/
status_t CameraService::Client::takePicture()
{
}
这里用到了mHardware对象,调用所有的HAL层接口都是通过这个对象进行操作的,而这是如何生成的呢?
extern "C" sp<CameraHardwareInterface> openCameraHardware();