android 7.0 camera 打开流程

本文详细解析了Android 7.0中Camera打开的流程,从APP层的CameraActivity.java开始,经由CameraDeviceCtrl.java、Util.java、CameraManager.java,进入Framework层的Camera.java,然后调用JNI,最终深入HAL层与硬件交互。分析过程中涉及Camera2 API,CameraService,以及不同平台如MTK的特定实现。
摘要由CSDN通过智能技术生成
本文以Android 7.0 代码为主,camera代码使用的是MTK平台的,抛开其它方面的信息,单纯以初始化打开相机为主线分析,主要在上层到底层的调用过程上,有些细节研究的不深还需要后续接着分析。


APP


/vendor/..../package/app/Camera
CameraActivity.java  onCreate()


 CameraDeviceCtrl.java 
在这个函数中,可以看到调用了一个线程去启动相机,在调用结束以后会设置camera的state为opening,保证相机状态是正确的。


PS:在这里,camera的状态只是被设置为 OPENING,查看CameraState以后发现,总共有三个状态,分别为:

查看CamearStartUpThread发现,这个Thread是CameraDeviceCtrl的一个内部线程,openCamera()函数如下:



 可以很明显的看到这个函数前面有synchronized修饰符,并且调用了notifyAll(),调用notiify以后会唤醒使用了wait()函数的线程,查看后发现在如下位置进行了调用:


 在这个run函数中存在一个if语句,在CameraActivity.java的onCreate()函数中初始化 CameraDeviceCtrl,并且在调用openCamera之前,而 CameraDeviceCtrl构造函数中又把if的条件置为了true,所以run函数会跑到wait处等待。if退出后又看到了openCamera()。


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值