页次: 1
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,这个效率很低。
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上就能够看到叠加效果了。
页次: 1