diff options
| author | Jens Arnold <amiconn@rockbox.org> | 2008-03-14 10:13:58 +0000 |
|---|---|---|
| committer | Jens Arnold <amiconn@rockbox.org> | 2008-03-14 10:13:58 +0000 |
| commit | fc2a757e332b97063bf5d7b618c3b3275bdc2edb (patch) | |
| tree | 8ef0ea6494e06798bec86fba7cdcdeb361be5470 | |
| parent | 1b53f44892289b7f58cffedaafbffdffa195380f (diff) | |
| download | rockbox-fc2a757e332b97063bf5d7b618c3b3275bdc2edb.zip rockbox-fc2a757e332b97063bf5d7b618c3b3275bdc2edb.tar.gz rockbox-fc2a757e332b97063bf5d7b618c3b3275bdc2edb.tar.bz2 rockbox-fc2a757e332b97063bf5d7b618c3b3275bdc2edb.tar.xz | |
Make screendump work on the M3 (sim).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16664 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/misc.c | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/apps/misc.c b/apps/misc.c index 1f8aa99..9b8c9a7 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -424,8 +424,10 @@ void screen_dump(void) #elif LCD_DEPTH == 2 #if LCD_PIXELFORMAT == HORIZONTAL_PACKING static unsigned char line_block[BMP_LINESIZE]; -#else +#elif LCD_PIXELFORMAT == VERTICAL_PACKING static unsigned char line_block[4][BMP_LINESIZE]; +#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED + static unsigned char line_block[8][BMP_LINESIZE]; #endif #elif LCD_DEPTH == 16 static unsigned short line_block[BMP_LINESIZE/2]; @@ -501,7 +503,7 @@ void screen_dump(void) write(fh, line_block, sizeof(line_block)); } -#else /* VERTICAL_PACKING */ +#elif LCD_PIXELFORMAT == VERTICAL_PACKING for (by = LCD_FBHEIGHT - 1; by >= 0; by--) { unsigned char *src = &lcd_framebuffer[by][0]; @@ -511,13 +513,13 @@ void screen_dump(void) for (bx = LCD_WIDTH/2; bx > 0; bx--) { unsigned char *dst_blk = dst++; - unsigned src_byte0 = *src++; + unsigned src_byte0 = *src++ << 4; unsigned src_byte1 = *src++; int iy; for (iy = 4; iy > 0; iy--) { - *dst_blk = ((src_byte0 & 3) << 4) | (src_byte1 & 3); + *dst_blk = (src_byte0 & 0x30) | (src_byte1 & 0x03); src_byte0 >>= 2; src_byte1 >>= 2; dst_blk -= BMP_LINESIZE; @@ -526,6 +528,32 @@ void screen_dump(void) write(fh, line_block, sizeof(line_block)); } +#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED + for (by = LCD_FBHEIGHT - 1; by >= 0; by--) + { + const fb_data *src = &lcd_framebuffer[by][0]; + unsigned char *dst = &line_block[7][0]; + + memset(line_block, 0, sizeof(line_block)); + for (bx = LCD_WIDTH/2; bx > 0; bx--) + { + unsigned char *dst_blk = dst++; + unsigned src_data0 = *src++ << 4; + unsigned src_data1 = *src++; + int iy; + + for (iy = 8; iy > 0; iy--) + { + *dst_blk = (src_data0 & 0x10) | (src_data1 & 0x01) + | ((src_data0 & 0x1000) | (src_data1 & 0x0100)) >> 7; + src_data0 >>= 1; + src_data1 >>= 1; + dst_blk -= BMP_LINESIZE; + } + } + + write(fh, line_block, sizeof(line_block)); + } #endif #elif LCD_DEPTH == 16 for (by = LCD_HEIGHT - 1; by >= 0; by--) |