All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] bmp_logo: support CONFIG_DM_VIDEO
Date: Thu, 13 Jun 2019 05:12:38 +0200	[thread overview]
Message-ID: <20190613031239.76865-1-hs@denx.de> (raw)

in case of bmp_logo, the video_bmp driver is used for
drawing a bmp logo. This driver supports only "full"
bmp data. Adding a logo with the bmp_logo tool to
u-boot binary adds currently only real data and drops
the bmp header.

This patch adds now the full bmp data to the u-boot
binary, so video_bmp driver works with the logo embedded
into u-boot.

Fixed also some checkpatch error poping up with this
patch.

Signed-off-by: Heiko Schocher <hs@denx.de>
---

 tools/Makefile   |  6 ++++++
 tools/bmp_logo.c | 42 +++++++++++++++++++++++++++++++-----------
 2 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/tools/Makefile b/tools/Makefile
index 33e90a8025..d0e1ded61b 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -266,8 +266,14 @@ __build:	$(LOGO-y)
 $(LOGO_H):	$(obj)/bmp_logo $(LOGO_BMP)
 	$(obj)/bmp_logo --gen-info $(LOGO_BMP) > $@
 
+ifeq ($(CONFIG_DM_VIDEO),y)
+$(LOGO_DATA_H):	$(obj)/bmp_logo $(LOGO_BMP)
+	$(obj)/bmp_logo --gen-bmp $(LOGO_BMP) > $@
+else
 $(LOGO_DATA_H):	$(obj)/bmp_logo $(LOGO_BMP)
 	$(obj)/bmp_logo --gen-data $(LOGO_BMP) > $@
+#endif
+endif
 
 # Let clean descend into subdirs
 subdir- += env
diff --git a/tools/bmp_logo.c b/tools/bmp_logo.c
index 55f833fb9b..74fcadca63 100644
--- a/tools/bmp_logo.c
+++ b/tools/bmp_logo.c
@@ -2,7 +2,8 @@
 
 enum {
 	MODE_GEN_INFO,
-	MODE_GEN_DATA
+	MODE_GEN_DATA,
+	MODE_GEN_BMP
 };
 
 typedef struct bitmap_s {		/* bitmap description */
@@ -16,7 +17,8 @@ typedef struct bitmap_s {		/* bitmap description */
 
 void usage(const char *prog)
 {
-	fprintf(stderr, "Usage: %s [--gen-info|--gen-data] file\n", prog);
+	fprintf(stderr, "Usage: %s [--gen-info|--gen-data|--gen-bmp] file\n",
+		prog);
 }
 
 /*
@@ -73,6 +75,7 @@ void gen_info(bitmap_t *b, uint16_t n_colors)
 int main (int argc, char *argv[])
 {
 	int	mode, i, x;
+	int	size;
 	FILE	*fp;
 	bitmap_t bmp;
 	bitmap_t *b = &bmp;
@@ -87,6 +90,8 @@ int main (int argc, char *argv[])
 		mode = MODE_GEN_INFO;
 	else if (!strcmp(argv[1], "--gen-data"))
 		mode = MODE_GEN_DATA;
+	else if (!strcmp(argv[1], "--gen-bmp"))
+		mode = MODE_GEN_BMP;
 	else {
 		usage(argv[0]);
 		exit(EXIT_FAILURE);
@@ -131,6 +136,7 @@ int main (int argc, char *argv[])
 	b->width = le_short(b->width);
 	b->height = le_short(b->height);
 	n_colors = le_short(n_colors);
+	size = b->width * b->height;
 
 	/* assume we are working with an 8-bit file */
 	if ((n_colors == 0) || (n_colors > 256 - DEFAULT_CMAP_SIZE)) {
@@ -152,10 +158,6 @@ int main (int argc, char *argv[])
 		"#ifndef __BMP_LOGO_DATA_H__\n"
 		"#define __BMP_LOGO_DATA_H__\n\n");
 
-	/* allocate memory */
-	if ((b->data = (uint8_t *)malloc(b->width * b->height)) == NULL)
-		error ("Error allocating memory for file", fp);
-
 	/* read and print the palette information */
 	printf("unsigned short bmp_logo_palette[] = {\n");
 
@@ -175,21 +177,39 @@ int main (int argc, char *argv[])
 	}
 
 	/* seek to offset indicated by file header */
-	fseek(fp, (long)data_offset, SEEK_SET);
+	if (mode == MODE_GEN_BMP) {
+		/* copy full bmp file */
+		fseek(fp, 0L, SEEK_END);
+		size = ftell(fp);
+		fseek(fp, 0L, SEEK_SET);
+	} else {
+		fseek(fp, (long)data_offset, SEEK_SET);
+	}
+
+	/* allocate memory */
+	b->data = (uint8_t *)malloc(size);
+	if (!b->data)
+		error("Error allocating memory for file", fp);
 
 	/* read the bitmap; leave room for default color map */
 	printf ("\n");
 	printf ("};\n");
 	printf ("\n");
 	printf("unsigned char bmp_logo_bitmap[] = {\n");
-	for (i=(b->height-1)*b->width; i>=0; i-=b->width) {
-		for (x = 0; x < b->width; x++) {
-			b->data[i + x] = (uint8_t) fgetc(fp)
+	if (mode == MODE_GEN_BMP) {
+		/* write full bmp */
+		for (i = 0; i < size; i++)
+			b->data[i] = (uint8_t)fgetc(fp);
+	} else {
+		for (i = (b->height - 1) * b->width; i >= 0; i -= b->width) {
+			for (x = 0; x < b->width; x++) {
+				b->data[i + x] = (uint8_t)fgetc(fp)
 						+ DEFAULT_CMAP_SIZE;
+			}
 		}
 	}
 
-	for (i=0; i<(b->height*b->width); ++i) {
+	for (i = 0; i < size; ++i) {
 		if ((i%8) == 0)
 			putchar ('\t');
 		printf ("0x%02X,%c",
-- 
2.21.0

             reply	other threads:[~2019-06-13  3:12 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-13  3:12 Heiko Schocher [this message]
2019-07-30  9:15 ` [U-Boot] [PATCH] bmp_logo: support CONFIG_DM_VIDEO Anatolij Gustschin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190613031239.76865-1-hs@denx.de \
    --to=hs@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.