lcd: Fix BMP decode bug that skips the wrong padded row

This change fixed 2 things:
 - Rename padded_line to padded_width since it is (width + padded_row) not line.
 - When finished a line, should skip the padded_row that is
   (padded_width - width) instead of (width - padded_width).

Reference: http://en.wikipedia.org/wiki/BMP_file_format
Signed-off-by: Tom Wai-Hong Tam <waihong@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
master
Tom Wai-Hong Tam 12 years ago committed by Anatolij Gustschin
parent 395166cffb
commit fecac46cf8
  1. 8
      common/lcd.c

@ -675,7 +675,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
uchar *fb;
bmp_image_t *bmp=(bmp_image_t *)bmp_image;
uchar *bmap;
ushort padded_line;
ushort padded_width;
unsigned long width, height, byte_width;
unsigned long pwidth = panel_info.vl_col;
unsigned colors, bpix, bmp_bpix;
@ -762,7 +762,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
}
#endif
padded_line = (width&0x3) ? ((width&~0x3)+4) : (width);
padded_width = (width&0x3) ? ((width&~0x3)+4) : (width);
#ifdef CONFIG_SPLASH_SCREEN_ALIGN
splash_align_axis(&x, pwidth, width);
@ -796,7 +796,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
fb += sizeof(uint16_t) / sizeof(*fb);
}
}
bmap += (width - padded_line);
bmap += (padded_width - width);
fb -= (byte_width + lcd_line_length);
}
break;
@ -808,7 +808,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
for (j = 0; j < width; j++)
fb_put_word(&fb, &bmap);
bmap += (padded_line - width) * 2;
bmap += (padded_width - width) * 2;
fb -= (width * 2 + lcd_line_length);
}
break;

Loading…
Cancel
Save