Linux下通过DRM操作屏幕,发生行对齐 (stride)问题

前言

Linux下使用LVGL操作屏幕,屏幕尺寸是[280*1424],不管如何设置LVGL的参数,屏幕的显示均为花屏,能看到有图像显示,但是图像是行错乱的。


ubuntu桌面系统显示正常

打印DRM看输出

drm: 280x1424 (0mm X 0mm) pixel format AR24

可见DRM的没什么问题,确实和屏幕对的上

使用色块填充排查

给屏幕直接填充固定颜色

    // 填充为红色(例如 ARGB8888 格式:0xFFFF0000)uint32_t *fb = (uint32_t *)fbuf->map;int i;for(i = 0; i < 280*2; i++){fb[i] = 0xFFFF0000; // 红色像素值// for(int j = 0; j < 100; j++)// {//     fb[i*1424 + j] = 0xFFFF0000; // 红色像素值// }}for(; i < 280*1424; i++){fb[i] = 0xFF00FF00; // 绿色像素值}

发现问题:一行似乎不是280个像素点。每行的似乎在285~290之间?

分析


出现这种情况的原因可能与 屏幕的行对齐方式(stride)缓冲区分辨率设置 不一致有关。虽然屏幕的逻辑分辨率是 1424x280,但 一行的实际像素数量可能大于 1424,这是由于 行对齐缓冲区分配方式 的限制。

  1. 行对齐 (stride)

    • 大多数 GPU 或显示硬件要求每行的像素数据对齐到特定的字节边界(如 32 字节或 64 字节)。

    • 即使屏幕宽度是 1424 像素,每行数据的实际占用可能大于 1424 * 4 字节。

    • 这个实际的宽度称为 stride(步长),通常可以通过 DRM 查询到。

  2. 缓冲区的 stride 不匹配

    • 如果你直接按分辨率 1424 * 280 计算缓冲区的大小,可能会忽略 stride 的额外字节。

    • 例如,stride 可能是 1440 * 4 字节,即一行的实际长度为 1440 像素(即便只显示 1424 像素)。

  3. 显存分配方式

    • 显存分配时可能会对分辨率进行对齐操作,比如将宽度对齐到 8 或 16 的倍数,导致一行像素的数量超过逻辑宽度。

drm: 280x1424 (0mm X 0mm) pixel format AR24
drm: pitch 1152
drm: size 1640448
drm: pitch 1152
drm: size 1640448
DRM subsystem and buffer mapped successfully

解析打印信息

  1. 分辨率

    • drm: 280x1424 表示屏幕的逻辑分辨率为宽 280 像素,高 1424 像素。
  2. 像素格式

    • pixel format AR24 表示屏幕的像素格式为 XRGB8888,即每像素占用 4 字节(32 位),Alpha 通道未使用。
  3. Pitch (stride)

    • drm: pitch 1152 表示每行像素占用 1152 字节
    • 对于 XRGB8888,每像素占用 4 字节,因此一行实际包含 1152 / 4 = 288 像素。
    • 这是由于硬件对行数据进行了 对齐处理(对齐到 32 字节或 64 字节)。
  4. 缓冲区大小

    • drm: size 1640448 表示缓冲区总大小为 1640448 字节

    • 计算:pitch * height = 1152 * 1424 = 1640448 字节。这与打印的大小一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTMLCSS:比赛记分卡

效果演示 这段 HTML 和 CSS 代码创建了一个卡片式的体育比赛信息展示组件&#xff0c;用于显示篮球比赛的两个队伍名称、比赛时间、比分以及一些装饰性的视觉元素。 HTML <div class"card"><div data-status"inprogress" class"teams"…

Paper -- 3D建筑模型生成 -- GABLE: 基于高分辨率卫星影像的全国尺度精细3D建筑模型

基本信息 论文题目: GABLE: A first fine-grained 3D building model of China on a national scale from very high resolution satellite imagery 中文题目: GABLE: 基于高分辨率卫星影像的全国尺度精细3D建筑模型 作者及单位: – 多数作者来自中国科学院空间信息研究所&…

高级java每日一道面试题-2024年11月21日-数据结构篇-红黑树有哪几个特征?

如果有遗漏,评论区告诉我进行补充 面试官: 红黑树有哪几个特征? 我回答: 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡二叉查找树&#xff08;Self-Balancing Binary Search Tree&#xff09;&#xff0c;它在插入和删除操作后能够自动保持树的高度平衡。红黑…

蓝桥杯嵌入式再学习(2)基础框架的构建

1&#xff1a;打开工程以后我们需要进行一些配置如图&#xff1a; 第一步&#xff1a;将core里面的对勾取消掉 勾选Microlib 优化等级选择level 0 将我们自己的文件夹添加到路径里面去 这个样子我们就基本将框架搭建好了我们然后需要编写各个底层的驱动了

矩阵/矩阵乘法/特征征/特征向量的讲解

线性代数里有很多的概念&#xff0c;很多概念是有几何意义的&#xff0c;了解了几何意义可能会更好的理解各种概念及其相互之间的关系。 矩阵&#xff1a; 矩阵是一个变换&#xff0c;一个坐标系到另一个坐标第的变换。矩阵里的各个参数&#xff0c;代表了如何进行变换。 矩阵…

