Android Camera AP到Camera Hal调用步骤
发布时间:2021-12-13 17:08:19 所属栏目:教程 来源:互联网
导读:1. 首先是调用framework层的Camera.java(frameworksbasecorejavaAndroidhardware)的takePicture方法 2. 接着会调用到JNI层的android_hardware_Camera.cpp(frameworksbasecorejni)的android_hardware_Camera_takePicture方法,其中会通过get_native_ca
1. 首先是调用framework层的Camera.java(frameworksbasecorejavaAndroidhardware)的takePicture方法 2. 接着会调用到JNI层的android_hardware_Camera.cpp(frameworksbasecorejni)的android_hardware_Camera_takePicture方法,其中会通过get_native_camera获取一个Camera对象。 3. 上述Camera对象的定义在Camera.h(frameworksavincludecamera),camera.h同时定义了CameraInfo。Camera对象继承自publicBnCameraClient,DeathRecipient。Camera对象的真正实现是在Camera.cpp(frameworksavcamera) 。BnCameraClient是作为CameraService回调而存在的。Camera对象内含有一个mCameraService变量用于保存CameraService引用。 class Camera : public BnCameraClient,public IBinder::DeathRecipient constsp<ICameraService>& Camera::getCameraService() { Mutex::Autolock _l(mLock); if (mCameraService.get() == 0) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { binder =sm->getService(String16("media.camera")); if (binder != 0) break; ALOGW("CameraService notpublished, waiting..."); usleep(500000); // 0.5 s } while(true); if (mDeathNotifier == NULL) { mDeathNotifier = newDeathNotifier(); } binder->linkToDeath(mDeathNotifier); mCameraService =interface_cast<ICameraService>(binder); } 4. 在ICameraClient.h和ICameraService.h文件中,ICameraClient和ICameraService都继承自IInterface,也就是Binder通信的基础,此外ICamera.h也继承自IInterface class ICameraClient:public IInterface class ICameraService :public IInterface class ICamera: publicIInterface 然后发现BnCameraClient继承自BnInterface<ICameraClient>,作为ICameraClient的服务器端存在: class BnCameraClient: publicBnInterface<ICameraClient> BnCameraService继承自BnInterface<ICameraService>,作为ICameraService的服务器端存在: class BnCameraService: publicBnInterface<ICameraService> BnCamera继承自BnInterface<ICamera>,作为ICamera的服务器端存在: class BnCamera: public BnInterface<ICamera> 对应的上述三个分别存在一个作为Binder客户端的类存在,为Bp***: class BpCameraClient:public BpInterface<ICameraClient> class BpCameraService:public BpInterface<ICameraService> class BpCamera: publicBpInterface<ICamera> 上述三个的实现分别在ICameraClient.cpp、ICameraService.cpp、ICamera.cpp,在这三支文件中分别实现了三组Binder的Server端和Client端,Camera常用的方法都在ICamera中实现。 (编辑:我爱故事小小网_铜陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |