@ -578,6 +578,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
unsigned long width , height , byte_width ;
unsigned long pwidth = panel_info . vl_col ;
unsigned colors , bpix , bmp_bpix ;
int hdr_size ;
struct bmp_color_table_entry * palette = bmp - > color_table ;
if ( ! bmp | | ! ( bmp - > header . signature [ 0 ] = = ' B ' & &
bmp - > header . signature [ 1 ] = = ' M ' ) ) {
@ -589,6 +591,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
width = get_unaligned_le32 ( & bmp - > header . width ) ;
height = get_unaligned_le32 ( & bmp - > header . height ) ;
bmp_bpix = get_unaligned_le16 ( & bmp - > header . bit_count ) ;
hdr_size = get_unaligned_le16 ( & bmp - > header . size ) ;
debug ( " hdr_size=%d, bmp_bpix=%d \n " , hdr_size , bmp_bpix ) ;
colors = 1 < < bmp_bpix ;
@ -613,8 +617,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
return 1 ;
}
debug ( " Display-bmp: %d x %d with %d colors \n " ,
( int ) width , ( int ) height , ( int ) colors ) ;
debug ( " Display-bmp: %d x %d with %d colors, display %d \n " ,
( int ) width , ( int ) height , ( int ) colors , 1 < < bpix ) ;
if ( bmp_bpix = = 8 )
lcd_set_cmap ( bmp , colors ) ;
@ -641,6 +645,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
cmap_base = configuration_get_cmap ( ) ;
# ifdef CONFIG_LCD_BMP_RLE8
u32 compression = get_unaligned_le32 ( & bmp - > header . compression ) ;
debug ( " compressed %d %d \n " , compression , BMP_BI_RLE8 ) ;
if ( compression = = BMP_BI_RLE8 ) {
if ( bpix ! = 16 ) {
/* TODO implement render code for bpix != 16 */
@ -663,7 +668,19 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
if ( bpix ! = 16 ) {
fb_put_byte ( & fb , & bmap ) ;
} else {
* ( uint16_t * ) fb = cmap_base [ * ( bmap + + ) ] ;
struct bmp_color_table_entry * entry ;
uint val ;
if ( cmap_base ) {
val = cmap_base [ * bmap ] ;
} else {
entry = & palette [ * bmap ] ;
val = entry - > blue > > 3 |
entry - > green > > 2 < < 5 |
entry - > red > > 3 < < 11 ;
}
* ( uint16_t * ) fb = val ;
bmap + + ;
fb + = sizeof ( uint16_t ) / sizeof ( * fb ) ;
}
}