Android显示系统(11)- 向SurfaceFlinger申请Surface

ops/2024/12/16 8:21:51/

一、前言:

前面已经和SurfaceFlinger建立好了连接,那么,本章介绍下如何去向SurfaceFlinger申请我们的画布(也就是Surface)。

二、获取Surface流程:

上面创建好了Client,也就是创建好了连接,我们要绘制一张图片,首先得拿到画布,这个由CreateSurface完成:

status_t BootAnimation::readyToRun() {// 。。。// 创建SurfaceControl, 参数指定名称 ("BootAnimation")、宽度、高度和像素格式 (PIXEL_FORMAT_RGB_565)sp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565);SurfaceComposerClient::Transaction t;t.setLayer(control, 0x40000000).apply();// 获得对应的Surface(画布)sp<Surface> s = control->getSurface();// 。。。
}

可以看出,先获取SurfaceControl,然后从SurfaceControl当中取出了Surface,那么,这个API调用,后面都有谁在配合呢?

1、APP侧开始请求:

这个session()里面其实就是返回一个mSession,我们都知道mSessionsp<SurfaceComposerClient>类型,进去看看:

sp<SurfaceControl> SurfaceComposerClient::createSurface(const String8& name, uint32_t w, uint32_t h,PixelFormat format, uint32_t flags,SurfaceControl* parent,LayerMetadata metadata) {sp<SurfaceControl> s;createSurfaceChecked(name, w, h, format, &s, flags, parent, std::move(metadata));return s;
}

再进去看看:

status_t SurfaceComposerClient::createSurfaceChecked(const String8& name, uint32_t w, uint32_t h,PixelFormat format,sp<SurfaceControl>* outSurface, uint32_t flags,SurfaceControl* parent,LayerMetadata metadata) {sp<SurfaceControl> sur;status_t err = mStatus;if (mStatus == NO_ERROR) {sp<IBinder> handle; // Surfacesp<IBinder> parentHandle;sp<IGraphicBufferProducer> gbp; // SF端Layer的生产者对象if (parent != nullptr) {parentHandle = parent->getHandle();}// 这个mClienterr = mClient->createSurface(name, w, h, format, flags, parentHandle, std::move(metadata),&handle, &gbp);ALOGE_IF(err, "SurfaceComposerClient::createSurface error %s", strerror(-err));if (err == NO_ERROR) {// 创建SurfaceControl*outSurface = new SurfaceControl(this, handle, gbp, true 

http://www.ppmy.cn/ops/142333.html

相关文章

JavaScript逆向时,常用的11个hook

提示:记录工作中遇到的需求及解决办法 文章目录 前言01、dom操作02、Cookie操作03、事件监听操作04、AJAX拦截操作05、函数替换操作06、Header操作07、URL操作08、JSON.stringify操作09、JSON.parse操作10、eval操作11、Function操作前言 在逆向分析JavaScript代码时,开发者…

NLP-Huggingface基本使用方法

NLP的网络结构大同小异&#xff0c;只不过训练策略可能会不同。因为与图像cv不同&#xff0c;文本训练数据非常的多&#xff0c;cv可以使用10几张就可以获得特征向量&#xff0c;而文本做不到学几句话就能让计算机听得懂话。因此&#xff0c;我们都需要使用预训练模型&#xff…

现代密码学总结(上篇)

现代密码学总结 &#xff08;v.1.0.0版本&#xff09;之后会更新内容 基本说明&#xff1a; ∙ \bullet ∙如果 A A A是随机算法&#xff0c; y ← A ( x ) y\leftarrow A(x) y←A(x)表示输入为 x x x ,通过均匀选择 的随机带运行 A A A,并且将输出赋给 y y y。 ∙ \bullet …

前端常用npm库大全-vue,react,通用(持续更新)

构建工具 Name/GitHub/NPM 描述 演示地址 Vite 下一代的前端工具链 Create React App 通过运行一个命令来设置现代 Web 应用程序。 Create React App中文文档 通过运行一个命令来设置现代 Web 应用程序。 Webpackjs 强大的静态模块打包工具&#xff0c;主要用于现代…

渗透测试学习笔记(四)web漏洞

一.web相关漏洞 漏洞分类漏洞类型Web 源码类漏洞SQL 注入&#xff0c;文件上传&#xff0c;XSS&#xff0c;代码执行&#xff0c;变量覆盖&#xff0c;逻辑漏洞&#xff0c;反序列化Web 中间件漏洞未授权访问&#xff0c;变量覆盖数据库漏洞弱口令&#xff0c;权限提升系统层漏…

一款基于Fluent设计风格、现代化的WPF UI控件库

前言 今天大姚给大家分享一款基于Fluent设计风格、开源&#xff08;MIT License&#xff09;、现代化的WPF UI控件库&#xff0c;它提供直观的设计、主题、导航和全新的沉浸式控件&#xff0c;全部都是原生且无缝地集成在一起&#xff1a;WPF UI。 WPF介绍 WPF 是一个强大的桌…

Git登入使用GitHub上的仓库

1、打开git-bash.exe设置参数 git config –global 参数 git config –global user.name "xxx" git config –global user.email "xxxxxxx.com" 2、Github账户设置SSH key 生成ssh key ssh-keygen -t rsa -C “xxxxxxxxx.com” 回车确认默认路径和无密码 在…

设计模式:24、访问者模式

目录 0、定义 1、访问者模式的五种角色 2、访问者模式的UML类图 3、示例代码 0、定义 表示一个作用于某对象结构中的各个元素的操作。它可以在不改变各个元素的类的前提下&#xff0c;定义作用于这些元素的新操作。 1、访问者模式的五种角色 抽象元素&#xff08;Element…