亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

android Camera 結(jié)構(gòu)

原創(chuàng) 2016-11-01 17:00:09 647
摘要:Java層 :Frameworks\base\core\java\android\hardware\Camera.javaJNI: Frameworks\base\core\jni\android_hardware_Camera.cppC++: Frameworks\av\include,Frameworks\av\camera,Frameworks\av\services\camera

Java層 :Frameworks\base\core\java\android\hardware\Camera.java

JNI: Frameworks\base\core\jni\android_hardware_Camera.cpp

C++: Frameworks\av\include,Frameworks\av\camera,Frameworks\av\services\camera
第一部分, 也即第一組binder;PS:這里發(fā)起鏈接,獲取具體模組的代理,在App進程
ICameraClient, 對應(yīng)的代理類為BpCameraClient, 對應(yīng)的服務(wù)類為BnCameraClient(抽象類), Camera(具體的實現(xiàn)類),另外 Camera還有一個父類BaseCamera
用于發(fā)送鏈接請求,接收回調(diào)


第二部分, 也即第二組Binder; PS:這里只是用來選擇、管理模組,并且在服務(wù)進程
ICameraService, 對應(yīng)的代理類為BpCameraService, 對應(yīng)的服務(wù)類為 抽象類BnCameraService, 實現(xiàn)類CameraService
用于接收請求,管理ICamera


第三部分,也即第三組Binder;PS:這里對應(yīng)Device 即具體模組,在服務(wù)進程
ICamera, 對應(yīng)的代理類為BpCamera,對應(yīng)的服務(wù)類 抽象類為BnCamera, 實現(xiàn)類為Client, 其同時也繼承BasicClient, 并且有子類CameraClient, Camera2Client
用于管理具體的攝像頭模組
調(diào)用邏輯
Camera.java 通過 JNI android_hardware_Camera 創(chuàng)建c++ 層Camera對象, 在BaseCamera中獲取ICameraServcie的代理(這個Binder服務(wù)已經(jīng)注冊到ServiceManager,可以通過名稱獲?。?,通過ICameraService代理向CameraService發(fā)起鏈接請求

并且將ICameraClient 作為回調(diào)發(fā)送到CameraService, 

收到請求之后,CameraService 會根據(jù)系統(tǒng)版本選擇new CameraClient 或者 Camera2Client ,并且將ICameraClient 傳入Client中;即每一個CameraClient 都有一個對應(yīng)的回調(diào)。

然后發(fā)起鏈接的BaseCamera 從reply中讀取出ICamera的代理BpCamera。

最后就可以通過BpCamera 控制攝像頭的預(yù)覽拍照等功能。


發(fā)布手記

熱門詞條