| [PATCH] fbv: support bgr555 format |
| |
| Signed-off-by: Josh.Wu <josh.wu@atmel.com> |
| diff -Naur fbv-1.0b-ori/fb_display.c fbv-1.0b/fb_display.c |
| --- fbv-1.0b-ori/fb_display.c 2010-04-02 09:38:15.000000000 +0800 |
| +++ fbv-1.0b/fb_display.c 2010-04-01 18:54:15.000000000 +0800 |
| @@ -297,6 +297,14 @@ |
| ((b >> 3) & 31) ); |
| } |
| |
| +inline static unsigned short make15color_bgr(unsigned char r, unsigned char g, unsigned char b) |
| +{ |
| + return ( |
| + (((b >> 3) & 31) << 10) | |
| + (((g >> 3) & 31) << 5) | |
| + ((r >> 3) & 31) ); |
| +} |
| + |
| inline static unsigned short make16color(unsigned char r, unsigned char g, unsigned char b) |
| { |
| return ( |
| @@ -313,6 +321,14 @@ |
| u_int16_t *s_fbbuff; |
| u_int32_t *i_fbbuff; |
| |
| + int is_bgr555 = 0; |
| + struct fb_var_screeninfo var; |
| + getVarScreenInfo(fh, &var); |
| + if(var.red.offset == 0 && |
| + var.green.offset == 5 && |
| + var.blue.offset == 10) |
| + is_bgr555 = 1; |
| + |
| switch(bpp) |
| { |
| case 8: |
| @@ -325,15 +341,23 @@ |
| case 15: |
| *cpp = 2; |
| s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short)); |
| - for(i = 0; i < count ; i++) |
| - s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); |
| + if(is_bgr555) |
| + for(i = 0; i < count ; i++) |
| + s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); |
| + else |
| + for(i = 0; i < count ; i++) |
| + s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); |
| fbbuff = (void *) s_fbbuff; |
| break; |
| case 16: |
| *cpp = 2; |
| s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short)); |
| - for(i = 0; i < count ; i++) |
| - s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); |
| + if(is_bgr555) |
| + for(i = 0; i < count ; i++) |
| + s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); |
| + else |
| + for(i = 0; i < count ; i++) |
| + s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); |
| fbbuff = (void *) s_fbbuff; |
| break; |
| case 24: |