video: theadorable: Use RGB565 for BMP blitting
At present this uses RGB555 format for blitting to a display. Sandbox uses 565 and that seems to be more normal for BMP as well. Update the code accordingly and add a test. Note that this likely breaks the theadorable board so we may need to discuss supporting both formats. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
c1cad06f69
commit
4ea1548210
@ -286,6 +286,7 @@ CONFIG_SANDBOX_OSD=y
|
|||||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||||
CONFIG_VIDEO_BMP_RLE8=y
|
CONFIG_VIDEO_BMP_RLE8=y
|
||||||
CONFIG_BMP_16BPP=y
|
CONFIG_BMP_16BPP=y
|
||||||
|
CONFIG_BMP_24BPP=y
|
||||||
CONFIG_W1=y
|
CONFIG_W1=y
|
||||||
CONFIG_W1_GPIO=y
|
CONFIG_W1_GPIO=y
|
||||||
CONFIG_W1_EEPROM=y
|
CONFIG_W1_EEPROM=y
|
||||||
|
@ -199,6 +199,7 @@ CONFIG_OSD=y
|
|||||||
CONFIG_SANDBOX_OSD=y
|
CONFIG_SANDBOX_OSD=y
|
||||||
CONFIG_VIDEO_BMP_RLE8=y
|
CONFIG_VIDEO_BMP_RLE8=y
|
||||||
CONFIG_BMP_16BPP=y
|
CONFIG_BMP_16BPP=y
|
||||||
|
CONFIG_BMP_24BPP=y
|
||||||
CONFIG_CMD_DHRYSTONE=y
|
CONFIG_CMD_DHRYSTONE=y
|
||||||
CONFIG_RSA_VERIFY_WITH_PKEY=y
|
CONFIG_RSA_VERIFY_WITH_PKEY=y
|
||||||
CONFIG_TPM=y
|
CONFIG_TPM=y
|
||||||
|
@ -338,9 +338,9 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
|
|||||||
for (i = 0; i < height; ++i) {
|
for (i = 0; i < height; ++i) {
|
||||||
for (j = 0; j < width; j++) {
|
for (j = 0; j < width; j++) {
|
||||||
if (bpix == 16) {
|
if (bpix == 16) {
|
||||||
/* 16bit 555RGB format */
|
/* 16bit 565RGB format */
|
||||||
*(u16 *)fb = ((bmap[2] >> 3) << 10) |
|
*(u16 *)fb = ((bmap[2] >> 3) << 11) |
|
||||||
((bmap[1] >> 3) << 5) |
|
((bmap[1] >> 2) << 5) |
|
||||||
(bmap[0] >> 3);
|
(bmap[0] >> 3);
|
||||||
bmap += 3;
|
bmap += 3;
|
||||||
fb += 2;
|
fb += 2;
|
||||||
|
@ -363,6 +363,52 @@ static int dm_test_video_bmp16(struct unit_test_state *uts)
|
|||||||
}
|
}
|
||||||
DM_TEST(dm_test_video_bmp16, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
|
DM_TEST(dm_test_video_bmp16, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
|
||||||
|
|
||||||
|
/* Test drawing a 24bpp bitmap file on a 16bpp display */
|
||||||
|
static int dm_test_video_bmp24(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
ulong src, src_len = ~0UL;
|
||||||
|
uint dst_len = ~0U;
|
||||||
|
struct udevice *dev;
|
||||||
|
ulong dst = 0x10000;
|
||||||
|
|
||||||
|
ut_assertok(uclass_find_first_device(UCLASS_VIDEO, &dev));
|
||||||
|
ut_assertnonnull(dev);
|
||||||
|
ut_assertok(sandbox_sdl_set_bpp(dev, VIDEO_BPP16));
|
||||||
|
|
||||||
|
ut_assertok(read_file(uts, "tools/logos/denx-24bpp.bmp.gz", &src));
|
||||||
|
ut_assertok(gunzip(map_sysmem(dst, 0), dst_len, map_sysmem(src, 0),
|
||||||
|
&src_len));
|
||||||
|
|
||||||
|
ut_assertok(video_bmp_display(dev, dst, 0, 0, false));
|
||||||
|
ut_asserteq(3656, compress_frame_buffer(uts, dev));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
DM_TEST(dm_test_video_bmp24, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
|
||||||
|
|
||||||
|
/* Test drawing a 24bpp bitmap file on a 32bpp display */
|
||||||
|
static int dm_test_video_bmp24_32(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
ulong src, src_len = ~0UL;
|
||||||
|
uint dst_len = ~0U;
|
||||||
|
struct udevice *dev;
|
||||||
|
ulong dst = 0x10000;
|
||||||
|
|
||||||
|
ut_assertok(uclass_find_first_device(UCLASS_VIDEO, &dev));
|
||||||
|
ut_assertnonnull(dev);
|
||||||
|
ut_assertok(sandbox_sdl_set_bpp(dev, VIDEO_BPP32));
|
||||||
|
|
||||||
|
ut_assertok(read_file(uts, "tools/logos/denx-24bpp.bmp.gz", &src));
|
||||||
|
ut_assertok(gunzip(map_sysmem(dst, 0), dst_len, map_sysmem(src, 0),
|
||||||
|
&src_len));
|
||||||
|
|
||||||
|
ut_assertok(video_bmp_display(dev, dst, 0, 0, false));
|
||||||
|
ut_asserteq(6827, compress_frame_buffer(uts, dev));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
DM_TEST(dm_test_video_bmp24_32, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
|
||||||
|
|
||||||
/* Test drawing a bitmap file on a 32bpp display */
|
/* Test drawing a bitmap file on a 32bpp display */
|
||||||
static int dm_test_video_bmp32(struct unit_test_state *uts)
|
static int dm_test_video_bmp32(struct unit_test_state *uts)
|
||||||
{
|
{
|
||||||
|
BIN
tools/logos/denx-24bpp.bmp.gz
Normal file
BIN
tools/logos/denx-24bpp.bmp.gz
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user