热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Camera启动流程trace分析

和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、Camera启动流程概览二、Launche

c0a17faef8c01467eaf7f98915de456a.gif

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

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

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

一、Camera 启动流程概览

56f51e1aeeb8141b55e23a497f0eca4c.png

Camera 启动流程概览

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 关键字

S1 . deliverInputEvent(AppLaunch_dispatchPtr:Up ) ⇒ activityStart
S2 . activityStart ⇒ CameraHal::openSession
S3 . CameraHal::openSession
S4 . CameraHal::openSession end ⇒ CameraHal::configureStreams start
S5 . CameraHal::configureStreams
S6 . CameraHal::configureStreams end ⇒ setRepeatingRequest start
S7 . setRepeatingRequest start ⇒ first full buffer
S8 . first full buffer ⇒ 第一帧显示(onPreviewOk)

二、Launcher 跟Camera APP 交互

Launcher 跟 Camera app 交互图如下:

dfd9d033d2d23167a55d7a993ba356f9.png

Launcher 跟Camera APP 交互图

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

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

三、Camera app 与FWK Camera Service 交互

da013e67b110396d9bcdb65fc18e8825.png

Camera app 与 Camera FWK交互图

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 交互

eb1a9d949eaa8e1ba2dd720f485e7057.png

Camera FWK 与 Camera HAL 交互图

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 交互送显

2f1da231ef6e40de42bfb773221a7fa3.png

Camera FWK、Camera app、SF 交互送显

5.1 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

友情推荐:

Android 开发干货集锦

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

2179d85dbb9118ea52b25bd24b61afbd.png

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


推荐阅读
  • 2019.4.14第1001题:SumProblemProblemDescriptionHey,welcometoHDOJ(HangzhouDianziUniversityOnli ... [详细]
  • 我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ... [详细]
  • 技术点:1、通过已知的网页路径获得流2、把流转换成字节数组3、把字节数组转换成String字符串显示在TextView控件中一、获得流publicstaticSt ... [详细]
  • spotify engineering culture part 1
    原文,因为原视频说的太快太长,又没有字幕,于是借助youtube,把原文听&打出来了。中文版日后有时间再翻译。oneofthebigsucceessfactorshereatSpo ... [详细]
  • 载波|等份_NR SRS时频域位置
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了NRSRS时频域位置相关的知识,希望对你有一定的参考价值。微信同步更新欢迎关注同名modem协议笔记S ... [详细]
  • Android 自定义控件基础 canvas paint
    1、首先说一下canvas类:ClassOverviewTheCanvasclassholdsthedrawcalls.Todrawsomething,youne ... [详细]
  • iOS之富文本
    之前做项目时遇到一个问题:使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ... [详细]
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • kepserver中文手册,kepserver使用教程,kepserver设置
    下面介绍一下KepServer模拟器的使用,以下示例使用服务器随附的Simulator驱动程序来演示创建、配置和运行项目的过程。Simulator驱动程序是基于内存的驱动程序,能为 ... [详细]
  • 论文阅读及复现 | Improved Semantic Representations From TreeStructured Long ShortTerm Memory Networks
    两种形式的LSTM变体Child-SumTree-LSTMsN-aryTree-LSTMshttps:paperswithcode.compaperimproved-semanti ... [详细]
  • packagetest;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOE ... [详细]
  • 一、在androidStudio中实现tabs比较简单,新建项目就可以选择tabs模板进行创建,默认实现tabs功能:直接运行项目就可以看到效果:可以说非常简单,但是我们在实际开发 ... [详细]
  • apk简单介绍APK的组成apk安装流程app的启动过程apk打包流程AIDLAIDL介绍为什么要设计这门语言它有哪些语法?默认支持的数据类型包括什么是apk打包流程 ... [详细]
  • [二分图]JZOJ 4612 游戏
    DescriptionInputOutputSampleInput44#****#****#*xxx#SampleOutput5DataConstraint分析非常眼熟࿰ ... [详细]
  • AsyncDisplayKit2.0教程(下)
    AsyncDisplayKit2.0Tutorial:AutomaticLayout原文:AsyncDisplayKit2.0Tutorial:Automatic ... [详细]
author-avatar
xh7212176
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有