lvgl: Replace sed patching with real patches

Replace the current awful sed hacking with real patches bound for upstream.
The sed hacking was simply not maintainable anymore.

Signed-off-by: Marek Vasut <marex@denx.de>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
Marek Vasut 2024-03-13 05:40:11 +01:00 committed by Khem Raj
parent 2054fda6d1
commit 0f2a499100
No known key found for this signature in database
GPG Key ID: BB053355919D3314
8 changed files with 337 additions and 22 deletions

View File

@ -0,0 +1,36 @@
From 7b89e18c2f21e4b91b461007368df724198ac904 Mon Sep 17 00:00:00 2001
From: Marek Vasut <marex@denx.de>
Date: Tue, 12 Mar 2024 03:13:33 +0100
Subject: [PATCH 1/2] fix(drm): Default to XRGB8888 framebuffer
The ARGB8888 framebuffer format for base canvas makes little sense
as the base canvas is unlikely to be transparent and require alpha.
Use XRGB8888 framebuffer format which is more widely supported by
DRM drivers as base plane pixel format.
This makes e.g. i.MX8M Nano work by default.
Upstream-Status: Submitted [https://github.com/lvgl/lvgl/pull/5851]
Signed-off-by: Marek Vasut <marex@denx.de>
---
This is identical fix to lv_drivers https://github.com/lvgl/lv_drivers/pull/282
---
src/drivers/display/drm/lv_linux_drm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/drivers/display/drm/lv_linux_drm.c b/src/drivers/display/drm/lv_linux_drm.c
index c706f9cb2..faa2212bf 100644
--- a/src/drivers/display/drm/lv_linux_drm.c
+++ b/src/drivers/display/drm/lv_linux_drm.c
@@ -24,7 +24,7 @@
* DEFINES
*********************/
#if LV_COLOR_DEPTH == 32
- #define DRM_FOURCC DRM_FORMAT_ARGB8888
+ #define DRM_FOURCC DRM_FORMAT_XRGB8888
#elif LV_COLOR_DEPTH == 16
#define DRM_FOURCC DRM_FORMAT_RGB565
#else
--
2.43.0

View File

@ -0,0 +1,63 @@
From 5b7f657e8ad656e0854f2252b3bd482b966d650c Mon Sep 17 00:00:00 2001
From: Marek Vasut <marex@denx.de>
Date: Wed, 13 Mar 2024 02:12:30 +0100
Subject: [PATCH 2/2] fix(sdl): handle both LV_IMAGE_SRC_FILE and
LV_IMAGE_SRC_VARIABLE
The SDL image draw code currently assumes that the image source is a
filename and attempts to open that filename. This is not necessarily
the case, e.g. the lv_demo_fb uses encoded images which are of type
LV_IMAGE_SRC_VARIABLE and instead of filename, come with a buffer of
pixels. Handle the later using SDL_CreateRGBSurfaceFrom().
Upstream-Status: Submitted [https://github.com/lvgl/lvgl/pull/5852]
Signed-off-by: Marek Vasut <marex@denx.de>
---
src/draw/sdl/lv_draw_sdl.c | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/src/draw/sdl/lv_draw_sdl.c b/src/draw/sdl/lv_draw_sdl.c
index cbb555d94..5eee5b725 100644
--- a/src/draw/sdl/lv_draw_sdl.c
+++ b/src/draw/sdl/lv_draw_sdl.c
@@ -224,10 +224,34 @@ static bool draw_to_texture(lv_draw_sdl_unit_t * u, cache_data_t * data)
break;
case LV_DRAW_TASK_TYPE_IMAGE: {
lv_draw_image_dsc_t * image_dsc = task->draw_dsc;
- const char * path = image_dsc->src;
- SDL_Surface * surface = IMG_Load(&path[2]);
+ lv_image_src_t type = lv_image_src_get_type(image_dsc->src);
+ SDL_Surface * surface = NULL;
+ if(type == LV_IMAGE_SRC_FILE) {
+ const char * path = image_dsc->src;
+ surface = IMG_Load(&path[2]);
+ }
+ else if(type == LV_IMAGE_SRC_VARIABLE) {
+ lv_image_dsc_t * lvd = image_dsc->src;
+ surface = SDL_CreateRGBSurfaceFrom(lvd->data,
+ lvd->header.w, lvd->header.h,
+ LV_COLOR_FORMAT_GET_BPP(lvd->header.cf),
+ lvd->header.stride,
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN
+ 0x00FF0000,
+ 0x0000FF00,
+ 0x000000FF,
+ 0xFF000000
+#else
+ 0x0000FF00,
+ 0x00FF0000,
+ 0xFF000000,
+ 0x000000FF
+#endif
+ );
+ }
+
if(surface == NULL) {
- fprintf(stderr, "could not load image: %s\n", IMG_GetError());
+ fprintf(stderr, "could not load image\n");
return false;
}
--
2.43.0

View File

@ -0,0 +1,45 @@
From 85d90749a10b5f91741d37b75825935bf7cc4fb3 Mon Sep 17 00:00:00 2001
From: Marek Vasut <marex@denx.de>
Date: Tue, 12 Mar 2024 03:00:37 +0100
Subject: [PATCH 3/6] Make fbdev device node runtime configurable via
environment variable
Test whether $LV_VIDEO_CARD environment variable is non-NULL and in
case it is, use it as the video card file in lv_linux_fbdev_set_file().
Otherwise fall back to /dev/fb0, i.e. the current behavior. This way,
it is possible to test LVGL on systems with multiple fbdev devices.
Upstream-Status: Submitted [https://github.com/lvgl/lv_port_linux_frame_buffer/pull/47]
Signed-off-by: Marek Vasut <marex@denx.de>
---
main.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/main.c b/main.c
index 9775b9c..b64a098 100644
--- a/main.c
+++ b/main.c
@@ -4,13 +4,19 @@
#include <pthread.h>
#include <time.h>
+static const char *lv_linux_get_video_card_node(const char *videocard_default)
+{
+ return getenv("LV_VIDEO_CARD") ? : videocard_default;
+}
+
int main(void)
{
+ const char *videocard = lv_linux_get_video_card_node("/dev/fb0");
lv_init();
/*Linux frame buffer device init*/
lv_display_t * disp = lv_linux_fbdev_create();
- lv_linux_fbdev_set_file(disp, "/dev/fb0");
+ lv_linux_fbdev_set_file(disp, videocard);
/*Create a Demo*/
lv_demo_widgets();
--
2.43.0

View File

@ -0,0 +1,52 @@
From 593da8e11cc5029773ad330b5d7633ee9f2fba95 Mon Sep 17 00:00:00 2001
From: Marek Vasut <marex@denx.de>
Date: Tue, 12 Mar 2024 18:09:42 +0100
Subject: [PATCH 4/6] Factor out fbdev initialization code
Pull fbdev initialization code into separate function and add ifdef
around it, so it can be conditionally compiled in. This is done in
preparation for addition of other backend initialization example
code.
Upstream-Status: Submitted [https://github.com/lvgl/lv_port_linux_frame_buffer/pull/47]
Signed-off-by: Marek Vasut <marex@denx.de>
---
main.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/main.c b/main.c
index b64a098..288519c 100644
--- a/main.c
+++ b/main.c
@@ -9,14 +9,24 @@ static const char *lv_linux_get_video_card_node(const char *videocard_default)
return getenv("LV_VIDEO_CARD") ? : videocard_default;
}
-int main(void)
+#if LV_USE_LINUX_FBDEV
+static void lv_linux_disp_init(void)
{
const char *videocard = lv_linux_get_video_card_node("/dev/fb0");
- lv_init();
-
- /*Linux frame buffer device init*/
lv_display_t * disp = lv_linux_fbdev_create();
+
lv_linux_fbdev_set_file(disp, videocard);
+}
+#else
+#error Unsupported configuration
+#endif
+
+int main(void)
+{
+ lv_init();
+
+ /*Linux display device init*/
+ lv_linux_disp_init();
/*Create a Demo*/
lv_demo_widgets();
--
2.43.0

View File

@ -0,0 +1,59 @@
From dabf40559428733413432afa29598bc145aa6636 Mon Sep 17 00:00:00 2001
From: Marek Vasut <marex@denx.de>
Date: Tue, 12 Mar 2024 03:08:13 +0100
Subject: [PATCH 5/6] Add DRM/KMS example support
Extend the main.c to support both legacy fbdev and DRM/KMS initialization.
To use legacy fbdev support, adjust lv_conf.h as follows:
LV_USE_LINUX_FBDEV=1
LV_USE_LINUX_DRM=0
To use DRM/KMS support, adjust lv_conf.h as follows:
LV_USE_LINUX_FBDEV=0
LV_USE_LINUX_DRM=1
Upstream-Status: Submitted [https://github.com/lvgl/lv_port_linux_frame_buffer/pull/47]
Signed-off-by: Marek Vasut <marex@denx.de>
---
CMakeLists.txt | 5 ++++-
main.c | 8 ++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d91b196..c1cfb7f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,9 @@ target_include_directories(lvgl PUBLIC ${PROJECT_SOURCE_DIR})
add_executable(main main.c mouse_cursor_icon.c)
-target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} m pthread)
+include(${CMAKE_CURRENT_LIST_DIR}/lvgl/tests/FindLibDRM.cmake)
+include_directories(${Libdrm_INCLUDE_DIRS})
+
+target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)
diff --git a/main.c b/main.c
index 288519c..ab4e936 100644
--- a/main.c
+++ b/main.c
@@ -17,6 +17,14 @@ static void lv_linux_disp_init(void)
lv_linux_fbdev_set_file(disp, videocard);
}
+#elif LV_USE_LINUX_DRM
+static void lv_linux_disp_init(void)
+{
+ const char *videocard = lv_linux_get_video_card_node("/dev/dri/card0");
+ lv_display_t * disp = lv_linux_drm_create();
+
+ lv_linux_drm_set_file(disp, videocard, -1);
+}
#else
#error Unsupported configuration
#endif
--
2.43.0

View File

@ -0,0 +1,69 @@
From b202ce51f7b68c460fcd1b6d9c3ffa8aaf2baaf6 Mon Sep 17 00:00:00 2001
From: Marek Vasut <marex@denx.de>
Date: Tue, 12 Mar 2024 19:05:38 +0100
Subject: [PATCH 6/6] Add SDL2 example support
Extend the main.c to support both legacy fbdev, DRM/KMS, SDL2 initialization.
The SDL2 window resolution can be configured using environment variables
LV_VIDEO_WIDTH and LV_VIDEO_HEIGHT and defaults to 800 x 480 .
To use legacy fbdev support, adjust lv_conf.h as follows:
LV_USE_LINUX_FBDEV=1
LV_USE_LINUX_DRM=0
LV_USE_SDL=0
To use DRM/KMS support, adjust lv_conf.h as follows:
LV_USE_LINUX_FBDEV=0
LV_USE_LINUX_DRM=1
LV_USE_SDL=0
To use SDL2 support, adjust lv_conf.h as follows:
LV_USE_LINUX_FBDEV=0
LV_USE_LINUX_DRM=0
LV_USE_SDL=1
Upstream-Status: Submitted [https://github.com/lvgl/lv_port_linux_frame_buffer/pull/47]
Signed-off-by: Marek Vasut <marex@denx.de>
---
CMakeLists.txt | 6 +++++-
main.c | 8 ++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1cfb7f..658193f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,6 +15,10 @@ add_executable(main main.c mouse_cursor_icon.c)
include(${CMAKE_CURRENT_LIST_DIR}/lvgl/tests/FindLibDRM.cmake)
include_directories(${Libdrm_INCLUDE_DIRS})
-target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
+find_package(SDL2)
+find_package(SDL2_image)
+include_directories(${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS})
+
+target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)
diff --git a/main.c b/main.c
index ab4e936..4b66ebc 100644
--- a/main.c
+++ b/main.c
@@ -25,6 +25,14 @@ static void lv_linux_disp_init(void)
lv_linux_drm_set_file(disp, videocard, -1);
}
+#elif LV_USE_SDL
+static void lv_linux_disp_init(void)
+{
+ const int width = atoi(getenv("LV_VIDEO_WIDTH") ? : "800");
+ const int height = atoi(getenv("LV_VIDEO_HEIGHT") ? : "480");
+
+ lv_sdl_window_create(width, height);
+}
#else
#error Unsupported configuration
#endif
--
2.43.0

View File

@ -7,6 +7,12 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=802d3d83ae80ef5f343050bf96cce3a4 \
SRC_URI = "\
git://github.com/lvgl/lv_port_linux_frame_buffer.git;protocol=https;branch=master;name=demo \
git://github.com/lvgl/lvgl;protocol=https;branch=master;name=lvgl;subdir=git/lvgl \
file://0001-fix-drm-Default-to-XRGB8888-framebuffer.patch;patchdir=lvgl \
file://0002-fix-sdl-handle-both-LV_IMAGE_SRC_FILE-and-LV_IMAGE_S.patch;patchdir=lvgl \
file://0003-Make-fbdev-device-node-runtime-configurable-via-envi.patch \
file://0004-Factor-out-fbdev-initialization-code.patch \
file://0005-Add-DRM-KMS-example-support.patch \
file://0006-Add-SDL2-example-support.patch \
"
SRCREV_demo = "dccc6a1ca48372aa993dbea7a8e17dec6f42df6a"
SRCREV_lvgl = "e29d35b43c509b6d7189f5dac87139441669ae66"
@ -26,23 +32,9 @@ S = "${WORKDIR}/git"
TARGET_CFLAGS += "-I${STAGING_INCDIR}/libdrm"
do_configure:prepend() {
# Fix ARGB8888 base plane format misuse again
sed -i 's@ARGB8888@XRGB8888@g' "${S}/lvgl/src/drivers/display/drm/lv_linux_drm.c"
if [ "${LVGL_CONFIG_USE_DRM}" -eq 1 ] ; then
# Add libdrm build dependency
sed -i '/^target_link_libraries/ s@pthread@& drm@' "${S}/CMakeLists.txt"
# Switch from fbdev to drm usage
sed -i "s@lv_linux_fbdev_set_file.*@lv_linux_drm_set_file(disp, \"${LVGL_CONFIG_DRM_CARD}\", -1);@g" "${S}/main.c"
sed -i 's@fbdev@drm@g' "${S}/main.c"
fi
if [ "${LVGL_CONFIG_USE_SDL}" -eq 1 ] ; then
# Add libsdl build dependency
sed -i '/^target_link_libraries/ s@pthread@& SDL2 SDL2_image@' "${S}/CMakeLists.txt"
# Switch from fbdev to sdl usage
sed -i 's@lv_linux_fbdev_create()@lv_sdl_window_create(atoi(getenv("LV_VIDEO_WIDTH") ? : "800"), atoi(getenv("LV_VIDEO_HEIGHT") ? : "480"))@g' "${S}/main.c"
sed -i '/lv_linux_fbdev_set_file/ d' "${S}/main.c"
# Add libsdl build dependency, SDL2_image has no cmake file
sed -i '/^target_link_libraries/ s@pthread@& SDL2_image@' "${S}/CMakeLists.txt"
fi
}

View File

@ -8,7 +8,11 @@ SUMMARY = "Light and Versatile Graphics Library"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=bf1198c89ae87f043108cea62460b03a"
SRC_URI = "git://github.com/lvgl/lvgl;protocol=https;branch=master"
SRC_URI = "\
git://github.com/lvgl/lvgl;protocol=https;branch=master \
file://0001-fix-drm-Default-to-XRGB8888-framebuffer.patch \
file://0002-fix-sdl-handle-both-LV_IMAGE_SRC_FILE-and-LV_IMAGE_S.patch \
"
SRCREV = "e29d35b43c509b6d7189f5dac87139441669ae66"
PV .= "+git${SRCPV}"
@ -22,11 +26,6 @@ ALLOW_EMPTY:${PN} = "1"
PACKAGECONFIG ??= "drm"
require lv-conf.inc
do_configure:prepend() {
# Fix ARGB8888 base plane format misuse again
sed -i 's@ARGB8888@XRGB8888@g' "${S}/src/drivers/display/drm/lv_linux_drm.c"
}
FILES:${PN}-dev += "\
${includedir}/${PN}/ \
${includedir}/${PN}/lvgl/ \