android camera分析2

来源:互联网 发布:简明python教程 编辑:程序博客网 时间:2024/05/19 04:29

这次主要看下cameraframwork部分的东西。


binder机制我也没有搞的多明白。

但不妨碍解决问题。或许写着写着就明白了

至于camera是如何从应用层到jni系统再到 下面的c++层就不写了

下面主要看下 c++层的代码组织结构和流程。

bp***端就是代理端   bn***端就是服务端。i***就是父类的声明或定义

先来列举下三个 代理---服务对

icamera.h 对应:     代理端:icamera.cpp 内部类有bpcamera的实现

                                    服务端:CameraService::Client 直接继承了bncamera

IcameraClient:         代理类:IcameraClient.cpp内部类BPcameraClient的实现

                                   服务端:camera.cpp 直接继承了bncameraclient

IcameraService      代理端:IcameraService.cpp

                                  服务端: cameraService.cpp

camera.cpp 通过sp<IServiceManager> sm = defaultServiceManager();
       sp<IBinder> binder = sm->getService(String16("media.camera"));
sp<ICameraService> mCameraService = interface_cast<ICameraService>(binder);”得到名字为media.camera”的CameraService. 通过调用CameraService的接口connect() 返回得到sp<ICamera> mCamera 这是就获得了服务器端的句柄。以后就可以通过这个句柄操作服务器端了。

这个似乎不需要其他类了。你妈其他类呢。icamera.cpp icameraservice.cpp应该响camera.cpp这样来获取自己的句柄阿。但我没找到阿

仔细看了下 icamera.cpp发现里面的connect里面也有连接服务器的操作。只不过他里面的操作比较简单,只需要bind提供的transact ontransact来进行沟通。这样的话就比上面的那个

要简单的多,所有省了一些步骤。

如果以上都能说的过去,IcameraClient这个东西如何解释。由于这两个类都在一个文件夹下。起码得有个transact吧。但没找到camera.cpp 里面的transact 也没找到使用ontransact()的地方,这个bind底层已经自动弄好了。

看来这个东西还是没有看懂。

希望看懂的给解释解释。

原创粉丝点击