VIVO相机启动流程拆解

server/2024/10/18 14:20:12/

f3d8d166c8d020c367f2ad170a71a01b.gif

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

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

 一、启动阶段拆解概览

1. 启动阶段拆解表格

eae5cf8dcb75974c28e7a779249b4ed7.jpeg
Camera 启动阶段拆机表格

S0 :System

deliverInputEvent ===> activityStart 开始

S1 :Camera APP + Camera FWK

activityStart 开始 ===>CameraHal::openSession 开始

S2 :Camera HAL

CameraHal::openSession

S3 :Camera APP + Camera FWK

CameraHal::openSession 结束 ===>CameraHal::configureStreams 开始

S4 :Camera HAL

CameraHal::configureStreams

S5 :Camera APP + Camera FWK

CameraHal::configureStreams 结束===>submitRequestList 开始|

S6 :Camera HAL

submitRequestList 开始===>first full buffer

S7 :Camera APP

first full buffer ===>APP surfaceview

S8 :SurfaceFlinger

APP surfaceview===>SF HWC 屏显第一帧

二、 阶段拆解

S0 点击事件处理到Camera app 启动

2f66b450ae5e45e80bb1d6c34515b546.jpeg
点击事件处理

S1 Camera app 启动到 下发openCamera

1a7d1b115a7138de8d1808144a8f58db.jpeg
Camera activitystart

S2 Camera HAL 开始 opencamera

48d14e3b543a0dc39981e236c9bf7ed1.jpeg
camera 下发open camera

S3 open Camera 结束,到配流开始

fa7a7c7845a2d686415e6796c7e9868f.jpeg
获取Camera 数,配流

S4 Camera HAL 配流并初始化usecase

5e597e705a3647b7285d79dc9064b07a.jpeg
Camera 配流并初始化usecase

S5 配流结束到提交预览请求

65701af0ffe69fdb3063017a762ca355.jpeg
提交预览请求

S6 提交预览请求到返回第一帧

03b3f0b959217bbf2064450b08420492.jpeg
第一帧callback

S7 APP 处理第一帧并送给SurfaceFlinger

e121eb7c06aeb93b656d689e7dbe5423.jpeg
APP 处理第一帧送给SurfaceFlinger

S8 vsync-SF 信息到来,SF 处理并送显示

7f429f71025e8aa6c971e36fa10f5fa4.jpeg
vsync-SF 信息到来,SF 处理并送显示

三、Trace 中的其他信息

1. 帧率

a6db01bbf50dc3976cd4d366bd0f0037.jpeg
Camera HAL 出图帧率 以及 屏幕显示帧率

2. CPU 负载 ,CPU频率

87a645d0490de86d7b4e53de5dbc774c.jpeg
CPU 负载
8e7320547a3a9d9d4096ef0641983f00.jpeg
CPU 频率 1.9GHZ 2.4G HZ

VIEngine-Main 预览帧处理

6fe7707f34d24eb96384ed0a4fa62553.jpeg
VivoCamera 预览引擎
a8ccbf1c52ca013f0a8f155b2b9ba85d.jpeg
预览帧处理

预览请求帧 与预览callback 帧处理

e5d3fc0dfe797b3f76f2e4c1c73a5b0c.jpeg
Camera 第0帧 预览请求流程
8b56d17be820e1e67980593f11f94743.jpeg
Camera 第 0帧 Callback流程
a45e7f93a3f169b58fb1e7a2ed882981.jpeg
preivew 帧callback

perflock 提频相关

eeba834290a1ca99375aacaddd736324.jpeg
perflock 提频相关

四、log分析

配流信息:

