On Fri, Jan 25, 2019 at 06:19:11PM -0000, Joseph Pacheco-Corwin wrote:
Specifically added support for 16 and 32bpp files, in addition to 24bpp. The function bmp_show() in bmp.c has had the hardcoded check for 24bpp replaced with a general bpp check that uses a % to check for remainder, and returns 1 if the remainder is >0. The previous method for adjusting the BMP data (raw_data_format_adjust_24bpp) relied on a preset 3*bytes_per_line_src, this has been changed and the multiplication is now performed in the function's arguments. This change still allows someone else to reuse the same function for 1/2/4bpp support if necessary. The file util.h has been modified to reflect this decision.
The changes to raw_data_format_adjust() is based on an abandoned patch by Gert Menke (submitted March 14, 2017), credit to them for that change and the addition of *bpp to bmp_get_info().
Any feedback? I would appreciate it.
Thanks. In general it looks fine, but I do have one minor comment below.
[...]
--- a/src/bootsplash.c +++ b/src/bootsplash.c @@ -172,10 +172,13 @@ enable_bootsplash(void) dprintf(1, "bmp_decode failed with return code %d...\n", ret); goto done; }
bmp_get_size(bmp, &width, &height);
bpp_require = 24;
}bmp_get_info(bmp, &width, &height, &bpp_require);
- /* jpeg would use 16 or 24 bpp video mode, BMP use 24bpp mode only */
/* jpeg would use 16 or 24 bpp video mode, BMP uses 8/16/24/32 bpp mode.
* 8bpp for BMP has corrupted colors, and lower than 8bpp fails to display
* or results in a loop.
*/
// Try to find a graphics mode with the corresponding dimensions. int videomode = find_videomode(vesa_info, mode_info, width, height,
@@ -192,7 +195,13 @@ enable_bootsplash(void) dprintf(3, "bytes per scanline: %d\n", mode_info->bytes_per_scanline); dprintf(3, "bits per pixel: %d\n", depth);
- // Allocate space for image and decompress it.
- // Allocate space for image and decompress it.
- /*
* Has a weird issue with low bpp image files, imagesize is not
* consistent. Example: 8bpp images are correct, being essentially
* multiplied/divided by 1, but if you use 4bpp images, width is divided by
* 8, when it should be divided by 2.
*/
I would ask that we avoid changing the comments to document what the code does not do. As I find comments discussing what is not implemented to be confusing.
Cheers, -Kevin