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>
This commit is contained in:
Tom Wai-Hong Tam 2012-09-28 15:11:14 +00:00 committed by Anatolij Gustschin
parent 395166cffb
commit fecac46cf8

View File

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