Center bootsplash on bigger framebuffers
In the JPEG decoder, use `bytes_per_line` instead of `width` for
address calculations, to allow for bigger framebuffers. When
calling jpeg_decode(), add an offset to the framebuffer address
so the picture gets centered.
Change-Id: I0174bdccfaad425e708a5fa50bcb28a1b98a23f7
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/76424
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin L Roth <gaumless@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@mailbox.org>
Reviewed-by: Subrata Banik <subratabanik@google.com>
diff --git a/src/lib/jpeg.c b/src/lib/jpeg.c
index b3d4c89..ed4377f 100644
--- a/src/lib/jpeg.c
+++ b/src/lib/jpeg.c
@@ -267,7 +267,8 @@
}
int jpeg_decode(unsigned char *buf, unsigned char *pic,
- int width, int height, int depth, struct jpeg_decdata *decdata)
+ int width, int height, int bytes_per_line, int depth,
+ struct jpeg_decdata *decdata)
{
int i, j, m, tac, tdc;
int mcusx, mcusy, mx, my;
@@ -382,19 +383,19 @@
switch (depth) {
case 32:
- col221111_32(decdata->out, pic
- + (my * 16 * mcusx + mx) * 16 * 4,
- mcusx * 16 * 4);
+ col221111_32(decdata->out,
+ pic + my * 16 * bytes_per_line + mx * 16 * 4,
+ bytes_per_line);
break;
case 24:
- col221111(decdata->out, pic
- + (my * 16 * mcusx + mx) * 16 * 3,
- mcusx * 16 * 3);
+ col221111(decdata->out,
+ pic + my * 16 * bytes_per_line + mx * 16 * 3,
+ bytes_per_line);
break;
case 16:
- col221111_16(decdata->out, pic
- + (my * 16 * mcusx + mx) * (16 * 2),
- mcusx * (16 * 2));
+ col221111_16(decdata->out,
+ pic + my * 16 * bytes_per_line + mx * 16 * 2,
+ bytes_per_line);
break;
default:
return ERR_DEPTH_MISMATCH;