video: Add a function to get the dimensions of a BMP image
authorSimon Glass <sjg@chromium.org>
Thu, 6 Oct 2022 14:36:17 +0000 (08:36 -0600)
committerAnatolij Gustschin <agust@denx.de>
Sun, 30 Oct 2022 19:01:40 +0000 (20:01 +0100)
This is useful for some other users, so break this out into a function.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/video/video_bmp.c
include/video.h

index 082895a..6188a13 100644 (file)
@@ -229,6 +229,16 @@ static void video_splash_align_axis(int *axis, unsigned long panel_size,
        *axis = max(0, (int)axis_alignment);
 }
 
+void video_bmp_get_info(void *bmp_image, ulong *widthp, ulong *heightp,
+                       uint *bpixp)
+{
+       struct bmp_image *bmp = bmp_image;
+
+       *widthp = get_unaligned_le32(&bmp->header.width);
+       *heightp = get_unaligned_le32(&bmp->header.height);
+       *bpixp = get_unaligned_le16(&bmp->header.bit_count);
+}
+
 int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
                      bool align)
 {
@@ -253,9 +263,7 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
                return -EINVAL;
        }
 
-       width = get_unaligned_le32(&bmp->header.width);
-       height = get_unaligned_le32(&bmp->header.height);
-       bmp_bpix = get_unaligned_le16(&bmp->header.bit_count);
+       video_bmp_get_info(bmp, &width, &height, &bmp_bpix);
        hdr_size = get_unaligned_le16(&bmp->header.size);
        debug("hdr_size=%d, bmp_bpix=%d\n", hdr_size, bmp_bpix);
        palette = (void *)bmp + 14 + hdr_size;
@@ -283,7 +291,7 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
            !(bmp_bpix == 24 && bpix == 16) &&
            !(bmp_bpix == 24 && bpix == 32)) {
                printf("Error: %d bit/pixel mode, but BMP has %d bit/pixel\n",
-                      bpix, get_unaligned_le16(&bmp->header.bit_count));
+                      bpix, colours);
                return -EPERM;
        }
 
index 2e68dd7..32afb26 100644 (file)
@@ -224,6 +224,17 @@ int video_sync(struct udevice *vid, bool force);
 void video_sync_all(void);
 
 /**
+ * video_bmp_get_info() - Get information about a bitmap image
+ *
+ * @bmp_image: Pointer to BMP image to check
+ * @widthp: Returns width in pixels
+ * @heightp: Returns height in pixels
+ * @bpixp: Returns log2 of bits per pixel
+ */
+void video_bmp_get_info(void *bmp_image, ulong *widthp, ulong *heightp,
+                       uint *bpixp);
+
+/**
  * video_bmp_display() - Display a BMP file
  *
  * @dev:       Device to display the bitmap on