Android12之DRM架构(一)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

1.前言
本篇目的:理解DRM架构。
2.DRM和FrameBuffer对比优点
- DRM是Android和Linux目前主流的图形显示框架,比起FrameBuffer架构,DRM有更多强大的功能。
- 而FrameBuffer架构只支持单纯的显示。
- DRM支持VSYNC、DMA-BUF、异步更新、Fence等机制等等。DRM可以统一管理GPU渲染图形和Display显示控制,它可谓是新的“图形大管家”。
3.DRM架构图

4.DRM模块组成

<1>.DRM从模块上划分,分为三个部分,包括libdrm、KMS、GEM。
- libdrm
直接访问DRM驱动,对访问DRM驱动的ioctl()接口进行封装
- KMS
KMS全称:Kernel Mode Setting。它的主要工作内容:设置显示参数和更新画面。
更新画面:显示图形buffer切换,多plane图层合成方式和plane显示位置。
参数参数:刷新率(fps)、分辨率、亮屏与灭屏等。
- GEM
GEM全称:Graphic Execution Manager:功能为显示图形Buffer的分配和释放,它是DRM与GPU衔接的接口。

plane是连接 framebuffer和crtc 的纽带,而 encoder 则是连接 crtc 和 connector 的纽带。
与物理 buffer 直接打交道的是 gem 而不是 framebuffer。
5.KMS和GEM组成部分?
KMS:FrameBuffer、CRTC、ENCODER、CONNECTOR、PLANE、、VBLANK、Property
GEM:DUMB、PRIME、Fence
| DRM组层部分 | 功能描述 |
|---|---|
| FrameBuffer | 表示单个图层的显示内容,唯一一个和硬件无关的基本元素 |
| CRTC | 表示显示控制器:对FrameBuffer数据进行扫描,产生时序信号的硬件模块 |
| ENCODER | 将CRTC输出的timing时序转换成外部设备所需要的信号的模块,如HDMI转换器或DSI Controller |
| CONNECTOR | 连接物理显示设备的连接器,如HDMI、DisplayPort、DSI总线,通常和Encoder驱动绑定在一起 |
| PLANE | 硬件图层,有的Display硬件支持多层合成显示,但所有的Display Controller至少要有1个plane |
| VBLANK | 软件和硬件的同步机制,RGB时序中的垂直消影区,软件通常使用硬件VSYNC来实现 |
| Property | 任何你想设置的参数,都可以做成property,是DRM驱动中最灵活、最方便的Mode setting机制 |
| DUMB | 只支持连续物理内存,基于kernel中通用CMA API实现,多用于小分辨率简单场景 |
| PRIME | 连续、非连续物理内存都支持,基于DMA-BUF机制,可以实现buffer共享,多用于大内存复杂场景 |
| Fence | buffer同步机制,基于内核dma_fence机制实现,用于防止显示内容出现异步问题 |
Refence
相关文章:
Android12之DRM架构(一)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
檀香香料经营商城小程序的作用是什么
檀香香料有安神、驱蚊、清香等作用,办公室或家庭打坐等场景,都有较高的使用频率,不同香料也有不同效果,高品质香料檀香也一直受不少消费者欢迎。 线下流量匮乏,又难以实现全消费路径完善,线上是商家增长必…...
RPA在票据处理中的应用
随着大中型企业的数字化转型进程加速,企业财务方面每天都存在大量票据需要处理,包括发票、收据、报销单等。传统的票据处理流程通常繁琐、耗时且容易出错,重复且枯燥的工作消耗了财务人员宝贵的时间和精力,也增加了企业的人力成本…...
Jmeter接口测试 —— jmeter对图片验证码的处理
jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 通过jmeter对图片验证码…...
minikube创建一个pod并暴露端口(使用docker驱动安装)
因为minikube使用service暴露端口是使用nodeIP:nodePort 而不是 localhost:nodePort 公开访问。我们只能使用kubectl的端口转发功能或者使用iptables的转发功能来实现外网服务暴露。 我这里使用shiro来举例 apiVersion: apps/v1 kind: Deployment metadata:name: shiro550 spe…...
2023国考证件照要求什么底色?证件照换背景底色的方法
2023年国家公务员考试报名已经开始了,我们在考试平台提交报名信息的时候,有一项就是需要上传证件照片,对于证件照片也会有具体的要求,比如背景底色、尺寸大小、dpi和kb大小。今天就为大家详细介绍一下关于国考证件照背景色的内容&…...
【SA8295P 源码分析 (一)】87 - SA8295P HQNX + Android 编译环境搭建指导
【SA8295P 源码分析 一】87 - SA8295P HQNX + Android 编译环境搭建指导 一、Android 编译环境搭建:Android + sa8295p-hqx-4-2-4-0_hlos_dev_la.tar.gz1.1 更新 Ubuntu 18.04 源路径1.2 安装基础编译环境1.3 设置JDK8 的环境变量1.4 配置sh为bash(默认为dash)1.5 Android 编…...
网络基本结构及数据传输方式
nternet 网络基本结构及数据传输方式根据传统的网络结构,用户的访问流程基本如下: 用户在自己的浏览器中输入要访问的网站的域名 浏览器向本地DNS请求对该域名的解析 本地DNS将请求发到网站授权的DNS服务器。 授权DNS将服务器的IP地址作为解析结果送给本…...
从实体经济和数字经济融合展开,思考商业模式的变化
对于《关于构建数据基础制度更好发挥数据要素作用的意见》想必大家已经不陌生了,之前的文章中也围绕数据要素说了很多东西,数据、数字化、数字经济之类的已经称得上是绝大部分人对未来发展方向的共识,不过今天想从这个《意见》出发࿰…...
Python 框架学习 Django篇 (四) 数据库增删改查(CURD)
在上一章结尾我们了解到如采用前后端开发分离的架构模式开发,后端几乎不负责任何展现界面的工作,只负责对数据进行管理 ,对数据的管理主要体现在: (增加、修改、删除、列出 )具体的接口参考大佬的文档BYSM…...
关于错误码
初学编程,在C语言中定义错误码,是使用宏: #define SUCCESS 0 //成功 #define FAILED 1 //失败 后来知道,用枚举更适合,因为宏的名声实在不好,而枚举可以帮你自动编号,减少…...
Linux | gcc/g++的使用
目录 前言 一、程序的翻译过程 1、预编译 2、编译 3、汇编 4、链接 (1)链接做了什么 (2)动态链接 (3)静态链接 (4)如何使用gcc进行动态链接和静态链接 前言 本章主要带着大…...
了解容器运行时安全:保护你的容器应用
前言 容器是一种虚拟化技术,用于封装和运行应用程序及其依赖项,以便在不同的计算环境中保持一致性和可移植性。自2013年容器诞生至今,容器Docker镜像的下载量超20亿,虽然容器行业发展如火如荼,但是其安全风险却不容乐…...
大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求
大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求 一个面向多模式GPT-4级别能力构建的助手。它结合了自然语言处理和计算机视觉,为用户提供了强大的多模式交互和理解。LLaVA旨在更深入地理解和处理语言和视…...
Element UI定义方法校验邮箱格式
1. .vue中定义了3个邮箱输入框,前面两个是输入多个邮件地址,最后一个是使用element自带的校验来校验单个邮件地址 <el-row><el-col :span"24"><el-form-item label"收件人" prop"to"><el-input v-mo…...
DigiCert代码签名证书
在当今的数字化时代,确保软件的完整性和来源的可靠性至关重要。DigiCert代码签名证书是一种专业而受信任的数字签名解决方案,帮助开发者保护其软件免受篡改和恶意行为的侵害。本文将介绍DigiCert代码签名证书的特点和优势,并讨论为何选择Digi…...
HTML5+CSS3小实例:网页底部间隔波浪动画特效
实例:网页底部间隔波浪动画特效 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content…...
前端 js 之 代码执行的一个过程 02
嘿,欢迎你来 !💕 文章目录 前言一、运行一个 js 文件二、运行环境三、js执行代码的过程(普通变量)四、打印 window五、js执行代码的过程(函数变量)六、函数调用函数的过程注意!&…...
【经验分享】如何构建openGauss开发编译提交一体化环境
前文 本文适合对openGauss源代码有好奇心的爱好者,那么一个友好的openGauss源代码环境应该是怎么样的。openGauss的开发环境是如何设置的?openGauss的编译环境是如何构建的?如何向openGauss提交代码,笔者集合官方和几位博主实践提…...
儿童疫苗接种:安全与注意事项
引言: 儿童的疫苗接种是维护其健康和预防传染病的重要措施。疫苗可以有效地保护儿童免受各种疾病的威胁,但在接种过程中需要家长和监护人特别关注一些注意事项,以确保接种的安全性和有效性。本文将深入探讨儿童疫苗接种的重要性,…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...
