Camera2API筆記

1.?常用對象

  1. CameraManager 相機服務。用于獲取相機對象和相機信息。
  2. CameraDevices 相機設備。負責連接相機、創建會話、生成拍攝請求,管理相機生命周期。
  3. CameraCaptureSession 相機拍攝會話。用于預覽和拍攝。一個相機只能有一個活躍會話。打開新會話時,舊會話自動關閉。
  4. SessionConfiguration 拍攝會話配置。
  5. CaptureRequest 拍攝請求。通知相機進行拍攝。每個請求產生一個CaptureResult對象,并為目標Surface產生幀。請求可以通過addTarget關聯若干個Surface,但它們必須是創建拍攝會話時使用的Surface的子集。
  6. CameraCharacteristics 相機信息。
  7. CaptureResult 部分拍攝結果信息。
  8. TotalCaptureResult 完整拍攝結果信息。
  9. ImageReader 圖片讀取器。接收圖片的對象。
  10. Surface 底片。接收或展示原始影像的對象,是數據管道終點。可以綁定到SurfaceView(預覽)、ImageReader(獲取圖像)或MediaRecorder(錄制視頻)。

2.?監聽器

  1. CameraDevice.StateCallback 相機狀態監聽器。
  2. CameraCaptureSession.StateCallback 相機拍攝會話狀態監聽器。
  3. CameraCaptureSession.CaptureCallback 拍攝結果監聽器。CaptureCallback只通知結果,圖片需要從ImageReader.OnImageAvailableListener中獲取。CaptureCallback和OnImageAvailableListener不保證發生順序。
  4. ImageReader.OnImageAvailableListener 圖片監聽器。
  5. SurfaceTexture.OnFrameAvailableListener 幀就緒監聽器。
  6. MediaRecorder.OnInfoListener? 錄制狀態監聽器。
  7. MediaRecorder.OnErrorListener 錄制錯誤監聽器。

3.?使用Camera2 API時涉及的線程/進程

  1. 相機服務進程 cameraserver系統進程(用戶態服務),負責管理相機硬件資源、處理底層傳感器控制和圖像處理流水線。包括打開/關閉相機設備、配置會話、處理捕獲請求和返回元數據,通過Binder與應用進程通信。
  2. 圖像渲染線程 處理預覽畫面和拍照結果的渲染,通常與顯示界面(如 SurfaceView/TextureView)綁定。
    1. SurfaceView 由系統單獨創建渲染線程(非主線程),通過雙緩沖機制高效更新預覽畫面。
    2. TextureView 依賴主線程或 OpenGL 線程渲染,需開啟硬件加速,但更靈活(支持縮放、旋轉)。
    3. 數據接收 通過ImageReader的OnImageAvailableListener在子線程中異步接收圖像數據。
  3. 應用主線程 管理UI交互、權限請求、生命周期回調,并協調其他線程的工作。所有Camera2耗時操作(如打開相機、創建會話)需在后臺線程執行,避免阻塞UI。通常使用HandlerThread配合Handler處理回調。通過Handler將相機事件(如 onCaptureCompleted)從后臺線程轉發到主線程更新UI。

4.?CaptureRequest分類

  1. 重復請求。通過setRepeatingRequest()提交的請求會持續執行,形成一個持續請求鏈,直到被手動停止(stopRepeating())或被新請求覆蓋。主要用于預覽等需連續輸出圖像流的場景,例如實時顯示攝像頭畫面。重復請求不阻塞后續請求,系統自動按幀率持續處理。但優先級較低,可被單次請求(如拍照)中斷。中斷后需要手動恢復預覽。
  2. 單次請求。通過capture()或captureBurst()提交,執行后自動清除。適用于拍照、手動對焦鎖定等需即時觸發的操作。單次請求優先級高,會中斷重復請求運行。請求提交后立即返回,拍攝結果通過回調異步返回。

在CameraCaptureSession中,可以連續且不等待拍攝完成就發送新CaptureRequest。但要注意避免請求過多超出流水線容量,導致幀丟棄或延遲。可以通過CaptureCallback監聽狀態,控制請求頻率。通過CameraCharacteristics的REQUEST_PIPELINE_MAX_DEPTH可以得到流水線容量。