行  163983: 08-22 16:14:46.219  1047  1537  7386 I CameraService: CameraService::connect call (PID 30560 "com.android.camera", camera ID 0) and Camera API version 2行  164229: 08-22 16:14:46.420  1047  1537  7386 I Camera3-Device: Camera 0: Creating new stream 0: 1440 x 1080, format 34, dataspace 0 rotation 0 consumer usage 0, isShared 0, physicalCameraId , isMultiResolution 0 dynamicRangeProfile 0x1, streamUseCase 0, timestampBase 0, mirrorMode 0, colorSpace -1, useReadoutTimestamp 0行  164237: 08-22 16:14:46.432  1047  1537  7386 I Camera3-Device: Camera 0: Creating new stream 1: 1440 x 1080, format 35, dataspace 146931712 rotation 0 consumer usage 0, isShared 0, physicalCameraId , isMultiResolution 0 dynamicRangeProfile 0x1, streamUseCase 0, timestampBase 0, mirrorMode 0, colorSpace -1, useReadoutTimestamp 0行  164246: 08-22 16:14:46.444  1047  1537  7386 I Camera3-Device: Camera 0: Creating new stream 2: 4080 x 3060, format 35, dataspace 146931712 rotation 0 consumer usage 0, isShared 0, physicalCameraId , isMultiResolution 0 dynamicRangeProfile 0x1, streamUseCase 0, timestampBase 0, mirrorMode 0, colorSpace -1, useReadoutTimestamp 0

参考文献:

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

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

74d8beaadef3250b10c4b7eb6833f3f6.jpeg

点个在看,为大佬点赞!


http://www.ppmy.cn/server/105467.html

相关文章

【Android】Glide模块工作原理

Glide模块工作原理 每个Glide模块包含一个Decoder,和一个Transcoder Decoder负责将DataSource转换为对应的Resource Transcoder负责将对应的Resource,转换为Drawable GlideModule示例 这里以SVG为例,展示下GlideModule是如何定义的 cla…

15.CentOS7升级内核

升级内核 1.配置镜像源 vim /etc/yum.repos.d/elrepo.repo[elrepo] nameelrepo baseurlhttps://mirrors.aliyun.com/elrepo/archive/kernel/el7/x86_64 gpgcheck0 enabled12.备份 cd /etc/yum.repos.d/ mv local.repo repo.bak/ 3.清缓存 yum clean all 4.升级内核 yum ins…

大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Ps:首选项 - 常规

Ps菜单:编辑/首选项 Edit/Preferences 快捷键:Ctrl K Photoshop 首选项中的“常规” General选项卡主要用于调整 Photoshop 的整体工作行为和用户体验。这些设置让用户可以根据个人习惯和工作流程定制软件的响应方式和界面布局,从而提高工作…

Wireshark

下面是Wireshark 4.2.1版本的命令行参数整理成表格的形式&#xff1a; 参数/选项说明-i <interface>指定捕获接口的名称或索引&#xff08;默认&#xff1a;第一个非回环接口&#xff09;-f <capture filter>libpcap过滤语法的包过滤-s <snaplen>包快照长度…

C++基础面试题 | C和C++的区别?

人生如逆旅&#xff0c;我亦是行人。 - 《临江仙送钱穆父》(苏轼) 2024.8.23 回答重点&#xff1a;C可以认为是C语言的超集&#xff0c;绝大部分C语言代码可以使用C运行 在设计思想上&#xff1a;面向过程 vs 面向对象 C是一种面向过程的编程语言&#xff0c;它侧重于函数和过程…

鸿蒙笔记--WorkerTaskPool

这一节了解一下鸿蒙中的Worker和TaskPool,Worker和TaskPool的作用是为应用程序提供一个多线程的运行环境&#xff0c;用于处理耗时的计算任务或其他密集型任务。可以有效地避免这些任务阻塞主线程&#xff0c;从而最大化系统的利用率&#xff0c;降低整体资源消耗&#xff0c;并…

C++前向声明简介

前向声明 class a; class b; class c:public d { ..... }类a和b已经实现了具体功能&#xff0c;类c在定义&#xff0c;在类c上面声明类a和b有什么作用 在类 c 的定义上面声明类 a 和 b 的作用主要是为了确保在编译时能够识别这两个类的存在&#xff0c;特别是在类 c 中可能会使…