By

Toradex 胡珊逢

1).简介

目前大多数设备的显示器是横屏,例如高清分辨率1920×1080、笔记本14寸显示器1366×768以及最近很热门的 4K 分辨率3840×2160。另外一种则是竖屏显示器,常见于娱乐、广告设备,手机最为常见的竖屏设备,以及户外的广告牌、售货机以及汽车的中控显示台等。大部分显示器控制器都可以支持横屏和竖屏,正如在手机和平板上看到的一样。

本文基于Toradex的 Apalis iMX6 计算机模块进行竖屏配置说明,其采用 NXP 的 iMX6 SoC。iMX6 SoC 最多带有两个 IPU 显示控制器,支持LVDS、RGB、DVI/HDMI显示器。每个 IPU 最高支持 1024x1024像素的图像旋转。截至本文撰写时,iMX6的IPU 驱动还只支持垂直翻转,即180°旋转。因此,对于±90°的旋转,需要通过其他途径实现。Apalis iMX6 计算机模块采用基于 Angstrom的 Linux BSP,其采用 X11显示框架。Apalis iMX6 也能够支持 Qt5作为 GUI 框架。在 Apalis iMX6上面可以借助 X11和 Qt5实现竖屏显示。

2).基于X11的竖屏显示配置

a). X11本身可以通过软件配置,旋转显示的内容。由于 X11 是底层的显示管理框架,因此能够将所有的显示内容都进行统一的旋转。开发人员只需要根据显示区域重新调整内容排列,而不需要重构代码。下面命令将屏幕顺时针旋转90°。

------------------------

root@apalis-imx6:~#

xrandr -o right

------------------------

b). 在显示旋转后,触摸输入需要进行相同的旋转。

------------------------

root@apalis-imx6:~#

xinput set-prop stmpe-ts 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1

------------------------

c). 显示效果如下图所示。

d). 由于显示和触摸输入都做了同样的旋转,应用程序上能够正确响应触摸事件。X11 是通过软件的方式将显示输出进行选择,通过 CPU 运算重新排列输出像素内容。因此效率上低于直接通过显示控制器实现。下面是使用 glxgears测试1024x768 屏幕选择前后的性能。

./ 正常横屏显示,1024x768

------------------------

root@apalis-imx6:~#

glxgears -fullscreen

1101

frames in 5.0 seconds = 220.045 FPS

1073

frames in 5.8 seconds = 186.566 FPS

1090 frames

in 5.0 seconds = 217.848 FPS

1092

frames in 5.0 seconds = 218.238 FPS

1093

frames in 5.0 seconds = 218.413 FPS

------------------------

./ 竖屏显示,768x1024

------------------------

root@apalis-imx6:~#

glxgears -fullscreen

456

frames in 5.0 seconds = 91.079 FPS

578

frames in 5.0 seconds = 115.483 FPS

598

frames in 5.0 seconds = 119.456 FPS

513

frames in 5.0 seconds = 102.499 FPS

415

frames in 5.0 seconds = 82.989 FPS

------------------------

从测试结果看,经X11 旋转后,在同样的分辨率下,性能下降近一半。由于这是通过软件方式实现,随着屏幕分辨率上升,性能会进一步下降。对于复杂 UI(特别是有3D效果)或者对输出帧率有要求的应用,X11 旋转屏幕并不是理想的方法。简单交互 UI的应用,例如按键控制、文本、图片显示的应用,X11旋转屏幕的开销并不会明显影响用户使用体验。

2).基于QT的竖屏显示配置

如果追求绚丽 UI的应用,在 Apalis iMX6 可以使用Qt5 作为 UI 框架。从Qt5开始,QML 可以借助 OpenGL在 GPU 渲染,不仅可以获得更高的效率,还可以释放CPU 资源,使其处理其他的逻辑运算,提高应用运行的流畅性。

a). 在Qt中可以直接将顶层窗口旋转,其内部的子组件也会按同样的方向旋转,如下面所示

b). 显示效果如下:

c). 对于部分无法直接继承顶层窗口的旋转属性,则需要单独调整。Qt 提供QTransform Class实现更多的旋转效果。由于只进行Qt应用显示的旋转,触摸输入并未发生变化,因此Qt 应用仍然能正确响应触摸事件。

d). 在 GPU 上渲染的QML内容,能获得更好的运行效果。QtWidget应用无法在 GPU 上渲染,只能通过软件的方式进行旋转。

3).总结

竖屏应用的需求,除了上面提到交互 UI 外,另一类则是视频显示。同样,X11可以直接将所有内容旋转,但也会面临性能问题,在这高分辨率视频、多路视频同时显示方面会尤为明显。在 Apalis iMX6 平台上,gst-1.0的imxg2dvideosink 组件,可以将视频内容通过 OpenGL 直接显示,并避免X11垂直同步的问题。

综上所述,用户可以利用X11,只需修改内容排版,即可实现竖屏应用。或者使用Qt5 UI 框架,在应用内旋转输出内容。对于需要高级视觉效果的UI,或者高清视频显示应用,X11 的软件旋转并不是理想的方案。那些带有支持 OpenGL的 GPU 计算机模块,能提供更好的用户体验。Toradex的Apalis Tegra K1、Apalis/Colibri iMX6、Apalis/Colibri T30以及下一代产品Apalis iMX8 QuadMax 计算机模块均能够支持 OpenGL,同时具有不同配置,能够满足不同项目的需求。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