5.?拍攝一張照片需要確認下列資源或狀態就緒

  1. 資源就緒。
    1. 獲得授權。
    2. 相機CameraDevice就緒。
    3. 相機拍攝會話CameraCaptureSession就緒。
    4. 圖像閱讀器ImageReader就緒(提供Surface)。
  2. 3A狀態就緒。
    1. 自動曝光AE收斂(AE_STATE_CONVERGED)或鎖定(AE_STATE_LOCKED)。否則可能過曝/欠曝。
    2. 自動對焦AF鎖定(AF_STATE_FOCUSED_LOCKED)。連續對焦模式下可以容忍ACTIVE_SCAN狀態。否則可能主體模糊或焦點偏移。
    3. 自動白平衡AWB收斂(AWB_STATE_CONVERGED)。否則可能產生色偏。
  3. 其他狀態
    1. 閃光燈充電完成(FLASH_STATE_READY)。否則可能導致閃光失敗或亮度不足。
    2. 光學防抖OIS鏡片穩定(LENS_STATE_STATIONARY)。否則可能防抖不生效。
    3. 降噪模式(NOISE_REDUCTION_MODE_HIGH_QUALITY)。否則可能降噪算法不生效。
    4. 傳感器穩定性(SENSOR_SENSITIVITY)。

6.?中斷3A算法的操作

  1. 切換控制模式CONTROL_MODE。
  2. 切換場景模式SCENE_MODE。
  3. 觸發3A操作。
  4. 鎖定或解鎖3A參數。
  5. 停止預覽流stopRepeating()。
  6. 請求中包含與當前3A參數沖突的3A參數。
  7. 重啟相機或會話。
  8. 光線劇烈變化。

7.?拍攝請求處理路徑

CameraCaptureSessionImpl.captureCameraDeviceImpl.captureCameraDeviceImpl.submitCaptureRequest檢查Target和Surfacethrow "Each request must have at least one Surface target"throw "Null Surface targets are not allowed"stopRepeating() // 中斷重復請求。ICameraDeviceUserWrapper.submitRequestList()ICameraDeviceUser.submitRequestList()// 通過ICameraDeviceUser.aidl調用C++代碼。CameraDeviceClient::submitRequestListCamera3Device::captureListCamera3Device::submitRequestsHelperif (repeating) Camera3Device::RequestThread::setRepeatingRequestsList<sp<CaptureRequest>> mRepeatingRequests.push_back// 后續由Camera3Device::RequestThread異步處理。elseCamera3Device::RequestThread::queueRequestListList<sp<CaptureRequest>> mRequestQueue.push_back// 后續由Camera3Device::RequestThread異步處理。

8.?后臺線程主循環

Camera3Device::RequestThread::threadLoop() {waitForNextRequestBatch();prepareHalRequests();sendRequestsBatch();Camera3Device::HalInterface::processBatchCaptureRequestsCameraDeviceSession::processCaptureRequestCameraDeviceSession::processOneCaptureRequestcamera3_device_t->ops->process_capture_requestcamera3_device_ops.process_capture_request// 通用實現。Camera::processCaptureRequestCamera::processCaptureBuffer
}

9.?使用DngCreator保存RAW_SENSOR影像的條件

  1. 拍攝完成,已經得到TotalCaptureResult結果。
  2. ImageReader.OnImageAvailableListener已經收到圖片。

10.?CaptureCallback用于跟蹤拍攝請求處理進度

  1. onCaptureStarted 相機開始拍攝(曝光)
  2. onReadoutStarted 相機開始讀取傳感器數據
  3. onCapturePartial 拍攝獲得部分結果
  4. onCaptureProgressed 拍攝獲得進展
  5. onCaptureCompleted 單次拍攝完成
  6. onCaptureFailed 拍攝失敗
  7. onCaptureSequenceCompleted 拍攝序列全部完成
  8. onCaptureSequenceAborted 拍攝序列中斷
  9. onCaptureBufferLost

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88497.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

