WhyCan Forum

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-09-27 17:04:44

guduxue
会员
注册时间: 2019-09-27
累计积分: 2

arm linux 下littlevgl设置成部分全透明的效果?

将lvgl移植到arm_linux平台下,想在fb层使用lvgl做一个部分完全透明的效果,这样可以将下面的视频层的图像显示出来,请问有没有大佬做过?

离线

#2 2019-09-27 18:02:16

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,848

Re: arm linux 下littlevgl设置成部分全透明的效果?

这个是显卡驱动支持才行吧,软件算不过来

离线

#3 2019-10-06 23:42:14

dean
会员
注册时间: 2019-10-06
累计积分: 2

Re: arm linux 下littlevgl设置成部分全透明的效果?

1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP    0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。

最近编辑记录 dean (2019-10-06 23:42:47)

离线

#4 2019-10-06 23:46:39

我思故我在
会员
注册时间: 2019-09-03
累计积分: 90

Re: arm linux 下littlevgl设置成部分全透明的效果?

@dean 优秀,感谢分享

离线

#5 2019-10-08 00:25:21

tango_zhu
会员
注册时间: 2018-04-12
累计积分: 33

Re: arm linux 下littlevgl设置成部分全透明的效果?

dean 说:

1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP    0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。

楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
您的意思是#define LV_COLOR_SCREEN_TRANSP    1
然后在src/lv_hal/lv_hal_disp.c 143行下面添加    lv_obj_set_style(disp->act_scr, &lv_style_transp); 么

离线

#6 2019-10-08 14:27:41

KingJin
会员
注册时间: 2018-04-12
累计积分: 77

Re: arm linux 下littlevgl设置成部分全透明的效果?

tango_zhu 说:
dean 说:

1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP    0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。

楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
您的意思是#define LV_COLOR_SCREEN_TRANSP    1
然后在src/lv_hal/lv_hal_disp.c 143行下面添加    lv_obj_set_style(disp->act_scr, &lv_style_transp); 么

这个是要CPU和驱动同时都支持才可以

离线

#7 2019-10-08 16:48:43

dean
会员
注册时间: 2019-10-06
累计积分: 2

Re: arm linux 下littlevgl设置成部分全透明的效果?

tango_zhu 说:
dean 说:

1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP    0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。

楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
您的意思是#define LV_COLOR_SCREEN_TRANSP    1
然后在src/lv_hal/lv_hal_disp.c 143行下面添加    lv_obj_set_style(disp->act_scr, &lv_style_transp); 么

是的,不过确实要有GPU支持才可以,一般的ARM处理器的GPU目前都有几个图层,是可以支持的。
像Android系统就是这么做的。

楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
=> 在同一个framebuffer,目前ARM或MCU软件做不出这个效果的,帧率不会超过10
=> 这样效果想实现也容易,就是灵活利用lvgl的三个图层
    disp->act_scr   = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/
    disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
    disp->sys_layer = lv_obj_create(NULL, NULL); /*Create sys layer on the display*/

把视频YUV格式转换为RGB的显示模式,画在act_scr,然后把UI画在top_layer,这个效率很低。

最近编辑记录 dean (2019-10-08 16:57:47)

离线

#8 2019-10-08 17:02:57

ffplay
会员
注册时间: 2019-08-31
累计积分: 38

Re: arm linux 下littlevgl设置成部分全透明的效果?

楼上朋友说得有道理,靠软件去合成界面效率太低了,除非画面很小帧率才会上去.

离线

页脚