0004-fix-bgr555.patch 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. [PATCH] fbv: support bgr555 format
  2. Signed-off-by: Josh.Wu <josh.wu@atmel.com>
  3. diff -Naur fbv-1.0b-ori/fb_display.c fbv-1.0b/fb_display.c
  4. --- fbv-1.0b-ori/fb_display.c 2010-04-02 09:38:15.000000000 +0800
  5. +++ fbv-1.0b/fb_display.c 2010-04-01 18:54:15.000000000 +0800
  6. @@ -297,6 +297,14 @@
  7. ((b >> 3) & 31) );
  8. }
  9. +inline static unsigned short make15color_bgr(unsigned char r, unsigned char g, unsigned char b)
  10. +{
  11. + return (
  12. + (((b >> 3) & 31) << 10) |
  13. + (((g >> 3) & 31) << 5) |
  14. + ((r >> 3) & 31) );
  15. +}
  16. +
  17. inline static unsigned short make16color(unsigned char r, unsigned char g, unsigned char b)
  18. {
  19. return (
  20. @@ -313,6 +321,14 @@
  21. u_int16_t *s_fbbuff;
  22. u_int32_t *i_fbbuff;
  23. + int is_bgr555 = 0;
  24. + struct fb_var_screeninfo var;
  25. + getVarScreenInfo(fh, &var);
  26. + if(var.red.offset == 0 &&
  27. + var.green.offset == 5 &&
  28. + var.blue.offset == 10)
  29. + is_bgr555 = 1;
  30. +
  31. switch(bpp)
  32. {
  33. case 8:
  34. @@ -325,15 +341,23 @@
  35. case 15:
  36. *cpp = 2;
  37. s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short));
  38. - for(i = 0; i < count ; i++)
  39. - s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
  40. + if(is_bgr555)
  41. + for(i = 0; i < count ; i++)
  42. + s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
  43. + else
  44. + for(i = 0; i < count ; i++)
  45. + s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
  46. fbbuff = (void *) s_fbbuff;
  47. break;
  48. case 16:
  49. *cpp = 2;
  50. s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short));
  51. - for(i = 0; i < count ; i++)
  52. - s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
  53. + if(is_bgr555)
  54. + for(i = 0; i < count ; i++)
  55. + s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
  56. + else
  57. + for(i = 0; i < count ; i++)
  58. + s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
  59. fbbuff = (void *) s_fbbuff;
  60. break;
  61. case 24: