|
@@ -1114,8 +1114,44 @@ int video_display_bitmap (ulong bmp_image, int x, int y)
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- /* We handle only 8bpp or 24 bpp bitmap */
|
|
|
|
|
|
+ /* We handle only 4, 8, or 24 bpp bitmaps */
|
|
switch (le16_to_cpu (bmp->header.bit_count)) {
|
|
switch (le16_to_cpu (bmp->header.bit_count)) {
|
|
|
|
+ case 4:
|
|
|
|
+ padded_line -= width / 2;
|
|
|
|
+ ycount = height;
|
|
|
|
+
|
|
|
|
+ switch (VIDEO_DATA_FORMAT) {
|
|
|
|
+ case GDF_32BIT_X888RGB:
|
|
|
|
+ while (ycount--) {
|
|
|
|
+ WATCHDOG_RESET ();
|
|
|
|
+ /*
|
|
|
|
+ * Don't assume that 'width' is an
|
|
|
|
+ * even number
|
|
|
|
+ */
|
|
|
|
+ for (xcount = 0; xcount < width; xcount++) {
|
|
|
|
+ uchar idx;
|
|
|
|
+
|
|
|
|
+ if (xcount & 1) {
|
|
|
|
+ idx = *bmap & 0xF;
|
|
|
|
+ bmap++;
|
|
|
|
+ } else
|
|
|
|
+ idx = *bmap >> 4;
|
|
|
|
+ cte = bmp->color_table[idx];
|
|
|
|
+ FILL_32BIT_X888RGB(cte.red, cte.green,
|
|
|
|
+ cte.blue);
|
|
|
|
+ }
|
|
|
|
+ bmap += padded_line;
|
|
|
|
+ fb -= (VIDEO_VISIBLE_COLS + width) *
|
|
|
|
+ VIDEO_PIXEL_SIZE;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ puts("4bpp bitmap unsupported with current "
|
|
|
|
+ "video mode\n");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+
|
|
case 8:
|
|
case 8:
|
|
padded_line -= width;
|
|
padded_line -= width;
|
|
if (VIDEO_DATA_FORMAT == GDF__8BIT_INDEX) {
|
|
if (VIDEO_DATA_FORMAT == GDF__8BIT_INDEX) {
|