2.5 Camera open拾遺

前面把Camera open在Framework的流程已經梳理清楚,但是還有一些細節值得一提。

CameraDevice.StateCallback與Executor

在open方法中傳入了一個Executor對象,這個對象是在執行Callback時使用的。作爲一個接口, CameraDeviceImpl中有一個靜態內部類CameraHandlerExecutor作爲實現。

外部調用checkAndWrapHandler方法就可以構造。

而這個Executor對象在open方法,構建deviceImpl對象時被傳入,並賦值給mDeviceExecutor變量。

隨後在setRemoteDeviecs方法中執行

語句,調用mCallOnOpened的Runnable對象。在run方法中調用了onOpened方法,並傳入了CameraDeviceImpl對象。

此時在應用內的StateCallback的onOpened方法就會獲得cameraDevice對象,進行後續操作。遵循同樣的方式,我們可以在CameraDeviceImpl中找到StateCallback的全部方法調用。

getCameraCharacteristics方法

這個方法在open過程中被調用了數次,在CameraManager中的邏輯很簡單,就是調用CameraService的getCameraCharacteristics方法,返回CameraMetadataNative對象,從而構建CameraCharacteristics對象並返回。

同樣在CameraService中也是調用CameraProviderManager的getCameraCharacteristics方法,並返回了一個DeviceInfo3,這個名字後面的數字對應HAL的版本,即HAL3。

https://upload-images.jianshu.io/upload_images/3768281-33197fca98904927.jpg?imageMogr2/auto-orient/strip|imageView2/2

整體流程是比較清晰的,需要注意的僅僅是應用層所使用的CameraCharacteristics,與get過程中涉及到的CameraMetadataNative.java、CameraMetadataNative.h、DeviceInfo3類型是不同的,後者類型相同。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章