diff options
Diffstat (limited to 'meta-agl-drm-lease/recipes-core/psplash/files/0007-Extract-draw-rect-image-from-psplash-fb.patch')
-rw-r--r-- | meta-agl-drm-lease/recipes-core/psplash/files/0007-Extract-draw-rect-image-from-psplash-fb.patch | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/meta-agl-drm-lease/recipes-core/psplash/files/0007-Extract-draw-rect-image-from-psplash-fb.patch b/meta-agl-drm-lease/recipes-core/psplash/files/0007-Extract-draw-rect-image-from-psplash-fb.patch new file mode 100644 index 00000000..2e897d4c --- /dev/null +++ b/meta-agl-drm-lease/recipes-core/psplash/files/0007-Extract-draw-rect-image-from-psplash-fb.patch @@ -0,0 +1,299 @@ +From d0f899114600ee25eb2d7d2c089deb549c371bd2 Mon Sep 17 00:00:00 2001 +From: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com> +Date: Mon, 25 Apr 2022 10:59:46 +0300 +Subject: [PATCH 07/17] Extract draw rect/image from psplash-fb + +drm-backend backport from: +https://patchwork.yoctoproject.org/project/yocto/cover/20220425075954.10427-1-vasyl.vavrychuk@opensynergy.com/ + +Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com> +--- + psplash-draw.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ + psplash-draw.h | 20 +++++++++++++++ + psplash-fb.c | 70 -------------------------------------------------- + psplash-fb.h | 20 --------------- + psplash.c | 16 ++++++------ + 5 files changed, 98 insertions(+), 98 deletions(-) + +diff --git a/psplash-draw.c b/psplash-draw.c +index 570cfce..6887e22 100644 +--- a/psplash-draw.c ++++ b/psplash-draw.c +@@ -118,3 +118,73 @@ psplash_plot_pixel(PSplashCanvas *canvas, + } + } + } ++ ++void ++psplash_draw_rect(PSplashCanvas *canvas, ++ int x, ++ int y, ++ int width, ++ int height, ++ uint8 red, ++ uint8 green, ++ uint8 blue) ++{ ++ int dx, dy; ++ ++ for (dy=0; dy < height; dy++) ++ for (dx=0; dx < width; dx++) ++ psplash_plot_pixel(canvas, x+dx, y+dy, red, green, blue); ++} ++ ++void ++psplash_draw_image(PSplashCanvas *canvas, ++ int x, ++ int y, ++ int img_width, ++ int img_height, ++ int img_bytes_per_pixel, ++ int img_rowstride, ++ uint8 *rle_data) ++{ ++ uint8 *p = rle_data; ++ int dx = 0, dy = 0, total_len; ++ unsigned int len; ++ ++ total_len = img_rowstride * img_height; ++ ++ /* FIXME: Optimise, check for over runs ... */ ++ while ((p - rle_data) < total_len) ++ { ++ len = *(p++); ++ ++ if (len & 128) ++ { ++ len -= 128; ++ ++ if (len == 0) break; ++ ++ do ++ { ++ if ((img_bytes_per_pixel < 4 || *(p+3)) && dx < img_width) ++ psplash_plot_pixel(canvas, x+dx, y+dy, *(p), *(p+1), *(p+2)); ++ if (++dx * img_bytes_per_pixel >= img_rowstride) { dx=0; dy++; } ++ } ++ while (--len); ++ ++ p += img_bytes_per_pixel; ++ } ++ else ++ { ++ if (len == 0) break; ++ ++ do ++ { ++ if ((img_bytes_per_pixel < 4 || *(p+3)) && dx < img_width) ++ psplash_plot_pixel(canvas, x+dx, y+dy, *(p), *(p+1), *(p+2)); ++ if (++dx * img_bytes_per_pixel >= img_rowstride) { dx=0; dy++; } ++ p += img_bytes_per_pixel; ++ } ++ while (--len && (p - rle_data) < total_len); ++ } ++ } ++} +diff --git a/psplash-draw.h b/psplash-draw.h +index ab2d4d2..f8361da 100644 +--- a/psplash-draw.h ++++ b/psplash-draw.h +@@ -48,4 +48,24 @@ psplash_plot_pixel(PSplashCanvas *canvas, + uint8 green, + uint8 blue); + ++void ++psplash_draw_rect(PSplashCanvas *canvas, ++ int x, ++ int y, ++ int width, ++ int height, ++ uint8 red, ++ uint8 green, ++ uint8 blue); ++ ++void ++psplash_draw_image(PSplashCanvas *canvas, ++ int x, ++ int y, ++ int img_width, ++ int img_height, ++ int img_bytes_per_pixel, ++ int img_rowstride, ++ uint8 *rle_data); ++ + #endif +diff --git a/psplash-fb.c b/psplash-fb.c +index a7029c5..07839d5 100644 +--- a/psplash-fb.c ++++ b/psplash-fb.c +@@ -339,76 +339,6 @@ psplash_fb_new (int angle, int fbdev_id) + return NULL; + } + +-void +-psplash_fb_draw_rect (PSplashFB *fb, +- int x, +- int y, +- int width, +- int height, +- uint8 red, +- uint8 green, +- uint8 blue) +-{ +- int dx, dy; +- +- for (dy=0; dy < height; dy++) +- for (dx=0; dx < width; dx++) +- psplash_plot_pixel(&fb->canvas, x+dx, y+dy, red, green, blue); +-} +- +-void +-psplash_fb_draw_image (PSplashFB *fb, +- int x, +- int y, +- int img_width, +- int img_height, +- int img_bytes_per_pixel, +- int img_rowstride, +- uint8 *rle_data) +-{ +- uint8 *p = rle_data; +- int dx = 0, dy = 0, total_len; +- unsigned int len; +- +- total_len = img_rowstride * img_height; +- +- /* FIXME: Optimise, check for over runs ... */ +- while ((p - rle_data) < total_len) +- { +- len = *(p++); +- +- if (len & 128) +- { +- len -= 128; +- +- if (len == 0) break; +- +- do +- { +- if ((img_bytes_per_pixel < 4 || *(p+3)) && dx < img_width) +- psplash_plot_pixel(&fb->canvas, x+dx, y+dy, *(p), *(p+1), *(p+2)); +- if (++dx * img_bytes_per_pixel >= img_rowstride) { dx=0; dy++; } +- } +- while (--len); +- +- p += img_bytes_per_pixel; +- } +- else +- { +- if (len == 0) break; +- +- do +- { +- if ((img_bytes_per_pixel < 4 || *(p+3)) && dx < img_width) +- psplash_plot_pixel(&fb->canvas, x+dx, y+dy, *(p), *(p+1), *(p+2)); +- if (++dx * img_bytes_per_pixel >= img_rowstride) { dx=0; dy++; } +- p += img_bytes_per_pixel; +- } +- while (--len && (p - rle_data) < total_len); +- } +- } +-} +- + /* Font rendering code based on BOGL by Ben Pfaff */ + + static int +diff --git a/psplash-fb.h b/psplash-fb.h +index eb02c62..1eecb47 100644 +--- a/psplash-fb.h ++++ b/psplash-fb.h +@@ -40,26 +40,6 @@ psplash_fb_destroy (PSplashFB *fb); + PSplashFB* + psplash_fb_new (int angle, int fbdev_id); + +-void +-psplash_fb_draw_rect (PSplashFB *fb, +- int x, +- int y, +- int width, +- int height, +- uint8 red, +- uint8 green, +- uint8 blue); +- +-void +-psplash_fb_draw_image (PSplashFB *fb, +- int x, +- int y, +- int img_width, +- int img_height, +- int img_bytes_pre_pixel, +- int img_rowstride, +- uint8 *rle_data); +- + void + psplash_fb_text_size (int *width, + int *height, +diff --git a/psplash.c b/psplash.c +index f23f03d..2aeb583 100644 +--- a/psplash.c ++++ b/psplash.c +@@ -47,7 +47,7 @@ psplash_draw_msg (PSplashFB *fb, const char *msg) + + /* Clear */ + +- psplash_fb_draw_rect (fb, ++ psplash_draw_rect(&fb->canvas, + 0, + SPLIT_LINE_POS(fb) - h, + fb->canvas.width, +@@ -77,19 +77,19 @@ psplash_draw_progress (PSplashFB *fb, int value) + if (value > 0) + { + barwidth = (CLAMP(value,0,100) * width) / 100; +- psplash_fb_draw_rect (fb, x + barwidth, y, ++ psplash_draw_rect(&fb->canvas, x + barwidth, y, + width - barwidth, height, + PSPLASH_BAR_BACKGROUND_COLOR); +- psplash_fb_draw_rect (fb, x, y, barwidth, ++ psplash_draw_rect(&fb->canvas, x, y, barwidth, + height, PSPLASH_BAR_COLOR); + } + else + { + barwidth = (CLAMP(-value,0,100) * width) / 100; +- psplash_fb_draw_rect (fb, x, y, ++ psplash_draw_rect(&fb->canvas, x, y, + width - barwidth, height, + PSPLASH_BAR_BACKGROUND_COLOR); +- psplash_fb_draw_rect (fb, x + width - barwidth, ++ psplash_draw_rect(&fb->canvas, x + width - barwidth, + y, barwidth, height, + PSPLASH_BAR_COLOR); + } +@@ -301,11 +301,11 @@ main (int argc, char** argv) + #endif + + /* Clear the background with #ecece1 */ +- psplash_fb_draw_rect (fb, 0, 0, fb->canvas.width, fb->canvas.height, ++ psplash_draw_rect(&fb->canvas, 0, 0, fb->canvas.width, fb->canvas.height, + PSPLASH_BACKGROUND_COLOR); + + /* Draw the Poky logo */ +- psplash_fb_draw_image (fb, ++ psplash_draw_image(&fb->canvas, + (fb->canvas.width - POKY_IMG_WIDTH)/2, + #if PSPLASH_IMG_FULLSCREEN + (fb->canvas.height - POKY_IMG_HEIGHT)/2, +@@ -321,7 +321,7 @@ main (int argc, char** argv) + + #ifdef PSPLASH_SHOW_PROGRESS_BAR + /* Draw progress bar border */ +- psplash_fb_draw_image (fb, ++ psplash_draw_image(&fb->canvas, + (fb->canvas.width - BAR_IMG_WIDTH)/2, + SPLIT_LINE_POS(fb), + BAR_IMG_WIDTH, +-- +2.25.1 + |