Hi,
I am trying to make SeaBIOS on Thinkpad T420 running coreboot display bootsplash but I am failing to prepare the file.
I tried to export file using GIMP and this info: https://puri.sm/wp-content/uploads/2017/02/coreboot-splash-gimp-export-optio...
Relevant part of the coreboot log is: 1508[INFO ] Setting up bootsplash in 1366x768@32 1509[INFO ] CBFS: Found 'bootsplash.jpg' @0x46480 size 0x48e5 in mcache @0x7ffdd1c8 1510[DEBUG] Bootsplash image resolution: 1366x768 1511[ERROR] Bootsplash could not be decoded. jpeg_decode returned 4.
I also tried to add bootsplash.bmp but then it says it didnt found bootsplash.jpg.
Any hints?
AreYouLoco?
Hi,
On 31.03.2022 15:25, AreYouLoco? via SeaBIOS wrote:
Hi,
I am trying to make SeaBIOS on Thinkpad T420 running coreboot display bootsplash but I am failing to prepare the file.
I tried to export file using GIMP and this info: https://puri.sm/wp-content/uploads/2017/02/coreboot-splash-gimp-export-optio...
Relevant part of the coreboot log is: 1508[INFO ] Setting up bootsplash in 1366x768@32 1509[INFO ] CBFS: Found 'bootsplash.jpg' @0x46480 size 0x48e5 in mcache @0x7ffdd1c8 1510[DEBUG] Bootsplash image resolution: 1366x768 1511[ERROR] Bootsplash could not be decoded. jpeg_decode returned 4.
I also tried to add bootsplash.bmp but then it says it didnt found bootsplash.jpg.
Any hints?
This is actually a little bit tricky. JPEG decoder in SeaBIOS and coreboot allows only images which size granularity is 16 bytes. Sooo: 768 pixels / 16 = 48 OK. But 1366 pixels / 16 = 85.375 NOT OK.
You are basically hitting ERR_WIDTH_MISMATCH: https://github.com/coreboot/coreboot/blob/master/src/lib/jpeg.c#L292
If you have a nice BMP file, it doesn't have the width/height granularity constraints unlike JPEG. coreboot will not decode bootsplash.bmp, but SeaBIOS gladly consumes BMP files. Additionally I recommend compressing it with LZMA (BMPs are heavy). So on your coreboot image I would execute:
cbfstool coreboot.rom add -f path/to/bootsplash.bmp -t raw -n bootsplash.bmp.lzma -c lzma -r COREBOOT
The command will add the path/to/bootsplash.bmp file to CBFS under the name bootsplash.bmp.lzma with LZMA compression enabled. SeaBIOS is able to detect .lzma extension in CBFS files and automatically decompresses the files if needed.
Additionally compile SeaBIOS with some debug level, SeaBIOS should be able to put it into cbmem console: https://github.com/coreboot/seabios/blob/master/src/output.c#L46 in case you would need to inspect further issues (BMP may have problem with incorrect bpp format - bits per pixel, you need to set a correct one in GIMP: https://github.com/coreboot/seabios/blob/master/src/bootsplash.c#L178).
Good luck.
Hey,
I've been there and ported lodepng to SeaBIOS because I wanted full resolution graphics:
https://github.com/orangecms/seabios/tree/png
Might need some rebase and adjustments by now. I tried to upstream this, but mailing list and git turned out a bit tough for me; there was also a question on the license. You'd find that here in the archives.
Cheers! :-)
On Thu, 31 Mar 2022, 18:19 Michał Żygowski, michal.zygowski@3mdeb.com wrote:
Hi,
On 31.03.2022 15:25, AreYouLoco? via SeaBIOS wrote:
Hi,
I am trying to make SeaBIOS on Thinkpad T420 running coreboot display
bootsplash but I am failing to prepare the file.
I tried to export file using GIMP and this info:
https://puri.sm/wp-content/uploads/2017/02/coreboot-splash-gimp-export-optio...
Relevant part of the coreboot log is: 1508[INFO ] Setting up bootsplash in 1366x768@32 1509[INFO ] CBFS: Found 'bootsplash.jpg' @0x46480 size 0x48e5 in mcache
@0x7ffdd1c8
1510[DEBUG] Bootsplash image resolution: 1366x768 1511[ERROR] Bootsplash could not be decoded. jpeg_decode returned 4.
I also tried to add bootsplash.bmp but then it says it didnt found
bootsplash.jpg.
Any hints?
This is actually a little bit tricky. JPEG decoder in SeaBIOS and coreboot allows only images which size granularity is 16 bytes. Sooo: 768 pixels / 16 = 48 OK. But 1366 pixels / 16 = 85.375 NOT OK.
You are basically hitting ERR_WIDTH_MISMATCH: https://github.com/coreboot/coreboot/blob/master/src/lib/jpeg.c#L292
If you have a nice BMP file, it doesn't have the width/height granularity constraints unlike JPEG. coreboot will not decode bootsplash.bmp, but SeaBIOS gladly consumes BMP files. Additionally I recommend compressing it with LZMA (BMPs are heavy). So on your coreboot image I would execute:
cbfstool coreboot.rom add -f path/to/bootsplash.bmp -t raw -n bootsplash.bmp.lzma -c lzma -r COREBOOT
The command will add the path/to/bootsplash.bmp file to CBFS under the name bootsplash.bmp.lzma with LZMA compression enabled. SeaBIOS is able to detect .lzma extension in CBFS files and automatically decompresses the files if needed.
Additionally compile SeaBIOS with some debug level, SeaBIOS should be able to put it into cbmem console: https://github.com/coreboot/seabios/blob/master/src/output.c#L46 in case you would need to inspect further issues (BMP may have problem with incorrect bpp format - bits per pixel, you need to set a correct one in GIMP: https://github.com/coreboot/seabios/blob/master/src/bootsplash.c#L178).
Good luck.
Michał Żygowski Firmware Engineer GPG: 6B5BA214D21FCEB2 https://3mdeb.com | @3mdeb_com _______________________________________________ SeaBIOS mailing list -- seabios@seabios.org To unsubscribe send an email to seabios-leave@seabios.org