十、Camera 启动流程分析

news2024/11/26 5:43:59

bf53efe05dfd7176fd50e058472a059a.gif

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

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

一、Camera 启动流程概览
二、Launcher 跟Camera APP 交互
三、Camera app 与FWK Camera Service 交互
四、Camera FWK 与 Camera HAL 交互
五、Camera FWK、Camera app、SF 交互送显

一、Camera 启动流程概览

8ed8224d42cd9ae14bdbe6d0a75544a7.jpeg

Camera 启动流程概览

原图查看链接:
https://upload-images.jianshu.io/upload_images/5851256-76bb736b92c7b871.png

1.1 Camera 启动流程拆解
  1. 点击Launcher 中 Camera app icon, Launcher 处理点击事件,关键字:deliverInputEvent(AppLaunch_dispatchPtr:Up )

  2. Camera app 执行activity的onCreate 、onStart 、onResume等动作,关键字:activityStart,activityResume

  3. Camera app 下发 onOpen,opensession等动作,对应Framework CameraService 的关键字:CameraHal::openSession

  4. open Camera 后开始对camera进行一些配置,对应的FWK 关键字:CameraHal::configureStreams

  5. Camera 配完流之后,app开始获取预览请求,对应的FWK 关键字:setRepeatingRequest

  6. App 请求之后,Framework 、HAL 层处理之后,返回第一帧给FWK ,关键字:first full buffer

  7. FWK call back 第一帧后,对应的app SurfaceView的buffer 会 +1

  8. vsync-sf 到来之后,SF 从app对应的SurfaceView 的buffer 取出数据进行合成并显示到屏幕上,对应的SurfaceView buffer -1

  9. SF 拿到buffer后通过binder 跟HWC 通信,然后刷新显示到屏幕上,这时候我们可以看到预览第一帧。

  10. Camera app 布局合成第一个buffer

1.2 Camera trace 关键字
启动阶段模块trace 关键字
S1系统deliverInputEvent(AppLaunch_dispatchPtr:Up ) ⇒ activityStart
S2Camera APPactivityStart ⇒ CameraHal::openSession
S3Camera HALCameraHal::openSession
S4Camera APPCameraHal::openSession end ⇒ CameraHal::configureStreams start
S5Camera HALCameraHal::configureStreams
S6Camera APPCameraHal::configureStreams end ⇒ setRepeatingRequest start
S7Camera HALsetRepeatingRequest start ⇒ first full buffer
S8Camera APP、SFfirst full buffer ⇒ 第一帧显示(onPreviewOk)

二、Launcher 跟Camera APP 交互

Launcher 跟 Camera app 交互图如下:

60ca542678dc6d401f883698d1ac7f26.jpeg

Launcher 跟Camera APP 交互图

原图查看链接:
https://upload-images.jianshu.io/upload_images/5851256-1a04e920e4b9e4a1.png

2.1 Launcher 跟Camera APP 交互拆解
  1. launcher 点击事件处理

  2. Camera App mainActivity 的 onCreate、onStart、onResume 处理。

三、Camera app 与FWK Camera Service 交互

17e0ce6437551654aaf51480768387a2.jpeg

Camera app 与 Camera FWK交互图

原图查看链接:
https://upload-images.jianshu.io/upload_images/5851256-f8c531de5d70c8d0.png

3.1 Camera app 与FWK Camera Service 交互拆解步骤
  1. Camera app 练级并下发打开Camera 的opensession

  2. Camera FWK 处理App 下发的 openSession,并通过HIDL 跟Camera HAL进行通信

  3. Camera Sensor 打开后,根据不同的Feature 配置不同的流信息。

四、Camera FWK 与 Camera HAL 交互

8f4841607f813ee24777b5d4421b9755.jpeg

Camera FWK 与 Camera HAL 交互图

原图查看链接:

https://upload-images.jianshu.io/upload_images/5851256-9b8429d750ea41d5.png

4.1 Camera FWK 与 Camera HAL 交互拆解
  1. Camera FWK Opensession 通过HIDL 跟 Camera HAL 进行通信

  2. Camera HAL 处理openSession。

  3. Camera FWK 在Camera Sesnor 打开后,开始执行configurestreams。

  4. 通过HIDL Camera HAL 处理Camera FWK 传递的configurestream 。

  5. Camera FWK 开始执行第一帧预览请求,关键字:setRepeatingRequest

  6. Camera HAL 处理 Camera FWK 传下来的processcaptureRequest请求,并通过processCaptureResult callback 上去。