Flink Transformation - 转换算子全面解析

Flink Transformation - 转换算子全面解析 一、引言 在Flink的数据流处理中&#xff0c;转换算子&#xff08;Transformation Operators&#xff09;扮演着极为关键的角色。它们能够对输入的数据流进行各种处理和转换操作&#xff0c;以满足不同的业务需求。本文将详细介绍Fl…

Easyexcel(5-自定义列宽)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09;Easyexcel&#xff08;5-自定义列宽&#xff09; 注解 ColumnWidth Data…

C++ 中的模板特化和偏特化

C中的模板特化和偏特化是C模板编程中的两种重要技术&#xff0c;用于在特定情况下提供更优化的代码实现。‌ 模板特化 模板特化是指在模板参数为特定类型时&#xff0c;提供一种特定的实现方式。模板特化分为‌函数模板特化‌和‌类模板特化‌。 函数模板特化‌&#xff1a; …

短信发送业务

Override public void sendCode(String phone) {// 通过正则判断手机号的合法性if (!phone.matches("^1[3-9]\\d{9}$")) {throw new RuntimeException("请输入合法的手机号");}// 判断3次// String.format("code:%s", phone)String numKey Stri…

1+X应急响应(网络)文件包含漏洞:

常见网络攻击-文件包含漏洞&命令执行漏洞&#xff1a; 文件包含漏洞简介&#xff1a; 分析漏洞产生的原因&#xff1a; 四个函数&#xff1a; 产生漏洞的原因&#xff1a; 漏洞利用条件&#xff1a; 文件包含&#xff1a; 漏洞分类&#xff1a; 本地文件包含&#xff1a; …

深入实践 Shell 脚本编程:高效自动化操作指南

一、什么是 Shell 脚本&#xff1f; Shell 脚本是一种用 Shell 编写的脚本程序&#xff0c;用于执行一系列的命令。它是 Linux/Unix 系统中自动化管理任务的利器&#xff0c;能够显著提升工作效率&#xff0c;特别适合批量处理文件、监控系统状态、自动部署等任务。 二、Shell…

HTML5 SVG

HTML5 SVG SVG(Scalable Vector Graphics)是一种基于XML的图像格式,用于在网页上创建矢量图形。与传统的位图图像(如PNG和JPEG)不同,SVG图像可以无限放大而不失真,因为它们是由直线和曲线定义的数学路径,而不是像素点。HTML5支持直接在网页中嵌入SVG,使得网页设计更加…

Flutter:SlideTransition位移动画,Interval动画延迟

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationControllerlate AnimationController _controller;overridevoid initState() {super.…

gitlab:使用脚本批量下载项目,实现全项目检索

目的 当需要知道gitlab中所有项目是否存在某段代码时&#xff0c;gitlab免费版只提供了当个项目内的检索&#xff0c;当项目过多时一个个查太过繁琐。下面通过 GitLab API 将指定 Group 下的所有项目克隆到本地。此脚本会自动获取项目列表并逐一克隆它们&#xff0c;再在本地进…

【Android】android compat理解

1&#xff0c;前提 即便是在同一手机上安装的不同apk&#xff0c;其编译的apk不同&#xff0c;也会导致行为上的差异。如SDK34有限制后台启动&#xff0c;但如果安装的apk所依赖的sdk是33&#xff0c;则不会表现出此差异。这是如何实现的呢&#xff1f;其实&#xff0c;本质是…

使用php和Xunsearch提升音乐网站的歌曲搜索效果

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

电脑自动关机时间如何定?Wise Auto Shutdown 设置关机教程

在日常使用电脑的过程中&#xff0c;有时我们需要让电脑在特定的时间自动关机&#xff0c;比如在下载大文件完成后、执行长时间的任务结束时&#xff0c;或者只是单纯想在某个预定时间让电脑自动关闭以节省能源。这时候&#xff0c;Wise Auto Shutdown 这款软件就能派上大用场了…

微信小程序被攻击怎么选择高防产品

家人们&#xff0c;微信小程序被攻击了&#xff01;这事儿可不小。你想想&#xff0c;咱们平时用小程序点外卖、购物、玩游戏&#xff0c;现在却可能面临信息泄露风险。卡顿、闪退都算轻的&#xff0c;关键是咱的账号安全、个人数据&#xff0c;就像在“裸奔”。小程序本是方便…

k8s上面的Redis集群链接不上master的解决办法

问题描述 之前在k8s上面部署了一台node&#xff0c;然后创建了6个redis的pod&#xff0c;构建了一个redis的集群&#xff0c;正常运行。 最近添加了一台slave node&#xff0c;然后把其中的几个redis的pod调度到了slave node上面&#xff0c;结果集群就起不来了&#xff0c;…

什么是 C++ 中的智能指针?有哪些类型的智能指针?

智能指针的定义 在 C 中&#xff0c;智能指针是一种类模板&#xff0c;用于管理动态分配的内存。它的主要目的是自动管理内存的生命周期&#xff0c;避免手动释放内存时可能出现的错误&#xff0c;如内存泄漏&#xff08;忘记释放内存&#xff09;和悬空指针&#xff08;访问已…