1. 程式人生 > >Android Multimedia框架總結(十六)Camera2框架之openCamera及session過程

Android Multimedia框架總結(十六)Camera2框架之openCamera及session過程

前言:前一篇介紹了Camera2相關類作用及功能,並未對原始碼部分了解,今天瞭解了在Camera2框架中openCamera及session過程,Agenda如下:

  • CameraManager的openCamera方法
  • openCameraDeviceUserAsync
  • CameraDeviceImpl
  • getCameraService
  • 建立Session相關回調

在Activity或Fragement的onResume()時呼叫openCamera,

CameraManager中的openCamera方法:

這裡寫圖片描述

接著看下openCameraDeviceUserAsync方法,從名字上理解,使用者非同步開啟Camera device,

這裡寫圖片描述
這裡寫圖片描述

查詢給定的CameraDevice的容量,cameraId,表示傳入是有攝像頭,還是後攝像頭,這個容量是不可變的。

這裡寫圖片描述
這裡寫圖片描述

android.hardware.camera2.impl.CameraDeviceImpl的建構函式:

這裡寫圖片描述

接著看下CameraManagerGlobal.get().getCameraService();

這裡寫圖片描述

獲取ICameraService,可能為空,當camera service不可用時,如果上次用Camera Service就已經掛了,將會重啟這個service。

這裡寫圖片描述
這裡寫圖片描述

當服務可用時,連線Camera Serivce,並設定一些對應的listeners,如果服務已經啟動,什麼也不做,設定mCameraService指向合理的引用,如果連線不成功時。

這裡寫圖片描述
這裡寫圖片描述

當openCamera後,開始可以建立Session了,看下CameraCaptureSession$StateCallback的回撥

這裡寫圖片描述

第一時間獲得部落格更新提醒,以及更多android乾貨,原始碼分析,歡迎關注我的微信公眾號,掃一掃下方二維碼或者長按識別二維碼,即可關注。


這裡寫圖片描述

如果你覺得好,隨手點贊,也是對筆者的肯定,也可以分享此公眾號給你更多的人,原創不易