diff options
Diffstat (limited to 'package')
| -rw-r--r-- | package/fbv/fbv-1.0b-fix-bgr555.patch | 64 | 
1 files changed, 64 insertions, 0 deletions
| diff --git a/package/fbv/fbv-1.0b-fix-bgr555.patch b/package/fbv/fbv-1.0b-fix-bgr555.patch new file mode 100644 index 000000000..8f185f0a3 --- /dev/null +++ b/package/fbv/fbv-1.0b-fix-bgr555.patch @@ -0,0 +1,64 @@ +[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: | 
