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;