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

news2025/5/19 5:32:08

和你一起终身学习,这里是程序员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

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

点个在看,为大佬点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某合约任意提取BNB漏洞

1背景描述 合约是一个在满足特定条件时在区块链上执行代码的程序,各方以数字签署合同的方式准许并维护它的其运行。这些代码可以是向朋友汇款、买卖 NFT 虚拟商品等一系列复杂的内容。 存在漏洞的目标合约是一个结合Meme文化病毒式传播与去中心化金融(D…

插件实现:分别通过winform和WPF界面输入操作CAD——CAD c#二次开发

效果如下图所示: 主程序 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Windows…

白酒迈入3.0时代,珍酒李渡如何穿越周期高质增长?

当下,白酒行业仍处深度调整期,过往通过渠道拓展、硬广宣传等推动规模扩张、提升市场份额的模式,愈发难以为继。 行业迫切需要构建高质增长新模式,完成增长动能转换。中国酒业协会理事长宋书玉提出,白酒消费亟需进入品…

人工智能-LangGraph+ChatUI+DeepSeek API搭建本地智能助手

人工智能-LangGraphChatUIDeepSeek API搭建本地智能助手 0 环境说明1 LangGraph2 Agent Chat UI 0 环境说明 环境项环境说明操作系统Windows11 专业版硬件信息联想拯救者Y9000PcondaAnancondaPython版本3.12NodeJs18.20.0 # 使用conda创建python环境 conda create -n langgra…

虚幻5入门

常用操作 运行时,调试相机,按~键,输入ToggleDebugCamera 。进入自由视角 常用节点 gate节点:用于控制该流程通不通,执不执行。Flip Flop节点:反转执行,一次A,一次B。Set Timer by…

慧通测控:汽车RGB氛围灯功能测试介绍

在汽车内饰不断进化的当下,汽车 RGB 氛围灯已从曾经的小众配置,逐渐成为众多车主提升驾乘体验的热门选择。它宛如车内的 “魔法精灵”,凭借丰富的功能,为单调的车厢披上一层梦幻而温馨的色彩。今天,让我们深入探究汽车…

QML Book 学习基础6(定位/布局元素)

目录 定位元素 Column Row Grid Flow 布局元素 1.元素填充它的⽗元素。 2.对齐 定位元素 Column Column (列)元素将它的⼦对象通过顶部对⻬的列⽅式进⾏排列。 spacing 属性⽤来设置每个元素之间的间隔⼤⼩ Row Row (⾏)元…

【SpringCloud】LoadBalance-负载均衡

4. 负载均衡-LoadBalance 4.1 为什么需要负载均衡? 不知道各位心中有没有女神,通常来说一个女神就会有多个舔狗,那这些舔狗呢,就会心甘情愿的帮女神干活,假设女神小美现在有三个舔狗,小美喜欢让这三个舔狗…

自然语言处理(26:(终章Attention 2.)带Attention的seq2seq的实现)

系列文章目录 终章 1:Attention的结构 终章 2:带Attention的seq2seq的实现 终章 3:Attention的评价 终章 4:关于Attention的其他话题 终章 5:Attention的应用 目录 系列文章目录 前言 一、编码器的实现 二、解…

Sentinel实战(二)、流控规则之流控阈值类型、流控模式

spring cloud Alibaba-sentinel-流控 流控规则前置环境一、基于阈值类型(QPS/线程数)维度,设置流控规则demo1、流控规则:设置QPS流控规则设置含义测试,观察流控规则设定后的效果demo2、流控规则-设置线程数流控规则设置含义测试,观察流控规则设定后的效果二、基于流控模…

AI与.NET技术实操系列(四):使用 Semantic Kernel 和 DeepSeek 构建AI应用

1. 引言 在人工智能技术飞速发展的今天,大型语言模型(Large Language Models, LLMs)已成为智能应用开发的核心驱动力。从智能客服到自动化内容生成,LLMs的应用正在深刻改变我们的工作和生活方式。 对于.NET开发者而言,…

HarmonyOS:ComposeTitleBar 组件自学指南

在日常的鸿蒙应用开发工作中,我们常常会面临构建美观且功能实用的用户界面的挑战。而标题栏作为应用界面的重要组成部分,它不仅承载着展示页面关键信息的重任,还能为用户提供便捷的操作入口。最近在参与的一个项目里,我就深深体会…

25-智慧旅游系统(协同算法)三端

介绍 技术: 基于 B/S 架构 SpringBootMySQLLayuivue 环境: Idea mysql maven jdk1.8 node 管理端功能 首页展示图表:以数据可视化方式展示关键业务数据。 用户管理:管理系统用户,包括查看、编辑等操作。 供应商管…

数据结构实验1.2: 顺序表的基本运算

文章目录 一,问题描述二,基本要求三,算法分析(1)插入算法(2)删除算法 四,参考程序五,运行效果 一,问题描述 创建一个顺序表,编程实现顺序表的下列…

【QT】QT中的信号与槽

QT中的信号与槽 一、信号与槽函数的作用二、如何关联信号与槽函数1、借助集成开发环境,右键转到槽函数示例代码: 2、调用connect函数手动关联信号与槽函数 三、扩展四、总结信号与槽的特点1、一个类如果要使用信号以及槽函数,那么该类的定义中…

使用Python爬虫获取1688商品(按图搜索)接口

一、引言 随着电商行业的不断发展,消费者对商品搜索的效率和准确性要求越来越高。1688作为国内领先的B2B电商平台,提供了丰富的商品搜索功能,其中按图搜索功能(类似于淘宝的拍立淘)极大地提升了用户的购物体验。本文将…

AI Agent拐点已至,2B+2C星辰大海——行业深度报告

大家好,我是吾鳴。 今天吾鳴要给大家分享一份由开源证券出品的关于AI Agent的报告,报告从AI Agent商业化应用、C端B端应用与布局,投资建议等方向介绍2025AI Agent新元年。报告一共28页PDF,文末有完整版下载地址。 内容摘要 2025年…

【CSS】- 表单控件的 placeholder 如何控制换行显示?

表单控件的 placeholder 如何换行展示&#xff1f; HTML 中&#xff0c;<textarea> 元素的 placeholder 属性默认情况下不支持换行。不过&#xff0c;可以通过以下几种方法来实现换行效果&#xff1a; 模版字符串 模板字符串可以轻松地创建多行字符串&#xff0c;而不…

node.js、npm相关知识

Node.js 是一个基于 Chrome V8 JavaScript 引擎 构建的开源、跨平台的 JavaScript 运行时环境&#xff0c;主要用于服务器端编程。它允许开发者使用 JavaScript 编写高性能的后端服务&#xff0c;突破了 JavaScript 仅在浏览器中运行的限制。 npm&#xff08;Node Package Man…

基于HTML5和CSS3实现3D旋转相册效果

基于HTML5和CSS3实现3D旋转相册效果 这里写目录标题 基于HTML5和CSS3实现3D旋转相册效果项目介绍技术栈核心功能实现原理1. HTML结构2. CSS样式设计2.1 基础样式设置2.2 容器样式2.3 图片样式 3. JavaScript实现4. 交互功能实现4.1 触摸和鼠标拖拽4.2 播放控制 项目亮点技术难点…