diff options
author | Kostas Nakos | 2006-06-10 11:08:34 +0000 |
---|---|---|
committer | Kostas Nakos | 2006-06-10 11:08:34 +0000 |
commit | 33e6264954ac787430bcd54a773e709ece171a1a (patch) | |
tree | fc386575783ac53a76994d4230c4ab3f9020c1bf /backends | |
parent | a2651ff7cbc350e84d11694c811beebe1ec64c8d (diff) | |
download | scummvm-rg350-33e6264954ac787430bcd54a773e709ece171a1a.tar.gz scummvm-rg350-33e6264954ac787430bcd54a773e709ece171a1a.tar.bz2 scummvm-rg350-33e6264954ac787430bcd54a773e709ece171a1a.zip |
new landscape aspect scaler (n0p)
svn-id: r23003
Diffstat (limited to 'backends')
-rw-r--r-- | backends/wince/CEScaler.cpp | 57 | ||||
-rw-r--r-- | backends/wince/CEScaler.h | 1 |
2 files changed, 58 insertions, 0 deletions
diff --git a/backends/wince/CEScaler.cpp b/backends/wince/CEScaler.cpp index 9c118a8d80..86fe2a7104 100644 --- a/backends/wince/CEScaler.cpp +++ b/backends/wince/CEScaler.cpp @@ -72,6 +72,63 @@ void PocketPCPortrait(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint3 } } +void PocketPCLandscapeAspect(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { + +#define RB(x) ((x & redblueMasks[maskUsed])<<8) +#define G(x) ((x & greenMasks[maskUsed])<<3) + +#define P20(x) (((x)>>2)-((x)>>4)) +#define P40(x) (((x)>>1)-((x)>>3)) +#define P60(x) (((x)>>1)+((x)>>3)) +#define P80(x) (((x)>>1)+((x)>>2)+((x)>>4)) + +#define MAKEPIXEL(rb,g) ((((rb)>>8) & redblueMasks[maskUsed] | ((g)>>3) & greenMasks[maskUsed])) + + int i,j; + unsigned int p1; + unsigned int p2; + uint16 * inbuf; + uint16 * outbuf; + inbuf=(uint16 *)srcPtr; + outbuf=(uint16 *)dstPtr; + + uint16 srcPitch16 = (uint16)(srcPitch / sizeof(uint16)); + uint16 dstPitch16 = (uint16)(dstPitch / sizeof(uint16)); + + for (i=0; i<((height)/6); i++) { + for (j=0; j<width; j++) { + p1=*((uint16*)inbuf+j); + inbuf+=srcPitch16; + *((uint16*)outbuf+j)=p1; + outbuf+=dstPitch16; + p2=*((uint16*)inbuf+j); + inbuf+=srcPitch16; + *((uint16*)outbuf+j)=MAKEPIXEL(P20(RB(p1))+P80(RB(p2)),P20(G(p1))+P80(G(p2))); + outbuf+=dstPitch16; + p1=p2; + p2=*((uint16*)inbuf+j); + inbuf+=srcPitch16; + *((uint16*)outbuf+j)=MAKEPIXEL(P40(RB(p1))+P60(RB(p2)),P40(G(p1))+P60(G(p2))); + outbuf+=dstPitch16; + p1=p2; + p2=*((uint16*)inbuf+j); + inbuf+=srcPitch16; + *((uint16*)outbuf+j)=MAKEPIXEL(P60(RB(p1))+P40(RB(p2)),P60(G(p1))+P40(G(p2))); + outbuf+=dstPitch16; + p1=p2; + p2=*((uint16*)inbuf+j); + *((uint16*)outbuf+j)=MAKEPIXEL(P80(RB(p1))+P20(RB(p2)),P80(G(p1))+P20(G(p2))); + outbuf+=dstPitch16; + *((uint16*)outbuf+j)=p2; + inbuf=inbuf-srcPitch16*4; + outbuf=outbuf-dstPitch16*5; + } + inbuf=inbuf+srcPitch16*5; + outbuf=outbuf+dstPitch16*6; + } +} + + void PocketPCHalf(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { uint8 *work; int i; diff --git a/backends/wince/CEScaler.h b/backends/wince/CEScaler.h index f4980ec1c7..9ff10c632f 100644 --- a/backends/wince/CEScaler.h +++ b/backends/wince/CEScaler.h @@ -30,6 +30,7 @@ #include "graphics/scaler/intern.h" DECLARE_SCALER(PocketPCPortrait); +DECLARE_SCALER(PocketPCLandscapeAspect); DECLARE_SCALER(PocketPCHalf); DECLARE_SCALER(PocketPCHalfZoom); //#ifdef WIN32_PLATFORM_WFSP |