五、Camera FWK、Camera app、SF 交互送显

dd5c89cec55bc2ed0807504e8087041f.jpeg

Camera FWK、Camera app、SF 交互送显

原图查看链接:
https://upload-images.jianshu.io/upload_images/5851256-283fa9c17c5fd281.png

Camera FWK、Camera app、SF 交互送显拆解
  1. Camera FWK 返回第一帧 :关键字 first full buffer

  2. Camera App SurfaceTexture 获取到Camera FWK 返回的第一帧

  3. ImageReader 获取Camera FWK 返回的第一帧

  4. Camera App 开始 dequeueBuffer ,对返回的第一帧进行处理。

  5. Camera App 处理完后通过queuebuffer,将处理完的buffer 放到SF 对应的BufferQueue中,同时对应的Camera 的SurfaceView 的buffer值 +1

  6. vsync-sf 到来之后,SF 从BufferQueue中取出一个buffer 进行消费并送显,对应的Camera App 的buffer -1

六、Camera冷启动阶段分析补充

fc6bb04b3164d05d720cb472286196b6.png

冷启动阶段会比热启动阶段多大致以下流程

PostFork --> ZygoteInit-->ActivityThreadMain-->bindApplication-->activityStart(后面同上分析)

6.1 阶段分析解释
  1. PostFork 耗时需要排查 Zygote.java 代码

Zygote.java frameworks\base\core\java\com\android\internal\os

  1. ZygoteInit 耗时需要排查ZygoteInit.java 代码

ZygoteInit.java frameworks\base\core\java\com\android\internal\os

  1. ActivityThreadMain耗时需要排查ActivityThread.java代码

ActivityThread.java frameworks\base\core\java\android\app

  1. bindApplication 耗时需要排查ActivityThread.java代码,同上

  2. activityStart App 开始执行 MainActivity 一系列 onCreate,onStart,onResume,openCamera等操作

7 参考文献

  1. 012_相机性能优化.pdf

  2. 【腾讯文档】Camera学习知识库
    https://docs.qq.com/doc/DSWZ6dUlNemtUWndv

友情推荐:

Android 开发干货集锦

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

b7ff947cc37a67698b0a5436350707ce.jpeg

点击阅读原文,为大佬点赞!

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

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

相关文章

35岁,阿里6年,被打了低潜,已生无可恋,纠结该不该出去,40岁的人能不能给点建议?...

35岁是个转折点,许多人都在35岁时陷入迷茫,比如下面这位网友: 35岁,在阿里已经6年了,现在要混是可以混下去,但发展肯定是没有了,已经被老板打了低潜。目前被这个业务摩擦得已经生无可恋&#xf…

APP开发中的UI设计

UI设计是 APP开发中一个必不可少的部分,用户体验也是影响 APP产品成功与否的重要因素,用户体验包括用户的使用感受和操作感受。就 UI设计来说,它的主要内容有:界面、图标、颜色、字体、布局、页面布局等。 一个好的 UI设计可以增加…

通过extundelete实现CentOS6 ext4文件系统误删除文件的恢复

1.介质下载 路径: 链接:extundelete 提取码:ztj0 版本:extundelete.0.2.4 2.实验环境 1.CentOS6.8 系统版本命令: cat /etc/redhat-release 2.磁盘:/dev/sdb 磁盘查看命令: lsblk |g…

mysql数据备份-主从同步恢复

【1】数据库备份和恢复 1、xtrabackup-物理备份 全量备份主库数据:xtrabackup --backup --userroot --passwordxxx --port3306 --target-dir/comProject/backup/db/full_20220831 将full_20220831文件上传到从库服务器上 关闭存库服务:service mysqld …

