12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- [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:
|