Android Camera分析(3)

2020-12-22 09:00

完整讲解了android中camera的工作机制,代码分析。对了解整个android工作流程会有很大的帮助。

{

sp<ProcessState>proc(ProcessState::self());sp<IServiceManager>sm=defaultServiceManager();LOGI("ServiceManager:%p",sm.get());AudioFlinger::instantiate();

MediaPlayerService::instantiate();CameraService::instantiate();

ProcessState::self()->startThreadPool();IPCThreadState::self()->joinThreadPool();

}

当向ServiceManager注册了CameraService服务后就可以响应client的请求了2.client端向service发送请求

①.在java应用层调用onCreate()函数得到一个上层的Camera对象publicvoidonCreate(Bundleicicle){super.onCreate(icicle);

ThreadopenCameraThread=newThread(newRunnable(){publicvoidrun(){

mCameraDevice=android.hardware.Camera.open();

}

});

………………………}

②.通过Camera对象的调用成员函数,而这些成员函数会调用已向JNI注册过的native函数来调用ICamera接口的成员函数向BinderKernelDriver发送服务请求。

③.BinderKernelDriver接收到client的请求后,通过唤醒service的进程来处理client的请求,处理完后通过回调函数传回数据并通知上层处理已完成。三.Camera库文件分析

上面已提到Camera模块主要包含libandroid_runtime.so、libui.so、libcameraservice.so和一个与Camera硬件相关的底层库。其中libandroid_runtime.so、libui.so是与Android系统构架相关的不需要对其进行修改,libcameraservice.so和Camera硬件相关的底层库则是和硬件设备相关联的,而Canera硬件相关的底层库实际上就是设备的Linux驱动,所以Camera设备的系统集成主要通过移植CameraLinux驱动和修改libcameraservice.so库来完成。

libcameraservice.so库通过以下规则来构建:

构建规则略在上面的构建规则中可以看到使用了宏USE_CAMERA_STUB决定是否使用真的Camera,如果宏为真,则使用CameraHardwareStub.cpp和FakeCamera.cpp构造一个假的Camera,如果为假则使用libcamera来构造一个实际上的Camera服务。

在CameraHardwareStub.cpp中定义了CameraHardwareStub类,它继承并实现了抽象类CameraHardwareInterface中定义的真正操作Camera设备的所有的纯虚函数。通过openCameraHardware()将返回一个CameraHardwareInterface类的对象,但由于


Android Camera分析(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:3G网络优化难点及解决方案译文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: