骁龙相机启动流程分析

一、骁龙相机启动流程分析

1. 相机启动阶段关键TAG

关键字解释
deliverInputEvent点击事件
bindApplicationApp 冷启动 创建application
activityStart创建camera activity
activityResumecamera UI界面开始显示
connectDevicecameraFWK 开始链接并open sensor
CameraHal::openSessionCamera FWK 响应 opencamera
camera_module->openHAL 响应 opencamera
HAL3OpenHAL 开始准备opencamera
constructDefaultRequestSettings获取Camera request setting 比如一下metadata等
createStream创建配流信息,可以查看配几路流
endConfigure配流结束
CameraHal::configureStreamsCamera FWK 配流阶段常用搜索关键字
HAL3ConfigureStreamsCamera HAL 配流阶段常用关键字
AdvancedCameraUsecase::Initializechi usecase 初始化
submitRequestList,setRepeatingRequests发起预览请求
CameraHal::processBatchCaptureRequests下发预览请求
HAL3ProcessCaptureRequestcamera HAL 响应第0帧预览请求
CSLStreamOn,KMDStreamON: DevType20sensor 开始streamon
HAL3ProcessCaptureRequest : 1Camera HAL 响应第一次预览请求
Stream 0: first full bufferCamera FWK接收到返回第一帧
SurfaceView[org.codeaurora.snapcam/com.android.camera.CameraLauncher]#1(BLAST Consumer)1Camera app 接收第一帧
BufferTX - SurfaceVieworg.codeaurora.snapcam/com.android.camera.CameraLauncher#529Surfaceflinger bufferTX 用来存储buffer 供SF 消费
VSYNC-sfSF 开始绘制处理,对应的BufferTX - 1
prepareFrameSF开始预处理帧
HwcPresentOrValidateDisplaySF 与HWC进行通信验证显示
postComposition Last HWVsyncHintpost 显示合成结果
presentFence fence 155,waiting for presentFence 155,REThreaded::mapExternalTextureBuffer上屏显示(SF不太熟大致是这个时候屏幕可以显示处理)

2. 相机启动阶段拆解

阶段模块关键字备注
S0systemdeliverInputEvent---> ZygoteInit之前 app 开始running的地方创建 camera app
S1APPapp 开始running的地方--->connectDevice 开始Camera App 开始请求openCamera
S2Camera HALconnectDeviceHAL 处理open camera 操作
S3Camera APP、FWKconnectDevice 结束--->CameraHidlHal::constructDefaultRequestSettings-->createStream-->endConfigure start请求配流
S4Camera HALCameraHal::configureStreamsCamera HAL 响应配流
S5Camera APPCameraHal::configureStreams 结束 -->submitRequestList、setRepeatingRequests请求预览
S6Camera HALsubmitRequestList、setRepeatingRequests--> first full bufferCamera HAL 返回第一帧
S7SFfirst full buffer-->上屏显示SF送显阶段

3. 相机启动阶段概览

01b95bae78b1d192c86773a8f80c4171.png
相机启动阶段概览

4. 相机启动阶段详解

S0 :Launcher 点击Camera Icon 响应事件到Camera app 创建

d96bd79725fa0c6f5ee9259fd2dee567.png
S0 :Launcher 点击Camera Icon 响应事件到Camera app 创建

S1: Camera APP UI 创建 到 OpenCamera 开始

5b9deae566f0dba4c6c95861df5dae66.png
S1: Camera APP UI 创建 到 OpenCamera 开始

S2 Camera HAL 响应 opencamera

0f192aaf52b1fec5df1159d6ab8a7ad3.png
S2 : Camera HAL 响应 opencamera

S3:APP开始下发请求配流

703fbf9ef51c1f0e1f6b3224a65ba552.png
S3:APP开始下发请求配流

对应log中创建的2路流如下:

Line 10538: 06-19 18:09:04.173  1907  3718 I CameraDeviceClient: createStream : stream size is 960 x 720Line 10543: 06-19 18:09:04.180  1907  3718 I CameraDeviceClient: createStream : stream size is 4608 x 3456

S4: Camera HAL 响应配流

f6180143ddf01ab5b7d64a0dd001f180.png
S4: Camera HAL 响应配流

S5:请求预览 startpreview

3cd817449cd6abef63707db26a5d936d.png
S5:请求预览 startpreview

S6: Camera HAL callback 首帧请求结果

71e3bfa92e6c4aaebb725ba41f5c0cea.png
S6: Camera HAL callback 首帧请求结果
6.1 一帧callback流程

一帧数据传输通过Binder 进行
Camera HAL: HAL3ProcessCaptureResult
--->
Camera FWK: processCaptureResult
--->
Camera App: onFrameAvaillable
--->
SF: SurfaceView +1
SF: BufferTX SurfaceView +1
SF:QueueBuffer +1


c21d240f5dd0ed0b8517c65953c5dd84.png
一帧callback流程

S7: Surface 送显上屏阶段

  1. App queuebuffer 后SurfaceView +1
  2. Vsync-sf 到来后SF 从BufferQueue中取出app 送显帧进行消费合成
  3. SF跟HWC通过bind通信后,调用postComposition Last HWVsyncHint ,在对应 presentFence fence 到来后,调用SF的REThreaded::mapExternalTextureBuffer 开始上屏显示(非display研发,待理清上屏显示的真正时间)


    d4e885d73d789db4a6cc88b8e466535a.png
    Surface 送显上屏阶段

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

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

相关文章

发那科 偏移实现三维码垛

1: OVERRIDE5% ;2: UFRAME_NUM0 ;3: UTOOL_NUM2 ;4: CALL TOOL_OFF ;5:J P[1:home] 30% FINE ;6: FOR R[3]0 TO 2 ;7: FOR R[1]0 TO 1 ;8: FOR R[2]0 TO 3 ;9: PR[5:偏移]LPOS-LPOS ;10: PR[5,3:偏移](PR[5,3:偏移]-5*(R[1]*4R[2]R[3]*8)) ;11: OFFSET COND…

MySQL系列-安装配置使用说明(MAC版本)

1、前言 本文将介绍MySQL的安装配置以及基本语法操作说明 环境:mac 版本:MySQL 8.0.28 之前电脑安装卸载过,后面在装的时候遇到一些问题,用了四五天才解决,主要是参考 https://blog.csdn.net/zz00008888/article/deta…

大厂晋升学习方法一:海绵学习法

早晨 30 分钟 首先,我们可以把起床的闹钟提前 30 分钟,比如原来 07:30 的闹钟可以改为 07:00。不用担心提前 30 分钟起床会影响休息质量,习惯以后,早起 30 分钟不但不会影响一天的精力,甚至可能反而让人更有精神。早起…

BUG:AttributeError: module ‘numpy‘ has no attribute ‘bool‘.

BUG:AttributeError: module ‘numpy’ has no attribute ‘bool’. 环境 Linux numpy 1.26.3详情 使用NumPy库时遇到:AttributeError: module numpy has no attribute bool报错。 错误原因 目前最新的的NumPy版本(如1.26版本)中布尔类型…

SAP ScreenPersonas

https://developers.sap.com/mission.screen-personas.html 跟着这个练习做一遍就了解了Personas 访问SAP提供的Personas练习系统 申请用户 登录练习系统 随便找一个可以支持Personas的程序搞起来,比如IW51 执行后等它出现这个图标就可以开始了.

js中的window和Window

示例: window.name name; console.log(window.name) // name console.log(Window.name) // Window由此可见Window和window是有区别的。 console.log(Object.prototype.toString.call(Window)); // [object Function] console.log(Object.prototype.toString.c…

服务器雪崩的应对策略之----超时设置

在服务器编程中,超时设置(Timeout Configuration)是确保系统稳定性和提高性能的重要手段。合理的超时设置可以防止长时间等待导致的资源浪费,并在依赖服务不可用时快速响应,从而避免系统陷入僵局。下面介绍几种常见的超…

中服云产品远程运维系统

中服云产品远程运维系统主要针对设备售后市场服务的管理,利用工业物联网技术,一方面面向设备生产厂商,将分散的经销商、客户、销售出去的设备统一管理;另一方面面向设备使用厂家,实现设备实时运行监控;系统…