嵌入式 linux 屏 翻转,嵌入式Linux下竖屏显示配置相关推荐

  1. 嵌入式linux 竖屏,嵌入式Linux下竖屏显示配置

    By Toradex 胡珊逢 1).简介 目前大多数设备的显示器是横屏,例如高清分辨率1920×1080.笔记本14寸显示器1366×768以及最近很热门的 4K 分辨率3840×2160.另外一种则 ...

  2. 嵌入式linux屏幕显示,嵌入式Linux下竖屏显示配置

    摘要:目前大多数设备的显示器是横屏,例如高清分辨率1920×1080.笔记本14寸显示器1366×768以及最近很热门的 4K 分辨率3840×2160.另外一种则是竖屏显示器,常见于娱乐.广告设备, ...

  3. g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)

    Linux下编写C++服务器(配置C++编译调试环境) 安装好linux虚拟机,确定能上网后,我们可以开始编写C++程序了,但在这之前我们需要下载编译器和调试器 下载gcc 1.在终端输入yum se ...

  4. Linux系统(Centos)下安装nodejs并配置环境

    总结Centos下安装nodejs并配置环境,记录成功安装的方法.推荐的安装方法是利用已编译的二进制文件安装,不推荐使用源码的形式安装,一是源码安装比较麻烦,二是需要自行下载编译浪费时间. 1.安装n ...

  5. android竖屏固定,ANDROID强制锁定竖屏_APP固定设置竖屏或横屏

    1.XML锁定横屏或竖屏 在没有设置屏幕方向的情况下会默认设置为:android:screenOrientation="unspecified".即未指明屏幕方向.属性取值land ...

  6. win10分屏设置一边竖屏_win10系统电脑屏幕竖屏改为横屏的详细办法

    电脑操作系统在使用的时候经常会被一些问题所困扰,例如很多用户都遇见过win10系统电脑屏幕竖屏改为横屏的问题,大部分用户如果第一次碰到win10系统电脑屏幕竖屏改为横屏的现象,因此大伙都会不知所措,怎 ...

  7. java 强制安卓竖屏,Android4.0强制横屏竖屏

    Android4.0强制横屏竖屏 方法一: android4.0/frameworks/base/services/Java/com/android/server/wm/WindowManagerSe ...

  8. 苹果xr如何截屏_iphone敲两下截屏如何操作 苹果手机触控截屏方法【教程步骤】...

    iphone敲两下截屏如何操作?相信小伙伴们一定很好奇,下面小编为大家带来了苹果手机触控截屏方法教程详解,感兴趣的小伙伴赶紧跟着小编一起来看看吧 iphone敲两下截屏怎么设置 轻点两下进行截屏其实是 ...

  9. linux tomcat守护_Linux 系统下 Tomcat 的服务配置和性能优化

    近来发现很多 linux 系统管理员对 tomcat 系统服务的配置不是很规范,其实,Tomcat 自带了一个守护进程管理工具 jsvc,可以用它来配置 Tomcat 的系统服务. 为了演示的需要,我 ...

最新文章

  1. python 节点_Python节点
  2. python实现火车票查询工具_Python 实现一个火车票查询的工具
  3. 拦截器,过滤器,监听器原理
  4. SAP Spartacus cx-split-view几个css属性值的逻辑依赖关系
  5. 6 redis 编译失败_Centos7.8环境搭建Redis主从复制和哨兵模式
  6. 函数节流(throttle)与函数防抖(debounce)
  7. 存在sql注入漏洞的php,TCCMS在app/controller/news.class.php存在sql注入漏洞
  8. jdk tomcat mysql配置_Linux jdk、tomcat、mysql配置
  9. AAA 及 RADIUS/HWTACACS 协议配置
  10. 百度网盘加速下载Motrix多线程下载器
  11. 2021年智慧交通十大热点
  12. 带你玩转Visual Studio
  13. php携程源码,Swoole2.0协程的使用和源码解读
  14. 两条线段的交点 交点
  15. python输入一个自然数n如果n为奇数_日本数学家谷角静夫在研究自然数时发现了一个奇怪现象(“谷角猜想”):对于任意一个自然数...
  16. 01分布式电商项目 - 电商背景
  17. Android应用中实现系统“分享”接口
  18. Fluent的融化凝固模型介绍
  19. 解决微信小程序 app onLaunch异步请求,在没有请求执行完就加载首页了的问题
  20. node python做游戏服务哪个适合做服务端_当前的几种开源游戏服务端介绍

热门文章

  1. 漫画:美团面试题(面试时,面试官给了我一块巧克力。。)
  2. 【哈希】HRBUST-2300-下雪啦
  3. 道闸系统服务器功能,停车场与道闸系统技术方案.doc
  4. 嘉霖浦厨卫荣膺美国缪斯设计大奖
  5. 白手起家的10个步骤
  6. 高德地图中加载three.js(vue中)(封装
  7. 微信公众号申请服务器,微信公众号服务器接口验证示例
  8. 关于在VMware里面运行安卓模拟器提示需要电脑开启VT功能的方法
  9. 联通宽带路由器的管理地址和管理员密码
  10. 如何给word文件自动添加目录?