当前位置: 首页 > news >正文

DRM全解析 —— ADD_FB2(0)

本文参考以下博文:

DRM驱动(四)之ADD_FB

特此致谢!

在笔者之前的libdrm全解析系列文章中,讲到了drmIoctl(fd, DRM_IOCTL_MODE_ADDFB, &f)以及其封装函数drmModeAddFB。对应的文章链接为:

libdrm全解析三十一 —— 源码全解析(28)

libdrm全解析三十二 —— 源码全解析(29)

实际上你如果看KWin源码,会发现使用更多的并不是drmModeAddFB函数,而是drmModeAddFB2WithModifiers函数。KWin源码中的代码片段如下(src/backends/drm/drm_buffer.cpp):

std::shared_ptr<DrmFramebuffer> DrmFramebuffer::createFramebuffer(const std::shared_ptr<DrmGpuBuffer> &buffer)
{const auto size = buffer->size();const auto handles = buffer->handles();const auto strides = buffer->strides();const auto offsets = buffer->offsets();uint32_t framebufferId = 0;int ret;if (buffer->gpu()->addFB2ModifiersSupported() && buffer->modifier() != DRM_FORMAT_MOD_INVALID) {uint64_t modifier[4];for (uint32_t i = 0; i < 4; i++) {modifier[i] = i < buffer->planeCount() ? buffer->modifier() : 0;}ret = drmModeAddFB2WithModifiers(buffer->gpu()->fd(), size.width(), size.height(), buffer->format(), handles.data(), strides.data(), offsets.data(), modifier, &framebufferId, DRM_MODE_FB_MODIFIERS);} else {ret = drmModeAddFB2(buffer->gpu()->fd(), size.width(), size.height(), buffer->format(), handles.data(), strides.data(), offsets.data(), &framebufferId, 0);if (ret == EOPNOTSUPP && handles.size() == 1) {//qCCritical(KWIN_DRM, "meidaozheli vvvv333...\n\n"); //phphret = drmModeAddFB(buffer->gpu()->fd(), size.width(), size.height(), 24, 32, strides[0], handles[0], &framebufferId);}}if (ret == 0) {return std::make_shared<DrmFramebuffer>(buffer, framebufferId);} else {return nullptr;}
}

这里我们的重点并不是KWin(针对于KWin源码的研究笔者正在进行中,后续会有专门的文章对于KWin源码进行解析),只是让读者感受一下实际的使用场景,并且能够知道真正主要使用的是drmModeAddFB2WithModifiers(),更准确地说,使用的优先级是drmModeAddFB2WithModifiers() > drmModeAddFB2() > drmModeAddFB()。

对于drmModeAddFB函数,笔者之前已经有过系列文章“DRM全解析 —— ADD_FB”,写得还算比较清楚和深入。有了前系列文章的基础,再加上笔者近一段时间对于图形部分(KWin、libdrm/DRM)的深入研究以及更深刻理解,本系列文章开始对于更常用暨更为重要的drmModeAddFB2WithModifiers和drmModeAddFB2函数进行深入解析。

本篇文章就作为契子或引子吧,真正的解析内容从下一篇文章开始。

相关文章:

DRM全解析 —— ADD_FB2(0)

本文参考以下博文&#xff1a; DRM驱动&#xff08;四&#xff09;之ADD_FB 特此致谢&#xff01; 在笔者之前的libdrm全解析系列文章中&#xff0c;讲到了drmIoctl(fd, DRM_IOCTL_MODE_ADDFB, &f)以及其封装函数drmModeAddFB。对应的文章链接为&#xff1a; libdrm全解…...

01Redis的安装和开机自启的配置

安装Redis 单机安装Redis 大多数企业都是基于Linux服务器来部署项目&#xff0c;而且Redis官方也没有提供Windows版本的安装包(此处选择的Linux版本的CentOS 7) Windows版直接下载对应版本的.zip压缩包解压即可使用 第一步: Redis是基于C语言编写的&#xff0c;因此首先需要…...

进入IT行业:选择前端开发还是后端开发?

一、前言 开发做前端好还是后端好&#xff1f;这是一个常见的问题&#xff0c;特别是对于初学者来说。在编程世界中&#xff0c;前端开发和后端开发分别代表着用户界面和数据逻辑&#xff0c;就像城市的两个不同街区一样。但是&#xff0c;究竟哪个街区更适合我们作为开发者呢…...

Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice

安装Onlyoffice 拉取onlyoffice镜像 docker pull onlyoffice/documentserver 查看镜像是否下载完成 docker images 启动onlyoffice 以下是将本机的9001端口映射到docker的80端口上&#xff0c;访问时通过服务器ip&#xff1a;9001访问&#xff0c;并且用 -v 将本机机/data/a…...

编程面试_动态规划

题目1 最大连续乘积子串 题目描述给一个浮点数序列&#xff0c;取最大乘积连续子串的值&#xff0c;例如 -2.5&#xff0c;4&#xff0c;0&#xff0c;3&#xff0c;0.5&#xff0c;8&#xff0c;-1&#xff0c;则取出的最大乘积连续子串为3&#xff0c;0.5&#xff0c;8。也就…...

ip地址可以精确定位吗

在互联网时代&#xff0c;IP地址的重要性不言而喻。作为网络通信的基础&#xff0c;IP地址用于标识每一台连接到互联网的设备。然而&#xff0c;传统的IP地址定位方式仅能粗略地确定设备的大致位置&#xff0c;无法实现精确定位。那么&#xff0c;IP地址能否实现精确定位呢&…...

Xamarin体验:使用C#开发iOS/Android应用

http://www.cnblogs.com/lwme/p/use-xamarin-develop-Android-iOS-app.html Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发。 简介 Xamarin是基于Mono的平台,目前主要有以下产品(更具体请见:h…...

聊聊druid连接池的监控

序 本文主要研究一下druid连接池的监控 init com/alibaba/druid/pool/DruidDataSource.java public void init() throws SQLException {//......registerMbean();//...... }DruidDataSource的init方法会执行registerMbean registerMbean com/alibaba/druid/pool/DruidData…...

CentOS 7 安装 Docker 的详细步骤

文章目录 Docker简介1.更新2.安装必要的软件包3.添加Docker仓库4.安装5.安装后的一些常规设置及常用的命令5.1 启动 Docker5.2 Docker 在系统启动时自动运行5.3 运行一个 Hello World 镜像5.4 查看docker运行状态5.5 docker ps5.6 查看docker版本 6.安装种常见的错误错误1:yum-…...

竞赛 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…...

数据结构之【泛型】

泛型&#xff1a;定义阶段不明确具体类型&#xff0c;产生对象时明确具体类型。 //Object是Java中的最高参数统一化&#xff0c;能够接受所有的引用类型&#xff1b; //有了包装类的自动拆装箱之后&#xff0c;Object还能够接收基本类型数值&#xff08;自动装箱&#xff09; …...

华为ac无线侧命令行配置思路和步骤

无线侧配置思路&#xff1a; Ap和ac在同一个广播域内&#xff0c;不用配置 option 43 source 源ip回包哪个模式都得配置 Cli配置业务模版流程&#xff1a; 1、 AC控制器上全局配置capwap回包接口地址 1、配置ssid&#xff1a;wifi名称 2、配置安全模版&#xff1a;用户连接密码…...

十六)Stable Diffusion教程:出图流程化

今天说一个流程化出图的案例&#xff0c;适用很多方面。 1、得到线稿&#xff0c;自己画或者图生图加线稿lora出线稿&#xff1b;如果想sd出图调整参数不那么频繁细致&#xff0c;则线稿的素描关系、层次、精深要表现出来&#xff0c;表现清楚。 2、文生图&#xff0c;seed随机…...

SpringBoot全局异常处理源码

SpringBoot全局异常处理源码 一、SpringMVC执行流程二、SpringBoot源码跟踪三、自定义优雅的全局异常处理脚手架starter自定义异常国际化引入封装基础异常封装基础异常扫描器&#xff0c;并注册到ExceptionHandler中项目分享以及改进点 一、SpringMVC执行流程 今天这里叙述的全…...

设计模式——7. 装饰者模式

1. 说明 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不改变对象接口的前提下,动态地将新行为附加到对象上。这种模式是通过创建一个包装(或装饰)对象,将要被装饰的对象包裹起来,从而实现对原有对象功能的增强和扩展。 装饰者模式的主要特点包括:…...

安卓玩机-----反编译apk 修改apk 去广告 去弹窗等操作中的一些常识

安卓机型app的编译与反编译 apk文件的简单说明与解析 -安卓修改apk apk的组成和编译 一 电脑端几种反编译apk工具操作步骤解析 前面几个博文有说明关于反编译apk和apk架构等有些常识.今天对以上做个补充。初学者记住一点。对于一个apk文件使用压缩软件7zip打开可以查看到文件…...

Hoeffing不等式

在李航老师的统计学习方法&#xff08;第一版中&#xff09; H o e f f i n g 不等式 Hoeffing不等式 Hoeffing不等式是这样子给出的 设 X 1 , X 2 , . . . , X N X_1,X_2,...,X_N X1​,X2​,...,XN​是独立随机变量&#xff0c;且 X i ∈ [ a i , b i ] , i 1 , 2 , . . . ,…...

ffmpeg解复用指定pid转推udp

命令 ffmpeg -re -i udp://224.2.2.2:4003?fifo_size1024000 -map #5001 -acodec copy -flush_packets 1 -f mpegts udp://192.168.2.62:5161 ffmpeg -re -i udp://224.2.2.2:4003?fifo_size1024000 -map #5001 -acodec copy -flush_packets 1 -f mpegts udp://192.16…...

Vue组件通信方式

1.props通信 1.1在 Vue 2 中使用 props 通信 注意:props传递的数据是只读的,子组件修改,不会影响父组件 1.1.1.定义 props 在子组件中使用 props 选项来定义要接收的属性 // 子组件 <script> export default {props: {message: String} } </script>1.1.2.传递…...

redis-设置从节点

节点结构 节点配置文件 主节点 不变 6380节点 port 6380 slaveof 127.0.0.1 63796381节点 port 6381 slaveof 127.0.0.1 6380启动 指定配置文件的方式启动 D:\jiqun\redis\Redis-6380>redis-server.exe redis.windows.conf启动时&#xff0c;会触发同步数据命令 主节点…...

可持续交通,正在重写“产品生命周期”

作者&#xff1a;王聪彬一边是全球经济对物流、出行和流动效率的持续依赖&#xff0c;一边则是交通运输正在成为全球减碳进程中最难啃的“硬骨头”。过去几十年&#xff0c;交通系统不断推动全球化与城市化加速&#xff0c;但与此同时&#xff0c;它也成为温室气体排放增长最快…...

如何高效下载B站视频:3分钟掌握智能下载工具完整指南

如何高效下载B站视频&#xff1a;3分钟掌握智能下载工具完整指南 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简&#xff0c;操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader 你是否曾经遇到过这样的情况&a…...

Captain AI助力Ozon大卖店群高效管理,实现规模化运营

随着Ozon商家运营规模的扩大&#xff0c;多店铺运营&#xff08;店群&#xff09;成为很多资深大卖的选择&#xff0c;通过多店铺布局&#xff0c;可扩大市场覆盖、分散运营风险、提升整体销量。但店群运营过程中&#xff0c;商家常常面临“管理繁琐、数据混乱、效率低下”的问…...

IC设计五大典型Bug剖析:从CDC到软硬件协同的防御性设计

1. 项目概述&#xff1a;IC设计中的那些“老朋友”在芯片设计的江湖里混迹多年&#xff0c;我越来越觉得&#xff0c;我们这些IC工程师&#xff08;ICer&#xff09;的日常&#xff0c;与其说是在创造&#xff0c;不如说是在与各种层出不穷的“老朋友”——也就是bug——斗智斗…...

别再折腾内网穿透了!用EC600N 4G模块+华为云IoTDA,5分钟搞定远程宠物定位数据上传

5分钟实现宠物定位数据上云&#xff1a;EC600N 4G模块与华为云IoTDA实战指南 当你的宠物突然从视线中消失时&#xff0c;那种焦虑感是任何宠物主人都深有体会的。传统的蓝牙防丢器仅有几十米的有效范围&#xff0c;而GPS定位器又常受限于复杂的网络配置。现在&#xff0c;通过…...

别再手动画图了!用Graphviz + Python自动生成流程图,效率提升10倍

用PythonGraphviz实现自动化图表生成&#xff1a;告别低效手绘时代 你是否曾在PPT中反复调整箭头位置&#xff0c;只为让一张流程图看起来更专业&#xff1f;或是花半小时拖拽图形&#xff0c;却发现某个节点的颜色需要全局修改&#xff1f;在技术文档、系统架构设计或算法可视…...

终极指南:如何在macOS上轻松安装KLayout版图设计软件

终极指南&#xff1a;如何在macOS上轻松安装KLayout版图设计软件 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout 想要在macOS上安装专业级的集成电路版图设计工具KLayout吗&#xff1f;&#x1f60a; 作为一款功能…...

dropin-minimal-css项目架构深度解析:目录结构与核心组件

dropin-minimal-css项目架构深度解析&#xff1a;目录结构与核心组件 【免费下载链接】dropin-minimal-css Drop-in switcher for previewing minimal CSS frameworks 项目地址: https://gitcode.com/gh_mirrors/dr/dropin-minimal-css dropin-minimal-css是一个用于预览…...

Linux巡检报告生成排查方法

Linux巡检报告生成排查方法本文面向具备一定 Linux 基础的技术人员&#xff0c;围绕巡检报告生成展开&#xff0c;重点讨论检查汇总、异常标记和结果归档。在中级运维和系统管理工作中&#xff0c;这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交织在一起…...

别再只认Revit了!盘点7种主流BIM数据格式(RVT/IFC/FBX...)的优缺点与选型指南

建筑数字化进阶指南&#xff1a;7大BIM数据格式深度解析与实战选型策略 在建筑信息模型&#xff08;BIM&#xff09;与地理信息系统&#xff08;GIS&#xff09;加速融合的今天&#xff0c;数据格式的选择直接影响着项目协同效率与成果交付质量。当设计院的Revit模型需要与施工…...