觸控屏gt1947

比較器判斷是否翻轉&#xff0c;周期控制器負責控制周期&#xff08;period&#xff09;。sample采器有多個影子&#xff0c;每次采樣查看是否到了翻轉的時候。

DNS和ICMP

域名介紹在網絡通信中&#xff0c;需要用到ip加port&#xff0c;但是ip并不方便記憶&#xff0c;于是我們常用域名來對應一個ip例如&#xff1a;www.baidu.com 對應 156.36.56.98&#xff08;隨便寫的&#xff09;com: 一級域名. 表示這是一個企業域名. 同級的還有 "…

2022 年 12 月青少年軟編等考 C 語言六級真題解析

目錄 T1. 電話號碼T2. 區間合并T3. 撲克牌排序T4. 現代藝術思路分析T1. 電話號碼 題目鏈接:SOJ D1137 此題為 2021 年 12 月六級第一題原題,見 2021 年 12 月青少年軟編等考 C 語言六級真題解析中的 T1。 T2. 區間合并 題目鏈接:SOJ D1112 此題為 2021 年 9 月六級第三…

無鎖隊列:從零構建生產者-消費者數據結構

高性能無鎖隊列&#xff1a;從零構建生產者-消費者數據結構 問題的本質 生產者-消費者問題的核心挑戰不在于數據傳輸&#xff0c;而在于協調。傳統的鎖機制雖然簡單&#xff0c;但帶來了三個致命問題&#xff1a; 性能瓶頸&#xff1a;線程阻塞和上下文切換優先級反轉&#xff…

JAVA面試寶典 -《Spring IOC核心:Bean生命周期全解析》

文章目錄&#x1f331; 《Spring IOC核心&#xff1a;Bean生命周期全解析》1?? 引言&#xff1a;Bean 生命周期為什么重要&#xff1f;2?? Bean 生命周期概覽&#xff08;圖示 簡要說明&#xff09;3?? 每一步詳細解析&#xff08;源碼理解 示例&#xff09;3.1 &#…

Python 類型注解實戰:`Optional` 與安全數據處理的藝術

Python 類型注解實戰&#xff1a;Optional 與安全數據處理的藝術 在 Python 開發中&#xff0c;類型注解&#xff08;Type Hints&#xff09;已經成為現代 Python 項目的標配。本文將通過一個真實的認證令牌獲取函數 get_auth_token()&#xff0c;深入解析 Optional 類型的應用…

深入MyBatis:CRUD操作與高級查詢實戰

引言 在上一篇文章中&#xff0c;我們介紹了Mybatis的基礎使用。 如有需要請移步查看&#xff1a; MyBatis入門&#xff1a;快速掌握用戶查詢實戰https://blog.csdn.net/qq_52331401/article/details/149270402?spm1001.2014.3001.5502 今天&#xff0c;我將通過一個完整的…

Flink DataStream API詳解(二)

一、引言 咱兩書接上回&#xff0c;上一篇文章主要介紹了DataStream API一些基本的使用&#xff0c;主要是針對單數據流的場景下&#xff0c;但是在實際的流處理場景中&#xff0c;常常需要對多個數據流進行合并、拆分等操作&#xff0c;以滿足復雜的業務需求。Flink 的 DataS…

Unity3D游戲線上崩潰排查指南

前言 排查Unity3D線上游戲崩潰是個系統工程&#xff0c;需要結合工具鏈、日志分析和版本管理。以下是詳細的排查指南和關鍵步驟&#xff1a; 對惹&#xff0c;這里有一個游戲開發交流小組&#xff0c;希望大家可以點擊進來一起交流一下開發經驗呀&#xff01; 一、崩潰信息收…

DPDK性能優化實踐:系統級性能調優的方法論與實戰(一套通用的方法論)

性能優化的挑戰與現實困境 在高性能網絡處理領域&#xff0c;性能優化往往被視為一門“玄學”而非科學。許多開發者在面對性能瓶頸時&#xff0c;要么盲目追求單一指標的極致優化&#xff0c;要么采用"試錯法"進行零散的局部調優&#xff0c;結果往往是投入大量精力卻…

Docker的/var/lib/docker/目錄占用100%的處理方法

文章目錄 一、問題描述 二、解決措施 三、可能遇到的問題 問題1、問題描述&#xff1a;執行 sudo systemctl stop docker 命令時&#xff0c;提示 Warning: Stopping docker.service, but it can still be activated by: docker.socket 問題2、問題描述&#xff1a;執行 s…

【UE教程/進階】Slate鏈式編輯原理

目錄鏈式編輯操作" . "操作" "操作" [ ] "鏈式編輯 SNew().&#xfeff;[] 操作" . " SLATE_ARGUMENT(ArgType, ArgName) 宏 調用宏 SLATE_PRIVATE_ARGUMENT_VARIABLE(ArgType, ArgName) &#xff0c;在FArgument結構體中添加了變量…

將手工建模模型(fbx、obj)轉換為3dtiles的免費工具!

文章目錄1、工具下載2、使用說明3、詳細說明命令行格式示例命令參數說明4、源碼地址1、工具下載 百度網盤下載鏈接 選擇最新版本下載即可&#xff0c;支持Linux和Windows系統 2、使用說明 1&#xff09;按住鍵盤winr鍵&#xff0c;在彈出的窗口中輸入cmd 2&#xff09;點擊…

FreeRTOS源碼學習之內核初始化

目錄 前言 一、主函數內容 二、osKernelInitialize ()內核初始化函數內容 三、IS_IRQ()宏定義中斷檢測函數內容 四、如果這篇文章能幫助到你&#xff0c;請點個贊鼓勵一下吧ξ( ?&#xff1e;??)~ 前言 使用STM32CubeMX添加FreeRTOS進入工程之后&#xff0c;會自動在ma…

Docker—— 鏡像構建原因

在現代軟件開發和運維中&#xff0c;Docker已成為一種非常流行的工具&#xff0c;它通過容器化應用程序來簡化部署過程。然而&#xff0c;默認的官方鏡像往往只能滿足基礎需求&#xff0c;無法涵蓋所有特定項目的具體要求。原因說明系統級改動無法通過 volume 實現修改用戶、刪…

鋰電池自動化生產線的現狀與發展

鋰電池自動化生產線的概述鋰電池自動化生產線是指采用自動化設備和控制系統&#xff0c;實現鋰電池從原材料到成品的全流程自動化生產過程。隨著新能源產業的快速發展&#xff0c;鋰電池作為重要的儲能元件&#xff0c;其生產制造技術也在不斷進步。自動化生產線通過減少人工干…

java底層的native和沙箱安全機制

沙箱安全機制沙箱&#xff08;Sandbox&#xff09;安全機制是一種將程序或代碼運行在隔離環境中的安全技術&#xff0c;旨在限制其對系統資源&#xff08;如文件系統、網絡、內存、其他進程等&#xff09;的訪問權限&#xff0c;從而降低潛在惡意代碼帶來的風險。其核心思想是“…

【分享】文件擺渡系統適配醫療場景:安全與效率兼得

根據國家信息安全相關法規要求&#xff0c;醫院為了網絡安全&#xff0c;大多會采用網閘等隔離手段&#xff0c;將網絡隔離為內網和外網&#xff0c;但網絡隔離后&#xff0c;醫院的內外網間仍存在較為頻繁的文件擺渡需求。文件擺渡系統則是可以解決跨網絡或跨安全域文件傳輸中…

vscode 中的 mermaid

一、安裝軟件 Mermaid preview Mermaid support 二、運行命令 創建.md 文件右鍵選擇 ?Open Preview?&#xff08;或按 CtrlShiftV&#xff09; 三、流程圖 注意&#xff1a; 要md 文件要保留 mermaid 1. #mermaid-svg-nchqbvlWePe5KCwJ {font-family:"trebuchet ms"…

微服務引擎 MSE 及云原生 API 網關 2025 年 6 月產品動態

點擊此處&#xff0c;了解微服務引擎 MSE 產品詳情。