DRM全解析 —— plane详解(1)
本文参考以下博文:
Linux内核4.14版本——drm框架分析(5)——plane分析
特此致谢!
1. 简介
一个plane代表一个image layer(硬件图层),最终的image由一个或者多个plane(s)组成。plane和 Framebuffer 一样是内存地址。plane主要包括以下3种类型:
- DRM_PLANE_TYPE_PRIMARY:主要图层,通常用于仅支持RGB格式的简单图层
- DRM_PLANE_TYPE_OVERLAY:叠加图层,通常用于YUV格式的视频图层
- DRM_PLANE_TYPE_CURSOR:光标图层,一般用于pc系统,用于显示鼠标
2. 核心结构
在Linux内核的DRM中,plane对应的核心结构体为:struct drm_plane。该结构体在include/drm/drm_plane.h中定义,代码如下(Linux内核版本:6.1):
/*** struct drm_plane - central DRM plane control structure** Planes represent the scanout hardware of a display block. They receive their* input data from a &drm_framebuffer and feed it to a &drm_crtc. Planes control* the color conversion, see `Plane Composition Properties`_ for more details,* and are also involved in the color conversion of input pixels, see `Color* Management Properties`_ for details on that.*/
struct drm_plane {/** @dev: DRM device this plane belongs to */struct drm_device *dev;/*** @head:** List of all planes on @dev, linked from &drm_mode_config.plane_list.* Invariant over the lifetime of @dev and therefore does not need* locking.*/struct list_head head;/** @name: human readable name, can be overwritten by the driver */char *name;/*** @mutex:** Protects modeset plane state, together with the &drm_crtc.mutex of* CRTC this plane is linked to (when active, getting activated or* getting disabled).** For atomic drivers specifically this protects @state.*/struct drm_modeset_lock mutex;/** @base: base mode object */struct drm_mode_object base;/*** @possible_crtcs: pipes this plane can be bound to constructed from* drm_crtc_mask()*/uint32_t possible_crtcs;/** @format_types: array of formats supported by this plane */uint32_t *format_types;/** @format_count: Size of the array pointed at by @format_types. */unsigned int format_count;/*** @format_default: driver hasn't supplied supported formats for the* plane. Used by the non-atomic driver compatibility wrapper only.*/bool format_default;/** @modifiers: array of modifiers supported by this plane */uint64_t *modifiers;/** @modifier_count: Size of the array pointed at by @modifier_count. */unsigned int modifier_count;/*** @crtc:** Currently bound CRTC, only meaningful for non-atomic drivers. For* atomic drivers this is forced to be NULL, atomic drivers should* instead check &drm_plane_state.crtc.*/struct drm_crtc *crtc;/*** @fb:** Currently bound framebuffer, only meaningful for non-atomic drivers.* For atomic drivers this is forced to be NULL, atomic drivers should* instead check &drm_plane_state.fb.*/struct drm_framebuffer *fb;/*** @old_fb:** Temporary tracking of the old fb while a modeset is ongoing. Only* used by non-atomic drivers, forced to be NULL for atomic drivers.*/struct drm_framebuffer *old_fb;/** @funcs: plane control functions */const struct drm_plane_funcs *funcs;/** @properties: property tracking for this plane */struct drm_object_properties properties;/** @type: Type of plane, see &enum drm_plane_type for details. */enum drm_plane_type type;/*** @index: Position inside the mode_config.list, can be used as an array* index. It is invariant over the lifetime of the plane.*/unsigned index;/** @helper_private: mid-layer private data */const struct drm_plane_helper_funcs *helper_private;/*** @state:** Current atomic state for this plane.** This is protected by @mutex. Note that nonblocking atomic commits* access the current plane state without taking locks. Either by going* through the &struct drm_atomic_state pointers, see* for_each_oldnew_plane_in_state(), for_each_old_plane_in_state() and* for_each_new_plane_in_state(). Or through careful ordering of atomic* commit operations as implemented in the atomic helpers, see* &struct drm_crtc_commit.*/struct drm_plane_state *state;/*** @alpha_property:* Optional alpha property for this plane. See* drm_plane_create_alpha_property().*/struct drm_property *alpha_property;/*** @zpos_property:* Optional zpos property for this plane. See* drm_plane_create_zpos_property().*/struct drm_property *zpos_property;/*** @rotation_property:* Optional rotation property for this plane. See* drm_plane_create_rotation_property().*/struct drm_property *rotation_property;/*** @blend_mode_property:* Optional "pixel blend mode" enum property for this plane.* Blend mode property represents the alpha blending equation selection,* describing how the pixels from the current plane are composited with* the background.*/struct drm_property *blend_mode_property;/*** @color_encoding_property:** Optional "COLOR_ENCODING" enum property for specifying* color encoding for non RGB formats.* See drm_plane_create_color_properties().*/struct drm_property *color_encoding_property;/*** @color_range_property:** Optional "COLOR_RANGE" enum property for specifying* color range for non RGB formats.* See drm_plane_create_color_properties().*/struct drm_property *color_range_property;/*** @scaling_filter_property: property to apply a particular filter while* scaling.*/struct drm_property *scaling_filter_property;
};
3. drm_plane结构释义
(0)总述
DRM全解析 —— plane详解(1)
struct drm_plane —— 核心的DRM plane控制结构。
planes表示显示块的扫描输出硬件。它们从drm_framebuffer中接收输入数据,并将其提供给drm_crtc。planes控制颜色转换(有关详细信息,请参见“平面合成属性”),并且还参与输入像素的颜色转换(请参见“颜色管理属性”以了解详细信息)。
作用如下图示:


(1)struct drm_device *dev
/** @dev: DRM device this plane belongs to */struct drm_device *dev;
此plane所属的DRM设备。
(2)struct list_head head
/*** @head:** List of all planes on @dev, linked from &drm_mode_config.plane_list.* Invariant over the lifetime of @dev and therefore does not need* locking.*/struct list_head head;
@dev上所有平面的列表,链接自&drm_mode_config.plane_List。在@dev的生命周期内保持不变,因此不需要锁定。
(3)char *name
/** @name: human readable name, can be overwritten by the driver */char *name;
人类可读的名称(名字),可以被驱动程序覆盖。
下一篇文章继续深入释义drm_plane结构中其余成员。
相关文章:
DRM全解析 —— plane详解(1)
本文参考以下博文: Linux内核4.14版本——drm框架分析(5)——plane分析 特此致谢! 1. 简介 一个plane代表一个image layer(硬件图层),最终的image由一个或者多个plane(s)组成。plane和 Framebuffer 一样是内存地址。…...
数据结构总结
数据结构 相关博文 单链表数组模拟单链表-CSDN博客双链表数组模拟双链表-CSDN博客栈及单调栈数组模拟栈以及单调栈-CSDN博客队列及单调队列数组模拟队列以及单调队列-CSDN博客KMPKMP详细算法思路-CSDN博客TrieTire树的理解-CSDN博客并查集并查集(面试常考ÿ…...
在SOLIDWORKS搭建一个简易的履带式机器人
文章目录 前言一、构建模型基本单元二、搭建车体模块三.插入轮子4.构建履带 前言 趁着十一假期,在solidworks中搭建了一个履带式机器人小车,计划将其应用在gazebo中完成多机器人编队的仿真。 一、构建模型基本单元 构建底板(a面)…...
C# 为什么要限制静态方法的使用
前言 在工作了一年多之后,我发现静态方法的耦合问题实在是头疼。如果可以尽量不要使用静态方法存储数据,如果要存储全局数据就把数据放在最顶层的主函数里面。 静态方法问题 耦合问题,不要用静态方法存储数据 我这里有两个静态方法&#…...
【已解决】Pyecharts折线图,只有坐标轴没有折线数据
【已解决】Pyecharts折线图,只有坐标轴没有折线数据 1、问题复现2、原因3、问题解决 1、问题复现 在做简单的数据通过 Pyecharts 生成折现图的时候,一直只有坐标轴没有折线数据,但是代码一直看不出问题,代码如下: im…...
win10搭建Selenium环境+java+IDEA(3)
这里主要对前面的maven和selenium做补充说明,以及更新一些pom文件下载依赖的问题。 IDEA里面,如果你创建的工程是maven工程文件,那么就会有一个pom.xml文件,可以在这个网站:https://mvnrepository.com/搜索依赖&#…...
String 、Stringbuffer、StringBuilder区别
上代码 public class Test {public static void main(String[] args) {//String 连接10000次消耗1127ms//StringBuffer 连接10000次消耗5ms//StringBuilder 连接10000次消耗3msStringTest(10000);StringBufferTest(10000);StringBuilderTest(10000);}public static void Strin…...
如何提升爬虫IP使用效率?精打细算的方法分享
在进行爬虫数据采集时,爬虫IP是不可或缺的工具。然而,爬虫IP的费用可能是一个爬虫项目的重要开支之一。为了帮助您节省爬虫IP经费,本文将分享一些经济高效的方法,让您在使用爬虫IP时更加节约成本,提高经济效益。 一、优…...
(高阶) Redis 7 第19讲 缓存过期淘汰策略 大厂篇
🌹 以下分享 Redis 缓存淘汰策略,如有问题请指教。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有对阁下帮助,请👍点赞💖收藏🐱🏍分享😀 面试题 1. 生产上,redis内存设置的多少 2. 如何配置、修改Redis 内存大小 3. 如果内存满了,如何处理 4. …...
【四旋翼飞行器】模拟四旋翼飞行器的平移和旋转动力学(Simulink仿真实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Kaggle - LLM Science Exam(一):赛事概述、数据收集、BERT Baseline
文章目录 一、赛事概述1.1 OpenBookQA Dataset1.2 比赛背景1.3 评估方法和代码要求1.4 比赛数据集1.5 优秀notebook 二、BERT Baseline2.1 数据预处理2.2 定义data_collator2.3 加载模型,配置trainer并训练2.4 预测结果并提交2.5 deberta-v3-large 1k Wikiÿ…...
mmap底层驱动实现(remap_pfn_range函数)
mmap底层驱动实现 myfb.c(申请了128K空间) #include <linux/init.h> #include <linux/tty.h> #include <linux/device.h> #include <linux/export.h> #include <linux/types.h> #include <linux/module.h> #inclu…...
品牌如何查窜货
当渠道中的产品出现不按规定区域销售时,这种行为就叫做窜货,窜货不仅会扰乱渠道的健康发展,损害经销商的利益,同时会滋生低价、假货的发生,有效的管控窜货,需要品牌先将窜货链店铺找出来,才能进…...
Java基于SpringBoot的车辆充电桩
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1、效果演示效果图 技术栈2、 前言介绍(完整源码请私聊)3、主要技术3.4.1…...
【ARM】(1)架构简介
前言 ARM既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权(IP)供应商,本身不直接从事芯片生产…...
企业完善质量、环境、健康安全三体系认证的作用及其意义!
一、ISO三体系标准作用 ISO9001:质量管理体系,专门针对企业的质量管理,投标首选,很多大客户要求企业必备这项。 ISO14001:环境管理体系,针对企业的生产环境,排污,节能环保…...
<HarmonyOS第一课>运行Hello World——闯关习题及答案
判断题 1.DevEco Studio是开发HarmonyOS应用的一站式集成开发环境。( 对 ) 2.main_pages.json存放页面page路径配置信息。( 对 ) 单选题 1.在stage模型中,下列配置文件属于AppScope文件夹的是?ÿ…...
NLP 02 RNN
一、RNN RNN(Recurrent Neural Network),中文称作循环神经网络它一般以序列数据为输入通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。 传统神经网络(包括CNN),输入和输出都是互相独立的。但有些任务,后续的输出和之前…...
@PostConstruct注解
PostConstruct注解 PostConstruct注解是javax.annotation包下的一个注解,用于标记一个方法,在构造函数执行之后,依赖注入(如Autowired,意味着在方法内部可以安全地使用依赖注入的成员变量,而不会出现空指针异常&#…...
拓世AI|中秋节营销攻略,创意文案和海报一键生成
秋风意境多诗情,中秋月圆思最浓。又是一年中秋节,作为中国传统的重要节日之一,中秋节的意义早已不再仅仅是一家团圆的节日,更是一场商业盛宴。品牌方们纷纷加入其中,希望能够借助这一节日为自己的产品赢得更多的关注和…...
pycryptodomex安装避坑指南:从环境冲突到成功部署
1. 为什么pycryptodomex安装总是出问题? 每次看到"CommandNotFound"这个报错我就头疼。上周给客户部署加密服务时,在Ubuntu 18.04上安装pycryptodomex又遇到了老问题。这个库作为PyCrypto的替代品,本应该安装简单,但实际…...
GINav:GNSS/INS一体化导航数据处理平台 - 高精度定位与融合算法的MATLAB解决方案
GINav:GNSS/INS一体化导航数据处理平台 - 高精度定位与融合算法的MATLAB解决方案 【免费下载链接】GINav GNSS and GNSS/INS integration algorithms 项目地址: https://gitcode.com/gh_mirrors/gi/GINav 在自动驾驶、无人机导航和精准农业等领域,…...
从图像分类到目标检测:手把手教你用PyTorch复现ViT和DETR的核心模块(附代码)
从图像分类到目标检测:手把手教你用PyTorch复现ViT和DETR的核心模块 当Transformer架构在自然语言处理领域大放异彩后,计算机视觉研究者们开始思考:这种基于自注意力的强大模型能否同样革新图像理解任务?Vision Transformer&#…...
Resemble Enhance深度解析:如何用AI技术实现专业级语音增强与降噪
Resemble Enhance深度解析:如何用AI技术实现专业级语音增强与降噪 【免费下载链接】resemble-enhance AI powered speech denoising and enhancement 项目地址: https://gitcode.com/gh_mirrors/re/resemble-enhance Resemble Enhance是一款基于深度学习的专…...
Windows系统优化终极神器:WinUtil一键提升性能的完整指南
Windows系统优化终极神器:WinUtil一键提升性能的完整指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否厌倦了Windows系统…...
超越简单余弦距离:用‘局部残差’思想为你的图像特征匹配加个Buff
超越简单余弦距离:用‘局部残差’思想为你的图像特征匹配加个Buff 当你在电商平台搜索"白色连衣裙"时,系统如何在数百万商品图中精准找到最符合预期的款式?当你在手机相册输入"海滩日落"时,算法又是怎样从数万…...
英维思/康吉森TRICONEX 3721 (AI32TMR)模块
在工业自动化的精密世界里,每一个数据的精准传递都关乎生产的命脉。英维思TRICONEX 3721 AI32TMR模块,就像一位沉默的守护者,以三重冗余的硬核架构,为石油化工、电力能源等高危行业筑牢安全防线。李工180**6050**3853它诞生于对工…...
Spring Boot 4.0 Agent-Ready 架构实战手册(仅限首批内测团队使用的7条黄金配置守则)
第一章:Spring Boot 4.0 Agent-Ready 架构概览与演进脉络Spring Boot 4.0 标志着 JVM 应用可观测性与运行时可插拔能力的重大跃迁。其核心设计目标是原生支持 Java Agent 的零侵入式集成,使 APM、安全审计、链路追踪等能力不再依赖启动参数硬编码或定制化…...
揭秘ComfyUI-Impact-Pack:解锁AI图像增强的终极武器
揭秘ComfyUI-Impact-Pack:解锁AI图像增强的终极武器 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: https://gi…...
当Qt Creator 11遇上Copilot:一个C++老鸟的AI结对编程初体验与效率对比
当Qt Creator 11遇上Copilot:一个C老鸟的AI结对编程初体验与效率对比 作为深耕Qt/C领域十余年的开发者,我经历过从手动编写信号槽到IDE智能补全的进化,但GitHub Copilot的出现彻底重构了我对编程效率的认知。本文将分享在真实商业项目&#x…...
