Android Camera 架构介绍
2010-03-18 16:22:00 来源:WEB开发网一个函数 connect的实现如下所示:
sp
{
sp
const sp
if (cs != 0) {
c->mCamera = cs->connect(c);
}
if (c->mCamera != 0) {
c->mCamera->asBinder()->linkToDeath(c);
c->mStatus = NO_ERROR;
}
return c;
}
connect通过调用getCameraService得到一个 ICameraService,再通过 ICameraService的cs->connect(c)得到一个 ICamera类型的指针。 调用connect将得到一个 Camera的指针,正常情况下Camera的成员 mCamera已经初始化完成。
一个具体的函数startPreview 如下所示:
status_t Camera::startPreview()
{
return mCamera->startPreview();
}
这些操作可以直接对 mCamera来进行,它是ICamera类型的指针。
其他一些函数的实现也与setDataSource类似。
libmedia.so中的其他一些文件与头文件的名称相同,它们是:
frameworks/base/libs/ui/ICameraClient.cpp
frameworks/base/libs/ui/ICamera.cpp
frameworks/base/libs/ui/ICameraService.cpp
在此处,BnCameraClient和BnCameraService类虽然实现了onTransact()函数,但是由于还有纯虚函数没有实现,因此这个类都是不能实例化的。
ICameraClient.cpp中的BnCameraClient在别的地方也没有实现;而ICameraService.cpp中的 BnCameraService类在别的地方被继承并实现,继承者实现了Camera服务的具体功能。
3.4 Camera服务libcameraservice.so
frameworks/base/camera /libcameraservice/ 用于实现一个Camera的服务,这个服务是继承ICameraService的具体实现。
在这里的Android.mk文件中,使用宏USE_CAMERA_STUB 决定是否使用真的Camera,如果宏为真,则使用CameraHardwareStub.cpp和FakeCamera.cpp构造一个假的 Camera,如果为假则使用CameraService.cpp构造一个实际上的Camera服务。
CameraService.cpp是继承BnCameraService
更多精彩
赞助商链接