From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from 6.mo3.mail-out.ovh.net ([188.165.43.173] helo=mo3.mail-out.ovh.net) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1T9VCr-00079G-NG for barebox@lists.infradead.org; Thu, 06 Sep 2012 06:04:53 +0000 Received: from mail91.ha.ovh.net (b7.ovh.net [213.186.33.57]) by mo3.mail-out.ovh.net (Postfix) with SMTP id F3DB9FF8C51 for ; Thu, 6 Sep 2012 08:12:23 +0200 (CEST) From: Jean-Christophe PLAGNIOL-VILLARD Date: Thu, 6 Sep 2012 08:04:56 +0200 Message-Id: <1346911500-12902-8-git-send-email-plagnioj@jcrosoft.com> In-Reply-To: <1346911500-12902-1-git-send-email-plagnioj@jcrosoft.com> References: <20120906060058.GE4761@game.jcrosoft.org> <1346911500-12902-1-git-send-email-plagnioj@jcrosoft.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: barebox-bounces@lists.infradead.org Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH 08/12] Introduce graphic utils To: barebox@lists.infradead.org to Factorise pixel rendering Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD --- commands/splash.c | 61 +--------------------------------- include/graphic_utils.h | 13 ++++++++ include/image_renderer.h | 20 ----------- lib/Makefile | 1 + lib/bmp.c | 5 +-- lib/graphic_utils.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 101 insertions(+), 82 deletions(-) create mode 100644 include/graphic_utils.h create mode 100644 lib/graphic_utils.c diff --git a/commands/splash.c b/commands/splash.c index 4bddc6c..f4b975b 100644 --- a/commands/splash.c +++ b/commands/splash.c @@ -8,66 +8,7 @@ #include #include #include - -static u32 get_pixel(struct fb_info *info, u32 color) -{ - u32 px; - u8 t = (color >> 24) & 0xff; - u8 r = (color >> 16) & 0xff; - u8 g = (color >> 8 ) & 0xff; - u8 b = (color >> 0 ) & 0xff; - - if (info->grayscale) { - px = (r | g | b) ? 0xffffffff : 0x0; - return px; - } - - px = (t >> (8 - info->transp.length)) << info->transp.offset | - (r >> (8 - info->red.length)) << info->red.offset | - (g >> (8 - info->green.length)) << info->green.offset | - (b >> (8 - info->blue.length)) << info->blue.offset; - - return px; -} - -static void memsetw(void *s, u16 c, size_t n) -{ - size_t i; - u16* tmp = s; - - for (i = 0; i < n; i++) - *tmp++ = c; -} - -static void memsetl(void *s, u32 c, size_t n) -{ - size_t i; - u32* tmp = s; - - for (i = 0; i < n; i++) - *tmp++ = c; -} - -static void memset_pixel(struct fb_info *info, void* buf, u32 color, size_t size) -{ - u32 px; - u8 *screen = buf; - - px = get_pixel(info, color); - - switch (info->bits_per_pixel) { - case 8: - memset(screen, (uint8_t)px, size); - break; - case 16: - memsetw(screen, (uint16_t)px, size); - break; - case 32: - case 24: - memsetl(screen, px, size); - break; - } -} +#include static int do_splash(int argc, char *argv[]) { diff --git a/include/graphic_utils.h b/include/graphic_utils.h new file mode 100644 index 0000000..6d555b2 --- /dev/null +++ b/include/graphic_utils.h @@ -0,0 +1,13 @@ +/* + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD + * + * GPL v2 + */ + +#ifndef __GRAPHIC_UTILS_H__ +#define __GRAPHIC_UTILS_H__ + +void set_rgb_pixel(struct fb_info *info, void *adr, int r, int g, int b); +void memset_pixel(struct fb_info *info, void* buf, u32 color, size_t size); + +#endif /* __GRAPHIC_UTILS_H__ */ diff --git a/include/image_renderer.h b/include/image_renderer.h index a93242c..d735cf7 100644 --- a/include/image_renderer.h +++ b/include/image_renderer.h @@ -19,26 +19,6 @@ struct image_renderer { struct list_head list; }; -static inline void set_pixel(struct fb_info *info, void *adr, int r, int g, int b) -{ - u32 px; - - px = (r >> (8 - info->red.length)) << info->red.offset | - (g >> (8 - info->green.length)) << info->green.offset | - (b >> (8 - info->blue.length)) << info->blue.offset; - - switch (info->bits_per_pixel) { - case 8: - break; - case 16: - *(u16 *)adr = px; - break; - case 32: - *(u32 *)adr = px; - break; - } -} - #ifdef CONFIG_IMAGE_RENDERER int image_renderer_register(struct image_renderer *ir); void image_render_unregister(struct image_renderer *ir); diff --git a/lib/Makefile b/lib/Makefile index 8fbae8a..96b7c56 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -35,4 +35,5 @@ obj-$(CONFIG_BCH) += bch.o obj-$(CONFIG_BITREV) += bitrev.o obj-$(CONFIG_QSORT) += qsort.o obj-$(CONFIG_BMP) += bmp.o +obj-$(CONFIG_IMAGE_RENDERER) += image_renderer.o graphic_utils.o obj-$(CONFIG_IMAGE_RENDERER) += image_renderer.o diff --git a/lib/bmp.c b/lib/bmp.c index 573cf97..8986930 100644 --- a/lib/bmp.c +++ b/lib/bmp.c @@ -5,6 +5,7 @@ #include #include #include +#include static int bmp_renderer(struct fb_info *info, void* data, int size, void* fb, int startx, int starty, void* offscreenbuf) @@ -57,7 +58,7 @@ static int bmp_renderer(struct fb_info *info, void* data, int size, void* fb, pixel = *image; - set_pixel(info, adr, color_table[pixel].red, + set_rgb_pixel(info, adr, color_table[pixel].red, color_table[pixel].green, color_table[pixel].blue); adr += info->bits_per_pixel >> 3; @@ -79,7 +80,7 @@ static int bmp_renderer(struct fb_info *info, void* data, int size, void* fb, pixel = image; - set_pixel(info, adr, pixel[2], pixel[1], + set_rgb_pixel(info, adr, pixel[2], pixel[1], pixel[0]); adr += info->bits_per_pixel >> 3; diff --git a/lib/graphic_utils.c b/lib/graphic_utils.c new file mode 100644 index 0000000..2e174d8 --- /dev/null +++ b/lib/graphic_utils.c @@ -0,0 +1,83 @@ +#include +#include +#include + +static u32 get_pixel(struct fb_info *info, u32 color) +{ + u32 px; + u8 t = (color >> 24) & 0xff; + u8 r = (color >> 16) & 0xff; + u8 g = (color >> 8 ) & 0xff; + u8 b = (color >> 0 ) & 0xff; + + if (info->grayscale) { + px = (r | g | b) ? 0xffffffff : 0x0; + return px; + } + + px = (t >> (8 - info->transp.length)) << info->transp.offset | + (r >> (8 - info->red.length)) << info->red.offset | + (g >> (8 - info->green.length)) << info->green.offset | + (b >> (8 - info->blue.length)) << info->blue.offset; + + return px; +} + +static void memsetw(void *s, u16 c, size_t n) +{ + size_t i; + u16* tmp = s; + + for (i = 0; i < n; i++) + *tmp++ = c; +} + +static void memsetl(void *s, u32 c, size_t n) +{ + size_t i; + u32* tmp = s; + + for (i = 0; i < n; i++) + *tmp++ = c; +} + +void memset_pixel(struct fb_info *info, void* buf, u32 color, size_t size) +{ + u32 px; + u8 *screen = buf; + + px = get_pixel(info, color); + + switch (info->bits_per_pixel) { + case 8: + memset(screen, (uint8_t)px, size); + break; + case 16: + memsetw(screen, (uint16_t)px, size); + break; + case 32: + case 24: + memsetl(screen, px, size); + break; + } +} + +void set_rgb_pixel(struct fb_info *info, void *adr, int r, int g, int b) +{ + u32 px; + + px = (r >> (8 - info->red.length)) << info->red.offset | + (g >> (8 - info->green.length)) << info->green.offset | + (b >> (8 - info->blue.length)) << info->blue.offset; + + switch (info->bits_per_pixel) { + case 8: + break; + case 16: + *(u16 *)adr = px; + break; + case 32: + *(u32 *)adr = px; + break; + } +} -- 1.7.10.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox