2021-07-26
Posted 峥嵘life
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-07-26相关的知识,希望对你有一定的参考价值。
android CameraManager open 从上到下代码流程
Java层
1、CameraManager.java
----openCamera(mCameraId,mStateCallback,handler)
--------openCameraForUid(cameraId, callback, handler, USE_CALLING_UID)
------------openCameraDeviceUserAsync(cameraId, callback, handler, clientUid);
2、CameraDeviceImpl.java
----setRemoteDevice(ICameraDeviceUser remoteDevice)
这个类只是做一写监听处理,
实际上CameraManager.openCameraDeviceUserAsync方法里面已经关联了CameraService进行了connectDevice。
底层服务
3、CameraService.cpp
----CameraService::connectDevice(..,int cameraId,...)
--------CameraService::connectHelper(..,int cameraId,...)
------------CameraService::makeClient(...,int cameraId,...)
4、CameraClient.cpp
----CameraClient::initialize(sp<CameraProviderManager> manager)
Hal层
5、CameraHardwareInterface.cpp
----CameraHardwareInterface::initialize(sp<CameraProviderManager> manager)
6、CameraProviderManager.cpp
----CameraProviderManager::openSession(const std::string &id,...)
设备层
7、CameraDevice.cpp
----CameraDevice::open(const sp<ICameraDeviceCallback>& callback)
这里往下,不同系统会有较大差异。
8、CameraModule.cpp
----CameraModule::open(const char* id, struct hw_device_t** device)
9、CameraHal_Module.cpp
----int camera_device_open(const hw_module_t* module, const char* name, hw_device_t** device)
10、CameraHardware.cpp
----CameraHardware::CameraHardware()
11、V4L2Camera.cpp
----int V4L2Camera::Open (const char *device)
这里device字符串打印出来就是/dev/videoX(0、1、2)
Camera是不存在CameraService.java的,主要逻辑和实现都是在C++,所有问题分析或者新增功能都是C++为主。
调用Camera的相关api是通过jni的方式调用到CameraService.cpp,但是CameraManager是可以直接绑定CameraService.cpp的。
可以对比下Camera.open从上到下的流程:
https://blog.csdn.net/wenzhi20102321/article/details/118739446?spm=1001.2014.3001.5501
共勉:生活需要加油。
以上是关于2021-07-26的主要内容,如果未能解决你的问题,请参考以下文章
《安富莱嵌入式周报》第223期:2021.07.26--2021.08.01
2021-07-26 .NET高级班 120-直播项目专题(图片防盗链)