From 0fc137cdf2f04d676b196efb6bc0599efd53e84f Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 8 Mar 2010 10:31:09 +0000 Subject: [PATCH] Rename PocketPCPortrait scaler to DownscaleHorizByThreeQuarters, and move it to graphics/scaler. svn-id: r48191 --- backends/platform/wince/CEScaler.cpp | 35 ----------------------- backends/platform/wince/CEScaler.h | 6 ---- backends/platform/wince/wince-sdl.cpp | 2 +- graphics/scaler/downscaler.cpp | 41 +++++++++++++++++++++++++++ graphics/scaler/downscaler.h | 6 ++++ 5 files changed, 48 insertions(+), 42 deletions(-) diff --git a/backends/platform/wince/CEScaler.cpp b/backends/platform/wince/CEScaler.cpp index 4e321e527e5..8334ba7a049 100644 --- a/backends/platform/wince/CEScaler.cpp +++ b/backends/platform/wince/CEScaler.cpp @@ -25,41 +25,6 @@ #include "graphics/scaler/intern.h" #include "CEScaler.h" -template -void PocketPCPortraitTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { - uint16 *work; - - // Various casts below go via (void *) to avoid warning. This is - // safe as these are all even addresses. - while (height--) { - work = (uint16 *)(void *)dstPtr; - - for (int i=0; i(color1, color2); - work[1] = interpolate32_1_1(color2, color3); - work[2] = interpolate32_3_1(color4, color3); - - work += 3; - } - srcPtr += srcPitch; - dstPtr += dstPitch; - } -} - -void PocketPCPortrait(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { - extern int gBitFormat; - if (gBitFormat == 565) - PocketPCPortraitTemplate >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); - else - PocketPCPortraitTemplate >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); -} - void PocketPCLandscapeAspect(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { const int redblueMasks[] = { 0x7C1F, 0xF81F }; diff --git a/backends/platform/wince/CEScaler.h b/backends/platform/wince/CEScaler.h index 548c0c99c1f..b806630d314 100644 --- a/backends/platform/wince/CEScaler.h +++ b/backends/platform/wince/CEScaler.h @@ -31,12 +31,6 @@ #include "graphics/scaler.h" #include "graphics/scaler/intern.h" -/** - * This filter (down)scales the source image horizontally by a factor of 3/4. - * For example, a 320x200 image is scaled to 240x200. - */ -DECLARE_SCALER(PocketPCPortrait); - /** * This filter (up)scales the source image vertically by a factor of 6/5. * For example, a 320x200 image is scaled to 320x240. diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp index 75e882f43e5..02538f879fe 100644 --- a/backends/platform/wince/wince-sdl.cpp +++ b/backends/platform/wince/wince-sdl.cpp @@ -1150,7 +1150,7 @@ bool OSystem_WINCE3::update_scalers() { _scaleFactorXd = 4; _scaleFactorYm = 1; _scaleFactorYd = 1; - _scalerProc = PocketPCPortrait; + _scalerProc = DownscaleHorizByThreeQuarters; _modeFlags = 0; } else { _scaleFactorXm = 1; diff --git a/graphics/scaler/downscaler.cpp b/graphics/scaler/downscaler.cpp index 7b2e7c70c47..53e90bb9963 100644 --- a/graphics/scaler/downscaler.cpp +++ b/graphics/scaler/downscaler.cpp @@ -35,6 +35,8 @@ void DownscaleAllByHalf(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin static const int roundingconstants[] = { 0x00200802, 0x00201002 }; static const int redbluegreenMasks[] = { 0x03E07C1F, 0x07E0F81F }; + extern int gBitFormat; + const int maskUsed = (gBitFormat == 565); DownscaleAllByHalfARM(srcPtr, srcPitch, dstPtr, dstPitch, width, height, redbluegreenMasks[maskUsed], roundingconstants[maskUsed]); } @@ -108,3 +110,42 @@ void DownscaleHorizByHalf(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, u else DownscaleHorizByHalfTemplate >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); } + +/** + * This filter (down)scales the source image horizontally by a factor of 3/4. + * For example, a 320x200 image is scaled to 240x200. + */ +template +void DownscaleHorizByThreeQuartersTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { + uint16 *work; + + // Various casts below go via (void *) to avoid warning. This is + // safe as these are all even addresses. + while (height--) { + work = (uint16 *)(void *)dstPtr; + + for (int i = 0; i < width; i += 4) { + // Work with 4 pixels + uint16 color1 = *(((const uint16 *)(const void *)srcPtr) + i); + uint16 color2 = *(((const uint16 *)(const void *)srcPtr) + (i + 1)); + uint16 color3 = *(((const uint16 *)(const void *)srcPtr) + (i + 2)); + uint16 color4 = *(((const uint16 *)(const void *)srcPtr) + (i + 3)); + + work[0] = interpolate32_3_1(color1, color2); + work[1] = interpolate32_1_1(color2, color3); + work[2] = interpolate32_3_1(color4, color3); + + work += 3; + } + srcPtr += srcPitch; + dstPtr += dstPitch; + } +} + +void DownscaleHorizByThreeQuarters(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { + extern int gBitFormat; + if (gBitFormat == 565) + DownscaleHorizByThreeQuartersTemplate >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); + else + DownscaleHorizByThreeQuartersTemplate >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); +} diff --git a/graphics/scaler/downscaler.h b/graphics/scaler/downscaler.h index 115ad945e56..158b1879402 100644 --- a/graphics/scaler/downscaler.h +++ b/graphics/scaler/downscaler.h @@ -41,4 +41,10 @@ DECLARE_SCALER(DownscaleAllByHalf); */ DECLARE_SCALER(DownscaleHorizByHalf); +/** + * This filter (down)scales the source image horizontally by a factor of 3/4. + * For example, a 320x200 image is scaled to 240x200. + */ +DECLARE_SCALER(DownscaleHorizByThreeQuarters); + #endif