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

2021-02-14 碼農突圍

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

在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乾貨,源碼分析,歡迎關注我的微信公眾號,掃一掃下方二維碼或者長按識別二維碼,即可關注。

相關焦點

  • Camera2/HAL3 框架分析 程式設計師Android
    其實現存在於下述路徑:frameworks/av/camera/aidl/android/hardware。其中:(1) ICameraService是相機服務的接口。用於請求連接、添加監聽等。(2) ICameraDeviceUser是已打開的特定相機設備的接口。應用框架可通過它訪問具體設備。
  • Camera2 / HAL3 架構了解下
    其實現存在於下述路徑:frameworks/av/camera/aidl/android/hardware。其中:(1) ICameraService是相機服務的接口。用於請求連接、添加監聽等。(2) ICameraDeviceUser是已打開的特定相機設備的接口。應用框架可通過它訪問具體設備。
  • Android Multimedia框架總結(六)C++中MediaPlayer的C/S架構
    frameworks/av/media/libmedia/MediaPlayer.cpp 找一個我們之前熟悉的setDataResource方法看下C/S模式的過程,亦可參考Android Multimedia框架總結(四)MediaPlayer中從Java層到C++層類關係及prepare及之後其他過程中的圖,了解整體上C/S架構。
  • Android Camera2 實現高幀率預覽錄製(附源碼)
    就是創建一個新的 session,叫做 mCameraDevice.createConstrainedHighSpeedCaptureSession,通過這個,可以實現相機的高幀率(>120fps)的預覽和錄像(需要相機本身支持)。
  • Camera 入門第一篇 openCamera
    (frameworks\base\core\java\android\hardware\camera2)的 openCamera 方法,根據指定的CameraId 打開。1.1 CameraManager.openCamera 方法cameraId 是一個標識,標識當前要打開的cameracallback 是一個狀態回調,當前camera被打開的時候,這個狀態回調會被觸發的。
  • Android Multimedia框架總結(四)MediaPlayer從Java層到C++層類關係及prepare及之後其他過
    看下今天的Agenda:MediaPlayer各個so庫之間關係結構圖MediaPlayer各個具體類之間依賴關係圖prepare的執行過程prepareAsync執行過程prepare和prepareAsync區別start執行過程pause執行過程MediaPlayer各個so庫之間關係結構圖
  • Android壓力測試Monkey工具
    最近在Android程序測試過程中接觸到了自動化測試方法,對其中的一些工具、方法和框架做了一些簡單的整理,其中包括android測試框架、CTS、Monkey、Monkeyrunner其它test tool等等。因接觸時間很短,很多地方有不足之處,希望能和大家多多交流和指點在這裡簡單對monkey做簡單的介紹吧。
  • 最新Android框架排行榜,上百項資源匯總!
    」上榜理由:15.9k個star,圖片加載類框架排名第一的框架,google 在2014開發者大會上演示的camera app就是基於gilde框架開發的github https://github.com/bumptech/glide作者 Bump Technologies團隊使用:repositories {  mavenCentral
  • ThinkPHP框架的個人總結
    ThinkPHP框架是一款出色的PHP框架,在國內的市場佔有量很高,採用MVC的開發模式。與其他的MVC模式框架如laravel、CI、YII等相比較;laravel更加適合做大型項目開發,laravel框架提供了豐富的擴展類;ThinkPHP適合小型項目及中型項目;而CI框架是一款比較小巧的框架,個人認為其更適合做博客、企業官網、協會類網站開發。相對來說更加的靈活。在資源損耗上面更小。
  • 最新Android框架排行榜,上百項資源匯總不容錯過
    開發者大會上演示的camera app就是基於gilde框架開發的使用:repositories {  mavenCentral()}dependencies {    implementation 'com.github.bumptech.glide:glide:4.5.0'       annotationProcessor
  • Android常用6種自動化測試框架對比?
    趁現在有空我來總結下,Android常用的幾種自動化測試框架的異同,使測試人員在選擇自動化框架時有所參考!Android幾種常用自動化測試框架對比1、Monkey是Android SDK自帶的測試工具,在測試過程中會向系統發送偽隨機的用戶事件流,如按鍵輸入、觸控螢幕輸入、手勢輸入等),
  • 打通網絡協議的任督二脈系列——音視頻篇之Camera2
    順便提一下CameraCaptureSession.CaptureCallback中的onCaptureProgressed方法很明顯是在Capture過程中的,也就是在onCaptureCompleted之前,所以,在這之前想對圖像幹什麼就看你的了,像美顏等操作就可以在這個方法中實現了。
  • AOP編程_Android優雅權限框架(1)概念基礎
    正文大綱1、Demo地址2、本文所涉技術盤點3、關於Android權限的梗4、初級/中級/高級android開發的權限請求寫法5、AOP優雅權限框架詳解     gradle配置     Java代碼6、AOP思想以及常用AOP框架
  • 10 個免費的移動 App 測試框架 (Android/iOS)
    功能測試框架 對移動應用做 A/B 測試是非常難的,而 FlipTest 可以幫你簡化這個過程。
  • 移動APP自動化測試框架對比
    https://developer.android.com/reference/android/app/Instrumentation.htmlInstrumentaion是Android自帶的一個測試框架,是很多其它測試框架的基礎
  • 想讓Android手機開掛,安裝Xposed框架就行了!
    Xposed(也被稱作Xposed框架、XP框架、Xposed framework),是運行於Android作業系統的一個著名的免費開源Hook框架。其通過替換Android系統的關鍵文件,可以攔截幾乎所有Java函數的調用,並允許通過模塊擴展方式來實現各種功能,模塊中的自定義代碼可以更改調用函數時的行為,常被用來修改Android系統和應用程式的功能。
  • Java 持久層框架之 MyBatis
    MyBatis 簡介MyBatis 是一個基於 Java 的持久層框架,它內部封裝了 JDBC,使開發者只需關注 SQL 語句本身,而不用再花費精力去處理諸如註冊驅動、創建 Connection、配置 Statement 等繁雜過程。
  • Android Jetpack CameraX 庫 Beta 版正式發布!
    forum/camerax-developers新建一個issuehttp://issuetracker.google.com/官方文檔https://developer.android.google.cn/training/camerax官方示例代碼https://github.com/android/camera-samples/tree/master
  • Camera 入門第一篇
    (frameworks\base\core\java\android\hardware\camera2)的 openCamera 方法,根據指定的CameraId 打開。1.1 CameraManager.openCamera 方法cameraId 是一個標識,標識當前要打開的cameracallback 是一個狀態回調,當前camera被打開的時候,這個狀態回調會被觸發的。