您尚未登录。

楼主 # 2024-01-18 17:05:08

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,177
积分: 1124.5

d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

【FAQ】全志F133(D1s)芯片 如何在Tina下进行显示旋转?
https://bbs.aw-ol.com/topic/2600


想将t113-s3的屏幕旋转180度,搜了下,大都是这个帖子的内容。启动g2d功能,设备树里设置下旋转方向。
然后lvgl里手动调用某个函数。

5.旋转后framebuffer编程是需要注意,旋转后的buffer不会直接显示到屏幕上, 需要在应用刷屏的地方调用FBIOPAN_DISPLAY接口.同步旋转后的buffer到LCD上.

但是我想用的是qt,在qt程序中的什么位值调用这个函数呢?

最近编辑记录 Gentlepig (2024-01-18 17:12:21)

离线

楼主 #1 2024-01-18 17:43:27

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,177
积分: 1124.5

Re: d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

如果想用纯软件旋转的话,qt5又该如何设置环境变量呢?搜了下,有说qt5不支持fb旋转。

我试了
QWS_DISPLAY=Transformed:Rot180

export QT_QPA_EVDEV_ROTATION=180

都没有效果。

离线

#2 2024-01-19 10:58:04

wwwlll
会员
注册时间: 2023-12-15
已发帖子: 3
积分: 3

Re: d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

刚好前段时间踩坑了
1.QGraphicsScene旋转
需要应用全部修改支持
2.通过QT_QPA_PLATFORM旋转:
export QT_QPA_PLATFORM=$QT_QPA_PLATFORM:tty=/dev/console:rotation=90
注意是rotation
这个方式非常占cpu
3.修改qt fb的底层绘制函数
通过链接修改配置使能G2D
然后给QRegion QLinuxFbScreen::doRedraw()函数返回时添加刷新代码就够了
    fb_var_screeninfo vinfo;
    ioctl(mFbFd, FBIOGET_VSCREENINFO, &vinfo);
    ioctl(mFbFd, FBIOPAN_DISPLAY, &vinfo);
路径在/sdk/platform/framework/qt/qt-everywhere-src-5.12.5/qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp
有可能还需要其他修改,但是这是主要的
这个方式也解决了画面撕裂的问题
4.触摸旋转
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=$QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS:rotate=270
这个是rotate

最近编辑记录 wwwlll (2024-01-19 11:01:55)

离线

楼主 #3 2024-01-19 11:53:23

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,177
积分: 1124.5

Re: d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

@wwwlll

感谢,我还看到个,按qt5.4的一个patch,修改qt的framebuffer插件的源码,使其支持旋转功能。
https://blog.csdn.net/qq_15725099/article/details/102717970

另,为什么方法2  cpu占用率高?
我试过方法2,没效果:

export QT_QPA_PLATFORM=linuxfb:rotation=180

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

仔细看了下,
qt源码打patch,这种,也是修改qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp这个文件,需要添加的内容稍多些,但是不用打开内核的g2d功能了。

那么现在可行的方案就两种:
1,内核打开g2d,修改qlinuxfbscreen.cpp,增加某个接口函数。
2,内核不动,修改qlinuxfbscreen.cpp,修改部分函数,增加旋转部分。

这两种都需要重新编译qt源码,头疼...

最近编辑记录 Gentlepig (2024-01-19 13:52:31)

离线

#4 2024-01-19 17:52:50

wwwlll
会员
注册时间: 2023-12-15
已发帖子: 3
积分: 3

Re: d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

@Gentlepig
内核不动,直接修改qlinuxfbscreen.cpp和传递rotation感觉都是一样的,都是在这个文件的底层绘制函数上进行变换,所以非常占cpu

离线

楼主 #5 2024-01-20 11:07:44

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,177
积分: 1124.5

Re: d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

触控这里,是使用原先非旋转情况下的坐标吗?

我现在g2d旋转成功了,qt5界面旋转了180度。想用ts_calibrate校准,结果显示不出界面来,这里估计也得修改tslib源码吧?

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

#export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=$QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS:rotate=180
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:rotate=180 

尝试了以上两句,都没效果,现在触控和画面是差180度的。

/etc/ts.conf  中加入module linear rot=2
也没效果。

最近编辑记录 Gentlepig (2024-01-20 13:29:32)

离线

楼主 #6 2024-01-20 14:25:49

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,177
积分: 1124.5

Re: d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

目前是这么解决的:

在没打开g2d功能时,ts_calibrate -r 2,旋转tslib并校准,保留此时的校准文件。
然后烧录打开g2d的镜像,写入之前的这个校准文件。

离线

#7 2024-02-05 13:30:34

ktouch
会员
注册时间: 2023-11-27
已发帖子: 13
积分: 8

Re: d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

有的液晶屏支持修改上下翻转和左右翻转。

离线

#8 2024-02-05 14:01:17

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 478
积分: 597
个人网站

Re: d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用?

在framebuffer框架下应该难免要改Qt的内部渲染来实现。

如果支持wayland的话,在wayland框架下应该无需Qt源码就可以实现,将g2d放到合成器里就可以了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn