]> git.pld-linux.org Git - packages/fbgrab.git/blob - fbgrab-bigendian.patch
-- fix for big-endian machines
[packages/fbgrab.git] / fbgrab-bigendian.patch
1 --- fbgrab-1.0/fbgrab.c 2002-04-15 22:22:54.000000000 +0200
2 +++ fbgrab-1.0/fbgrab.c.new     2006-07-14 02:46:49.000000000 +0200
3 @@ -163,15 +163,17 @@
4  
5      for (i=0; i < (unsigned int) height*width*2; i+=2)
6      {
7 -       /* BLUE  = 0 */
8 -       outbuffer[(i<<1)+0] = (inbuffer[i] & 0x1f) << 3;
9 -       /* GREEN = 1 */
10 -        outbuffer[(i<<1)+1] = (((inbuffer[i+1] & 0x7) << 3) | 
11 -                            (inbuffer[i] & 0xE0) >> 5) << 2;   
12 -        /* RED   = 2 */
13 -       outbuffer[(i<<1)+2] = (inbuffer[i+1] & 0xF8);
14 -       /* ALPHA = 3 */
15 -       outbuffer[(i<<1)+3] = '\0'; 
16 +       int16_t v =
17 +#ifdef __BIG_ENDIAN__
18 +               (inbuffer[i] << 8) + inbuffer[i+1];
19 +#else
20 +               (inbuffer[i+1] << 8) + inbuffer[i];
21 +#endif
22 +
23 +       outbuffer[(i<<1)+0] = (v << 3) & 0xf8; /* B */
24 +       outbuffer[(i<<1)+1] = (v >> 3) & 0xfc; /* G */
25 +       outbuffer[(i<<1)+2] = (v >> 8) & 0xf8; /* R */
26 +       outbuffer[(i<<1)+3] = 0; /* A */
27      }
28  }
29  
30 @@ -194,6 +196,22 @@
31      }
32  }
33  
34 +static void convertARGBtoBGRA(int width, int height, 
35 +                          unsigned char *inbuffer, 
36 +                          unsigned char *outbuffer)
37 +{
38 +    unsigned int i;
39 +
40 +    for (i=0; i < (unsigned int) height*width*4; i+=4)
41 +    {
42 +        outbuffer[i+0] = inbuffer[i+3];
43 +        outbuffer[i+1] = inbuffer[i+2];
44 +        outbuffer[i+2] = inbuffer[i+1];
45 +        outbuffer[i+3] = inbuffer[i+0];
46 +    }
47 +}
48 +
49 +
50  static void write_PNG(unsigned char *outbuffer, char *filename, 
51                                 int width, int height, int interlace)
52  {
53 @@ -283,8 +301,13 @@
54         write_PNG(outbuffer, filename, width, height, interlace);
55         break;
56      case 32:
57 +#ifdef __BIG_ENDIAN__
58 +       convertARGBtoBGRA(width, height, inbuffer, outbuffer);
59 +       write_PNG(outbuffer, filename, width, height, interlace);
60 +#else
61         /* No conversion needed */
62         write_PNG(inbuffer, filename, width, height, interlace);
63 +#endif
64         break;
65      default:
66         fprintf(stderr, "%d bits per pixel are not supported! ", bits);
This page took 0.081798 seconds and 3 git commands to generate.