当前位置: 首页 > news >正文

MTK Camera 照片切视频Systrace拆解分析

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、Systrace 拆解概览
二、Systrace 阶段拆解详解

一、Systrace 拆解概览

MTK Camera 照片切换视频trace 拆解(非切换摄像头类)

照片切换视频模块trace 关键字
S0Camera APPdeliverInputEvent ⇒ abortCaptures/CameraHal::flush 开始
S1Camera HALabortCaptures/CameraHal::flush
S2Camera APPabortCaptures/CameraHal::flush 结束 ⇒ CameraHal::configureStreams start
S3Camera HALCameraHal::configureStreams
S4Camera APPCameraHal::configureStreams end ⇒ setRepeatingRequest start
S5Camera HALsetRepeatingRequest start ⇒ first full buffer
S6Camera APP、SFfirst full buffer ⇒ 第一帧显示(onPreviewOk)

二、Systrace 阶段拆解详解

2.1 点击照片模式切换视频模式

S0 deliverInputEvent ⇒ abortCapture/CameraHal::flush 开始

Camera 响应点击事件开始abortCapture
Camera 响应点击事件开始abortCapture

Systrace 关键字:
Camera app 点击照片切换视频模式响应:deliverInputEvent
Camera app 下发停止预览请求:abortCaptures
Camera FWK 响应abortcapture 的处理: flush 、CameraHal::flush

S1 abortCaptures/CameraHal::flush

CameraHAL 响应flush的流程
CameraHAL 响应flush的流程
StreamingNode flush

Systrace 关键字:
StreamingNode::flush
P2_Dispatch:notifyFlush()
P2_Streaming:notifyFlush()

P2_Dispatch:waitFlush()
P2_Streaming:waitFlush()

CaptureNode flush

Systrace 关键字:
CaptureNode::flush
P2_Capture:notifyFlush()
P2_Capture:waitFlush()

S2 abortCaptures/CameraHal::flush 结束 ⇒ CameraHal::configureStreams start

初始化videomode,MediaRecorder ,prepare MediaRecorder
初始化videomode,MediaRecorder ,prepare MediaRecorder

Systrace 关键字:
videoMode.doInitMode
AIDL::cpp::ICameraService::getNumberOfCameras::cppClient

videoMode.mediaRecorderinit
videoMode.mediaRecorderPrepare

Camera APP通过bind 跟mediaserver 进行通讯,并创建createRecord

createRecord 实例
image.png

AIDL::cpp::IAudioFlingerService::createRecord::cppClient

S3 CameraHal::configureStreams

configureStreams 概览
configureStreams 概览

Systrace 关键字:
createCaptureSession
endConfigure
configureStreams
configureStreamsLocked
CameraHal::configureStreams

Delete3路照片流
Delete3路照片流

Systrace 关键字:
deleteStream
disconnect
freeBuffer

创建3路视频流
创建3路视频流

Systrace 关键字:
AIDL::cpp::ICameraDeviceUser::createStream::cppServer
createStream

Camera HAL CaptureNode ,StreamNode uninit
Camera HAL CaptureNode ,StreamNode uninit

Systrace 关键字:
StreamingNode::flush
CaptureNode::flush
CaptureNode::uninit
StreamingNode::uninit

StreamingNode flush && CaptureNode flush
StreamingNode flush && CaptureNode flush
StreamingNode flush

Systrace 关键字:
StreamingNode::flush
P2_Dispatch:waitFlush()
P2_Streaming:waitFlush()
P2_Dispatch:notifyFlush()
P2_Streaming:notifyFlush()

CaptureNode flush

Systrace 关键字:
CaptureNode::flush
P2_Capture:waitFlush()
P2_Capture:notifyFlush()

CaptureNode uninit &&StreamingNode uninit
CaptureNode uninit &&StreamingNode uninit
CaptureNode uninit

CaptureNode::uninit
P2_Capture:uninit()

StreamingNode uninit

StreamingNode::uninit
P2_Dispatch:uninit()
P2_Streaming:uninit()
releaseGeneralPipe
uninit
uninitPool
fpipe.p2g.fullImg.destroy
~GraphicBuffer
free
freeBuffer
TPI uninit
uninitHalISP
StreamingNode::uninitLock
uninit3DNR
uninitDsdnPools
releaseBuffer
fpipe.fullImg.destroy
uninitNodes
uninitSMVR

Camera HAL 决策配流Feature evaluateConfiguration
Camera HAL 决策配流Feature evaluateConfiguration

Systrace 关键字:
configureStreams
eatureSettingPolicy::evaluateConfiguration
evaluateCaptureConfiguration
updateStreamConfiguration

为申请的3路视频流申请buffers
为申请的3路视频流申请buffers

Systrace 关键字:
configureStreams
initProducer-Hal:Image:FD
initProducer-Hal:Image:P1:Resizeraw_main1
initProducer-Hal:Image:STT_main1
allocateBuffers
endConfigure dump

Camera FWK 配流结束 finishConfiguration
配流结束 finishConfiguration

Systrace 关键字:
endConfigure
finishConfiguration

Camera FWK 配流结束 finishConfiguration 的同时 FdNode init

,StreamNode init,CaptureNode init

Camera FWK 配流结束 finishConfiguration 的同时 FdNode init ,StreamNode init,CaptureNode init

Systrace 关键字:
finishConfiguration
FdNode init
StreamingNode::init
CaptureNode::init
submitRequestList

StreamingNode::init
StreamingNode::init

Systrace 关键字:
StreamingNode::init
P2_Dispatch:init()
P2_Streaming:FeaturePipe create
prepareGeneralPipe
P2_Streaming:FeaturePipe init
TPI init_config

CaptureNode::init && config
CaptureNode::init && config

Systrace 关键字:
CaptureNode::init
P2_Capture:init()
P2_Capture:FeaturePipe create & init
CaptureNode::config
P2_Capture:config()

S4:CameraHal::configureStreams 结束 -->submitRequestList

CameraHal::configureStreams 结束 -->submitRequestList 下发预览请求 trace TAG
CameraHal::configureStreams 结束 -->submitRequestList
submitRequestList 下发预览请求
submitRequestList 下发预览请求

Sysrace TAG:
AIDL::cpp::ICameraDeviceUser::submitRequestList::cppServer
submitRequestList
setStreamingRequestList
submitRequestsHelper
setRepeatingRequests

S5:submitRequestList --> first full buffer

第一帧预览请求
第一帧预览请求 Trace
第一帧预览请求的trace

Camera FWK trace TAG:
sendRequestsBatch
CameraHal::processBatchCaptureRequests
frame capture

Camera HAL trace TAG:
processCaptureRequest

第一帧出图callback 请求
第一帧出图定位: callback Camera FWK 关键trace TAG
和你一起终身学习,这里是程序员Android

Trace TAG:
processCaptureResults
Stream 0: first full buffer

第一帧出图callback Camera HAL --> Camera FWK -->Camera APP
第一帧出图callback Camera HAL --> Camera FWK -->Camera APP
第一帧callback 流程(Camera HAL -->Camera FWK)
第一帧callback 流程(Camera HAL -->Camera FWK)

第一帧出图callback Camera HAL trace TAG
processCaptureResult
第一帧出图callback Camera FWK 关键 trace TAG:first full buffer
Stream 0: first full buffer
frame capture

第一帧callback 流程(Camera FWK -->Camera APP)
第一帧callback 流程(Camera FWK -->Camera APP)

Camera APP trace TAG:
SurfaceTexture

S6: first full buffer ⇒ 第一帧显示(onPreviewOk)

第一帧callback 流程(Camera APP -->SurfaceFliger 送显示)
第一帧callback 流程(Camera APP -->SurfaceFliger 送显示)

SF 显示trace TAG:
surfaceflinger
vsync-sf
BufferTx
Fence

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点个在看,为大佬点赞!

相关文章:

  • leetcode138.随机链表的复制
  • 通配符(Wildcard)
  • 很简单 的 将字幕生成视频的 方法
  • Ansible playbook-ansible剧本
  • Linux中的系统管理和优化
  • 人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开!
  • AISEO (GEO )中的知识图谱
  • List中多个数据相同,保留最新日期数据
  • 设计模式 三、结构型设计模式
  • 【夜话系列】DelayQueue延迟队列(下):实战应用与面试精讲
  • 51. “闲转易”交易平台小程序(基于springbootvue)
  • 两个有序序列的合并-手摇算法
  • 【深度学习新浪潮】Grok过去两周的进展一览(2025.04.01)
  • [学成在线]09-课程预览
  • 论文阅读笔记:Denoising Diffusion Implicit Models (2)
  • Spring Boot 快速入手
  • node.js、npm相关知识
  • Redis 在 Linux 系统的安装指南
  • 【Docker项目实战】使用Docker部署NoteFlow笔记工具
  • 本地RAG知识库,如何进行数据结构化和清洗?
  • 中国以“大幅开放市场”回应贸易保护主义
  • 昆廷·斯金纳:作为“独立自主”的自由
  • 人们为何热衷谈论八卦?
  • “五一”假期银联、网联共处理支付交易234.39亿笔
  • 上海国际电影节特设“走进大卫·林奇的梦境”单元
  • 甘肃省政府原党组成员、副省长杨子兴被提起公诉