Rename PocketPCPortrait scaler to DownscaleHorizByThreeQuarters,
and move it to graphics/scaler. svn-id: r48191
This commit is contained in:
parent
deec3408a1
commit
0fc137cdf2
5 changed files with 48 additions and 42 deletions
|
@ -25,41 +25,6 @@
|
||||||
#include "graphics/scaler/intern.h"
|
#include "graphics/scaler/intern.h"
|
||||||
#include "CEScaler.h"
|
#include "CEScaler.h"
|
||||||
|
|
||||||
template<typename ColorMask>
|
|
||||||
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<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<ColorMask>(color1, color2);
|
|
||||||
work[1] = interpolate32_1_1<ColorMask>(color2, color3);
|
|
||||||
work[2] = interpolate32_3_1<ColorMask>(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<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
|
||||||
else
|
|
||||||
PocketPCPortraitTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PocketPCLandscapeAspect(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
void PocketPCLandscapeAspect(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||||
|
|
||||||
const int redblueMasks[] = { 0x7C1F, 0xF81F };
|
const int redblueMasks[] = { 0x7C1F, 0xF81F };
|
||||||
|
|
|
@ -31,12 +31,6 @@
|
||||||
#include "graphics/scaler.h"
|
#include "graphics/scaler.h"
|
||||||
#include "graphics/scaler/intern.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.
|
* This filter (up)scales the source image vertically by a factor of 6/5.
|
||||||
* For example, a 320x200 image is scaled to 320x240.
|
* For example, a 320x200 image is scaled to 320x240.
|
||||||
|
|
|
@ -1150,7 +1150,7 @@ bool OSystem_WINCE3::update_scalers() {
|
||||||
_scaleFactorXd = 4;
|
_scaleFactorXd = 4;
|
||||||
_scaleFactorYm = 1;
|
_scaleFactorYm = 1;
|
||||||
_scaleFactorYd = 1;
|
_scaleFactorYd = 1;
|
||||||
_scalerProc = PocketPCPortrait;
|
_scalerProc = DownscaleHorizByThreeQuarters;
|
||||||
_modeFlags = 0;
|
_modeFlags = 0;
|
||||||
} else {
|
} else {
|
||||||
_scaleFactorXm = 1;
|
_scaleFactorXm = 1;
|
||||||
|
|
|
@ -35,6 +35,8 @@ void DownscaleAllByHalf(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin
|
||||||
static const int roundingconstants[] = { 0x00200802, 0x00201002 };
|
static const int roundingconstants[] = { 0x00200802, 0x00201002 };
|
||||||
static const int redbluegreenMasks[] = { 0x03E07C1F, 0x07E0F81F };
|
static const int redbluegreenMasks[] = { 0x03E07C1F, 0x07E0F81F };
|
||||||
|
|
||||||
|
extern int gBitFormat;
|
||||||
|
|
||||||
const int maskUsed = (gBitFormat == 565);
|
const int maskUsed = (gBitFormat == 565);
|
||||||
DownscaleAllByHalfARM(srcPtr, srcPitch, dstPtr, dstPitch, width, height, redbluegreenMasks[maskUsed], roundingconstants[maskUsed]);
|
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
|
else
|
||||||
DownscaleHorizByHalfTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
DownscaleHorizByHalfTemplate<Graphics::ColorMasks<555> >(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<typename ColorMask>
|
||||||
|
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<ColorMask>(color1, color2);
|
||||||
|
work[1] = interpolate32_1_1<ColorMask>(color2, color3);
|
||||||
|
work[2] = interpolate32_3_1<ColorMask>(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<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||||
|
else
|
||||||
|
DownscaleHorizByThreeQuartersTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||||
|
}
|
||||||
|
|
|
@ -41,4 +41,10 @@ DECLARE_SCALER(DownscaleAllByHalf);
|
||||||
*/
|
*/
|
||||||
DECLARE_SCALER(DownscaleHorizByHalf);
|
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
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue