aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/fbgrab/fbgrab/fbgrab_1bpp.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/fbgrab/fbgrab/fbgrab_1bpp.patch')
-rw-r--r--recipes/fbgrab/fbgrab/fbgrab_1bpp.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/recipes/fbgrab/fbgrab/fbgrab_1bpp.patch b/recipes/fbgrab/fbgrab/fbgrab_1bpp.patch
new file mode 100644
index 0000000000..8c6dff27b3
--- /dev/null
+++ b/recipes/fbgrab/fbgrab/fbgrab_1bpp.patch
@@ -0,0 +1,52 @@
+--- fbgrab-1.0.orig/fbgrab.c 2002-04-15 22:22:54.000000000 +0200
++++ fbgrab-1.0/fbgrab.c 2008-12-15 20:18:55.000000000 +0100
+@@ -135,6 +135,26 @@
+ fatal_error("Error: Not enough memory or data\n");
+ }
+
++static void convert1to32(int width, int height,
++ unsigned char *inbuffer,
++ unsigned char *outbuffer)
++{
++ unsigned int i, j;
++ unsigned char *ptr = outbuffer;
++
++ for (i=0; i < (unsigned int) height*width >> 3; i++)
++ {
++ for(j=0; j < 8; j++)
++ {
++ /* BLUE = 0, GREEN = 1, RED = 2 */
++ *ptr = *(ptr+1) = *(ptr+2) = ((inbuffer[i] >> (7-j)) & 1) ? 255 : 0;
++ /* ALPHA = 3 */
++ *(ptr+3) = '\0';
++ ptr += 4;
++ }
++ }
++}
++
+ static void convert1555to32(int width, int height,
+ unsigned char *inbuffer,
+ unsigned char *outbuffer)
+@@ -270,6 +290,10 @@
+
+ switch(bits)
+ {
++ case 1:
++ convert1to32(width, height, inbuffer, outbuffer);
++ write_PNG(outbuffer, filename, width, height, interlace);
++ break;
+ case 15:
+ convert1555to32(width, height, inbuffer, outbuffer);
+ write_PNG(outbuffer, filename, width, height, interlace);
+@@ -405,7 +429,10 @@
+ strncpy(infile, device, MAX_LEN - 1);
+ }
+
+- buf_size = width * height * (((unsigned int) bitdepth + 7) >> 3);
++ if (bitdepth == 1)
++ buf_size = (width * height) >> 3;
++ else
++ buf_size = width * height * (((unsigned int) bitdepth + 7) >> 3);
+
+ buf_p = malloc(buf_size);
+