驍龍相機啟動流程分析
共 4672字,需瀏覽 10分鐘
·
2024-06-20 18:09
一、驍龍相機啟動流程分析
1. 相機啟動階段關鍵TAG
| 關鍵字 | 解釋 |
|---|---|
| deliverInputEvent | 點擊事件 |
| bindApplication | App 冷啟動 創(chuàng)建application |
| activityStart | 創(chuàng)建camera activity |
| activityResume | camera UI界面開始顯示 |
| connectDevice | cameraFWK 開始鏈接并open sensor |
| CameraHal::openSession | Camera FWK 響應 opencamera |
| camera_module->open | HAL 響應 opencamera |
| HAL3Open | HAL 開始準備opencamera |
| constructDefaultRequestSettings | 獲取Camera request setting 比如一下metadata等 |
| createStream | 創(chuàng)建配流信息,可以查看配幾路流 |
| endConfigure | 配流結束 |
| CameraHal::configureStreams | Camera FWK 配流階段常用搜索關鍵字 |
| HAL3ConfigureStreams | Camera HAL 配流階段常用關鍵字 |
| AdvancedCameraUsecase::Initialize | chi usecase 初始化 |
| submitRequestList,setRepeatingRequests | 發(fā)起預覽請求 |
| CameraHal::processBatchCaptureRequests | 下發(fā)預覽請求 |
| HAL3ProcessCaptureRequest | camera HAL 響應第0幀預覽請求 |
| CSLStreamOn,KMDStreamON: DevType20 | sensor 開始streamon |
| HAL3ProcessCaptureRequest : 1 | Camera HAL 響應第一次預覽請求 |
| Stream 0: first full buffer | Camera FWK接收到返回第一幀 |
| SurfaceView[org.codeaurora.snapcam/com.android.camera.CameraLauncher]#1(BLAST Consumer)1 | Camera app 接收第一幀 |
| BufferTX - SurfaceVieworg.codeaurora.snapcam/com.android.camera.CameraLauncher#529 | Surfaceflinger bufferTX 用來存儲buffer 供SF 消費 |
| VSYNC-sf | SF 開始繪制處理,對應的BufferTX - 1 |
| prepareFrame | SF開始預處理幀 |
| HwcPresentOrValidateDisplay | SF 與HWC進行通信驗證顯示 |
| postComposition Last HWVsyncHint | post 顯示合成結果 |
| presentFence fence 155,waiting for presentFence 155,REThreaded::mapExternalTextureBuffer | 上屏顯示(SF不太熟大致是這個時候屏幕可以顯示處理) |
2. 相機啟動階段拆解
| 階段 | 模塊 | 關鍵字 | 備注 |
|---|---|---|---|
| S0 | system | deliverInputEvent---> ZygoteInit之前 app 開始running的地方 | 創(chuàng)建 camera app |
| S1 | APP | app 開始running的地方--->connectDevice 開始 | Camera App 開始請求openCamera |
| S2 | Camera HAL | connectDevice | HAL 處理open camera 操作 |
| S3 | Camera APP、FWK | connectDevice 結束--->CameraHidlHal::constructDefaultRequestSettings-->createStream-->endConfigure start | 請求配流 |
| S4 | Camera HAL | CameraHal::configureStreams | Camera HAL 響應配流 |
| S5 | Camera APP | CameraHal::configureStreams 結束 -->submitRequestList、setRepeatingRequests | 請求預覽 |
| S6 | Camera HAL | submitRequestList、setRepeatingRequests--> first full buffer | Camera HAL 返回第一幀 |
| S7 | SF | first full buffer-->上屏顯示 | SF送顯階段 |
3. 相機啟動階段概覽
相機啟動階段概覽
4. 相機啟動階段詳解
S0 :Launcher 點擊Camera Icon 響應事件到Camera app 創(chuàng)建
S0 :Launcher 點擊Camera Icon 響應事件到Camera app 創(chuàng)建
S1: Camera APP UI 創(chuàng)建 到 OpenCamera 開始
S1: Camera APP UI 創(chuàng)建 到 OpenCamera 開始
S2 Camera HAL 響應 opencamera
S2 : Camera HAL 響應 opencamera
S3:APP開始下發(fā)請求配流
S3:APP開始下發(fā)請求配流
對應log中創(chuàng)建的2路流如下:
Line 10538: 06-19 18:09:04.173 1907 3718 I CameraDeviceClient: createStream : stream size is 960 x 720
Line 10543: 06-19 18:09:04.180 1907 3718 I CameraDeviceClient: createStream : stream size is 4608 x 3456
S4: Camera HAL 響應配流
S4: Camera HAL 響應配流
S5:請求預覽 startpreview
S5:請求預覽 startpreview
S6: Camera HAL callback 首幀請求結果
S6: Camera HAL callback 首幀請求結果
6.1 一幀callback流程
一幀數(shù)據(jù)傳輸通過Binder 進行
Camera HAL: HAL3ProcessCaptureResult
--->
Camera FWK: processCaptureResult
--->
Camera App: onFrameAvaillable
--->
SF: SurfaceView +1
SF: BufferTX SurfaceView +1
SF:QueueBuffer +1
一幀callback流程
S7: Surface 送顯上屏階段
- App queuebuffer 后SurfaceView +1
- Vsync-sf 到來后SF 從BufferQueue中取出app 送顯幀進行消費合成
SF跟HWC通過bind通信后,調(diào)用postComposition Last HWVsyncHint ,在對應 presentFence fence 到來后,調(diào)用SF的REThreaded::mapExternalTextureBuffer 開始上屏顯示(非display研發(fā),待理清上屏顯示的真正時間)
Surface 送顯上屏階段
評論
圖片
表情