融资融券有哪些优势和风险,融资融券利息怎么算,利率最低是?4.0

融资融券的优势 1. 提高资金利用率:获得额外的资金或股票交易,提高资金利用率,扩大投资规模。 2. 降低投资风险:通过融资融券买入多只股票分散风险,降低单一股票持仓风险。 3. 增加投资收益:提供更多的交…

视创云展为企业虚拟展厅搭建,提供哪些功能?

在当下数字化浪潮中,如何为用户创造更富生动性和真实感的展示体验,已成为企业营销策略的核心。借助视创云展的线上虚拟3D企业展厅搭建服务,利用3D空间漫游和VR技术的融合,可以为用户呈现出一个既真实又充满想象力的全景图或三维模…

Redis-数据类型-String

文章目录 1、通过客户端连接redis2、查看当前数据库的key的数量3、切换数据库3.1、切换到1数据库3.2、切换到2数据库3.3、切换到默认的数据库,0数据库 4、当前数据库没有数据5、添加键值对6、查看当前库所有key7、清空当前库8、设置存活的秒数(例如验证码…

全域外卖系统源码在哪些渠道值得推荐?

当前,全域外卖的热度持续飙升,并且隐隐有了大爆的趋势。许多创业者也因此有了进军全域外卖赛道的想法,以全域外卖系统源码在哪找为代表多个相关问题因此成为了多个创业者交流群的常客。 根据中国互联网络信息中心(CNNIC&#xff0…

小红书xs-xt解密

在进行小红书爬虫的时候,有一个关键就是解决动态密文的由来 这边用atob对X-S密文进行解密 可以看到他是一个字符串 可以发现他本来是一个json对象,因为加密需要字符串,所以将json对象转化 为了字符串 而在js中,常用JSON.stringify进行json对象到字符串的转化。 这边将JS…

FlowUs AI的使用教程和使用体验

FlowUs AI 使用教程 FlowUs AI特点使其成为提升个人和团队生产力的有力工具,无论是在学术研究、内容创作、技术开发还是日常办公中都能发挥重要作用。现在来看看如何使用FlowUs AI吧! 注册与登录:首先,确保您已经注册并登录FlowU…

小型超声波清洗机真的有用吗?深入测评四款优质精品,亮点多多

超声波洗眼镜机能够彻底清洁眼镜,去除顽固污渍和灰尘,其次是操作简便,对比传统的清洗方式用时短、效率高,避免了手动的麻烦,于是有很多眼镜使用者都选择了超声波清洗机。但由于目前超声波清洗机型号众多,如…

一次压测引发的数据库 CPU 飙升

作者:昀鹤 一次压测过程中,当数据库的 qps 和 tps 都正常时,如果 cpu 利用率异常的高,应该如何排查?希望通过这篇文章,给你一些启发... 一、业务背景 业务需要控制频道内兑换现金的数量,于是在…

如何在项目中快速引入Logback日志并搭配ELK使用

在Java项目中引入日志系统是一件非常重要的事情,它可以帮助我们记录程序的运行状态、调试信息和错误信息。Logback是一个非常流行的日志框架,具有高性能和灵活的配置能力。本文将介绍如何在项目中快速引入Logback日志,并说明为什么要使用Logb…

Aigtek电压放大器的主要作用是什么

电压放大器是一种重要的电子设备,用于放大电压信号。它在许多电子系统和应用中发挥着关键的作用。本文将详细介绍电压放大器的主要作用和工作原理。 电压放大器是一种电子电路,它可以将输入信号的电压放大为更大的输出电压。放大器通过增加输入信号的幅度…

【CS.DS】数据结构 —— 图: 图的相关概念大全

文章目录 1 图的类型2 图的基本术语References 1 图的类型 图是一种数据结构,由节点(顶点)和边组成。图可以用来表示各种网络结构,如社交网络、交通网络、计算机网络等。根据边的性质,图可以分为以下几种类型&#xf…

.git目录解读

在执行 git init 命令时,Git 会在当前目录中创建一个名为 .git 的目录。该目录包含 Git 所需的所有元数据和对象,用于版本控制。以下是 .git 目录结构的示意图,并附有每个目录和文件的作用说明: .git #…