Android CameraManager open 从上到下代码流程

70 篇文章 5 订阅
7 篇文章 2 订阅

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

共勉:生活需要加油。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值