Message ID | 1591782743-22846-3-git-send-email-ye.li@nxp.com |
---|---|
State | New |
Headers | show |
Series | video: bmp: Support 8bits BMP to 24/32 bits display | expand |
On Wed, Jun 10, 2020 at 3:23 PM Ye Li <ye.li at nxp.com> wrote: > > Update video bmp codes to support 8 bits BMP to 32 bits conversion > so that we can display 8 bits logo on 24 bits or 32 bits display > > Signed-off-by: Ye Li <ye.li at nxp.com> > --- Reviewed-by: Jagan Teki <jagan at amarulasolutions.com> Tested-by: Jagan Teki <jagan at amarulasolutions.com> # bpi-m1+, bpi-m64
Hi Anatolij, On Wed, Jun 10, 2020 at 6:53 AM Ye Li <ye.li at nxp.com> wrote: > > Update video bmp codes to support 8 bits BMP to 32 bits conversion > so that we can display 8 bits logo on 24 bits or 32 bits display > > Signed-off-by: Ye Li <ye.li at nxp.com> I haven't had a chance to test this yet, but it seems to solve an outstanding splash screen issue on mx6ul evk/mx7d sabresd boards. Maybe we should get this one and the other two from Ye Li to 2020.07? Thanks
Hi Fabio, On Thu, 18 Jun 2020 18:04:40 -0300 Fabio Estevam festevam at gmail.com wrote: > Hi Anatolij, > > On Wed, Jun 10, 2020 at 6:53 AM Ye Li <ye.li at nxp.com> wrote: > > > > Update video bmp codes to support 8 bits BMP to 32 bits conversion > > so that we can display 8 bits logo on 24 bits or 32 bits display > > > > Signed-off-by: Ye Li <ye.li at nxp.com> > > I haven't had a chance to test this yet, but it seems to solve an > outstanding splash screen issue on mx6ul evk/mx7d sabresd boards. > > Maybe we should get this one and the other two from Ye Li to 2020.07? yes, we need a fix for the release, I will look later this week which patch should be merged (we have another older patch addressing this issue). -- Anatolij
diff --git a/drivers/video/video_bmp.c b/drivers/video/video_bmp.c index eb96365..283e699 100644 --- a/drivers/video/video_bmp.c +++ b/drivers/video/video_bmp.c @@ -233,6 +233,8 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y, */ if (bpix != bmp_bpix && !(bmp_bpix == 8 && bpix == 16) && + !(bmp_bpix == 8 && bpix == 24) && + !(bmp_bpix == 8 && bpix == 32) && !(bmp_bpix == 24 && bpix == 16) && !(bmp_bpix == 24 && bpix == 32)) { printf("Error: %d bit/pixel mode, but BMP has %d bit/pixel\n", @@ -265,6 +267,7 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y, switch (bmp_bpix) { case 1: case 8: { + struct bmp_color_table_entry *cte; cmap_base = priv->cmap; #ifdef CONFIG_VIDEO_BMP_RLE8 u32 compression = get_unaligned_le32(&bmp->header.compression); @@ -281,20 +284,39 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y, } #endif - if (bpix != 16) + if (bpix == 8) byte_width = width; - else + else if (bpix == 16) byte_width = width * 2; + else if (bpix == 24) + byte_width = width * 3; + else /* 32 */ + byte_width = width * 4; for (i = 0; i < height; ++i) { WATCHDOG_RESET(); for (j = 0; j < width; j++) { - if (bpix != 16) { + if (bpix == 8) { fb_put_byte(&fb, &bmap); - } else { + } else if (bpix == 16) { *(uint16_t *)fb = cmap_base[*bmap]; bmap++; fb += sizeof(uint16_t) / sizeof(*fb); + } else if (bpix == 24) { + /* Only support big endian */ + cte = &palette[*bmap]; + bmap++; + *(fb++) = cte->red; + *(fb++) = cte->green; + *(fb++) = cte->blue; + } else if (bpix == 32) { + /* Only support big endian */ + cte = &palette[*bmap]; + bmap++; + *(fb++) = cte->blue; + *(fb++) = cte->green; + *(fb++) = cte->red; + *(fb++) = 0; } } bmap += (padded_width - width);
Update video bmp codes to support 8 bits BMP to 32 bits conversion so that we can display 8 bits logo on 24 bits or 32 bits display Signed-off-by: Ye Li <ye.li at nxp.com> --- drivers/video/video_bmp.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-)