将一维数组作为一列合并到二维数组中的numpy.column_stack()方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将一维数组作为一列合并到二维数组中 numpy.column_stack() 选择题 关于以下代码说法错误的一项是? import numpy as np a np.array([0,0]) b np.array([[1,2],[3,4]]) print("【显示…

C++ 线性数据结构系列之低调而强大的单调栈

1. 前言 单调栈是在栈基础上进行变化后的数据结构。除了遵循栈的先进后出的存储理念,在存储过程中还需保持栈中数据的有序性。 根据栈中数据排序的不同,单调栈分为: 单调递增栈:从栈顶部向栈的底部,数据呈递增排序。…

【JY】ABAQUS正交各向异性弹性本构模型

写在前文 材料的线弹性本构模型能够很好的描述处于工作荷载水平下的材料性能情况,后续材料的塑性理论也需要在弹性本构模型的基础上进行开展。由于砌体结构所采用的砌体材料具有明显的正交各项异性,故先从正交各向异性弹性入手,根据弹性理论中…

Java基础篇 | Java开发环境的搭建

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: Java从入门到精通 ✨特色…

中创“六一”公益关爱活动 | 慈善守护童心,爱心筑梦未来

每一个孩子都是一朵花 有的盛开在春天,有的绽放在夏天 每一朵花,都有与众不同的美好 年年盛夏,如约出发: 在第73个“六一国际儿童节”来临之际,中创算力开展“六一公益关爱活动”,希望通过这样一个爱心…

我用低代码结合ChatGPT开发,每天多出1小时摸鱼

👉腾小云导读 GPT 出现之后,很多人推测大量的软件都会因为其出现而重写。本文主要是低代码平台与 ChatGPT 结合的一些思考以及实践。期望与各位读者一起搭上 AI 这列快车,为开发提提速~ 👉目录 1 背景 2 Demo 演示 3 思…

2022年软件测试人员调查统计——数据统计

1、软件测试从业人员的年龄分布 测试行业的主力军年龄分布主要是集中在 26-30 岁这个区间,这部分的群体承担着行 业发展的主导力量,占 43.2%。根据数据显示,被调查者中占比最多的是 26-30 岁区间的软件测试从业人员,26-30 岁的测试…

14 种免费 GIS 软件:在开源中绘制世界地图

如果你想绘制一幅世界地图,会选择什么GIS软件呢,ArcGIS、GlobalMapper这些都是国外比较出名的商业GIS软件,当然在国内很容易找到可用的版本,但是也可以使用免费的GIS软件完成所有操作。 这些免费的GIS软件为您提供了完成工作的效…

使用 VSCode SSH 公网远程连接本地服务器开发 - cpolar内网穿透

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

Socket(六)

文章目录 1. 构造服务器Socket2. 构造但不绑定端口3. 获得服务器Socket的有关信息4. Socket选项5. SO_TIMEOUT6. SO_REUSEADDR7. SO_RCVBUF8. 服务类型 1. 构造服务器Socket 有四个公共的ServerSocket构造函数 public ServerSocket(int port) throws BindException, IOExcept…

第33步 机器学习分类实战:误判病例分析

填最后一个坑,如何寻找误判的病例。 之前我们在介绍AUC的时候,提到了两个函数:predict和predict_proba,复习一下: auc_test roc_auc_score(y_test, y_testprba) roc_auc_score的参数呢,包括两个&#…

用一杯星巴克的钱,训练自己私有化的ChatGPT

点击蓝字 关注我们 文章摘要:用一杯星巴克的钱,自己动手2小时的时间,就可以拥有自己训练的开源大模型,并可以根据不同的训练数据方向加强各种不同的技能,医疗、编程、炒股、恋爱,让你的大模型更“懂”你….…

想知道如何给游戏视频配音?有三个好方法教给你

现在越来越多的小伙伴会在闲暇之余打打游戏,也会观看一些游戏视频,其中不少游戏视频都有配音。游戏视频配音是一项有趣而富有创造力的任务,它可以让你为游戏画面注入声音,增强观众的体验。无论你是一个游戏爱好者还是一个内容创作…

前端vscode插件bito

GPT-4和ChatGPT越来越火,前端人员是否也能在日常工作中尝试体验其带来的乐趣呢? 答案是可以的!安排!! 今天介绍一款vscode的插件 【bito】。 安装 安装后只需要自己注册一下,创建一个workspace就可以使用…

【满分】【华为OD机试真题2023B卷 JAVAJS】经典屏保

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 经典屏保 知识点循环迭代编程基础 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: DVD机在视频输出时,为了保护电视显像管,在待机状态会显示“屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹…

凡亿教育荣获2023 STM32峰会“生态合作伙伴”奖项

作为中国知名的电子设计在线教育领域的优秀企业,凡亿教育喜迎好消息!2023年5月12日,STM32峰会在深圳重磅回归,凡亿教育荣获STM32峰会颁发的“生态合作伙伴”奖项,这一殊荣充分肯定了凡亿教育在STM32生态系统中的杰出贡…