SCALERS: Change 'bitformat' template params to 'colormasks';
get rid of some #defines svn-id: r48187
This commit is contained in:
parent
28c6c600d4
commit
d239d5c2f8
6 changed files with 51 additions and 57 deletions
|
@ -25,7 +25,7 @@
|
||||||
#include "graphics/scaler/intern.h"
|
#include "graphics/scaler/intern.h"
|
||||||
#include "CEScaler.h"
|
#include "CEScaler.h"
|
||||||
|
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void PocketPCPortraitTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
void PocketPCPortraitTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||||
uint16 *work;
|
uint16 *work;
|
||||||
|
|
||||||
|
@ -41,9 +41,9 @@ void PocketPCPortraitTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPt
|
||||||
uint16 color3 = *(((const uint16 *)(const void *)srcPtr) + (i + 2));
|
uint16 color3 = *(((const uint16 *)(const void *)srcPtr) + (i + 2));
|
||||||
uint16 color4 = *(((const uint16 *)(const void *)srcPtr) + (i + 3));
|
uint16 color4 = *(((const uint16 *)(const void *)srcPtr) + (i + 3));
|
||||||
|
|
||||||
work[0] = interpolate32_3_1<bitFormat>(color1, color2);
|
work[0] = interpolate32_3_1<ColorMask>(color1, color2);
|
||||||
work[1] = interpolate32_1_1<bitFormat>(color2, color3);
|
work[1] = interpolate32_1_1<ColorMask>(color2, color3);
|
||||||
work[2] = interpolate32_3_1<bitFormat>(color4, color3);
|
work[2] = interpolate32_3_1<ColorMask>(color4, color3);
|
||||||
|
|
||||||
work += 3;
|
work += 3;
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, ui
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void SmartphoneLandscapeTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
void SmartphoneLandscapeTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||||
uint8 *work;
|
uint8 *work;
|
||||||
int line = 0;
|
int line = 0;
|
||||||
|
@ -142,8 +142,8 @@ void SmartphoneLandscapeTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *ds
|
||||||
uint16 color2 = *(((const uint16 *)srcPtr) + (i + 1));
|
uint16 color2 = *(((const uint16 *)srcPtr) + (i + 1));
|
||||||
uint16 color3 = *(((const uint16 *)srcPtr) + (i + 2));
|
uint16 color3 = *(((const uint16 *)srcPtr) + (i + 2));
|
||||||
|
|
||||||
*(((uint16 *)work) + 0) = interpolate32_3_1<bitFormat>(color1, color2);
|
*(((uint16 *)work) + 0) = interpolate32_3_1<ColorMask>(color1, color2);
|
||||||
*(((uint16 *)work) + 1) = interpolate32_3_1<bitFormat>(color3, color2);
|
*(((uint16 *)work) + 1) = interpolate32_3_1<ColorMask>(color3, color2);
|
||||||
|
|
||||||
work += 2 * sizeof(uint16);
|
work += 2 * sizeof(uint16);
|
||||||
}
|
}
|
||||||
|
|
|
@ -284,13 +284,13 @@ void Normal3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define interpolate_1_1 interpolate16_1_1<Graphics::ColorMasks<bitFormat> >
|
#define interpolate_1_1 interpolate16_1_1<ColorMask>
|
||||||
#define interpolate_1_1_1_1 interpolate16_1_1_1_1<Graphics::ColorMasks<bitFormat> >
|
#define interpolate_1_1_1_1 interpolate16_1_1_1_1<ColorMask>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trivial nearest-neighbour 1.5x scaler.
|
* Trivial nearest-neighbour 1.5x scaler.
|
||||||
*/
|
*/
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void Normal1o5xTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
|
void Normal1o5xTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
uint8 *r;
|
uint8 *r;
|
||||||
|
@ -342,7 +342,7 @@ void AdvMame3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPi
|
||||||
scale(3, dstPtr, dstPitch, srcPtr - srcPitch, srcPitch, 2, width, height);
|
scale(3, dstPtr, dstPitch, srcPtr - srcPitch, srcPitch, 2, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void TV2xTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
|
void TV2xTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
const uint32 nextlineSrc = srcPitch / sizeof(uint16);
|
const uint32 nextlineSrc = srcPitch / sizeof(uint16);
|
||||||
|
@ -356,8 +356,8 @@ void TV2xTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 ds
|
||||||
uint16 p1 = *(p + i);
|
uint16 p1 = *(p + i);
|
||||||
uint32 pi;
|
uint32 pi;
|
||||||
|
|
||||||
pi = (((p1 & redblueMask) * 7) >> 3) & redblueMask;
|
pi = (((p1 & ColorMask::kRedBlueMask) * 7) >> 3) & ColorMask::kRedBlueMask;
|
||||||
pi |= (((p1 & greenMask) * 7) >> 3) & greenMask;
|
pi |= (((p1 & ColorMask::kGreenMask) * 7) >> 3) & ColorMask::kGreenMask;
|
||||||
|
|
||||||
*(q + j) = p1;
|
*(q + j) = p1;
|
||||||
*(q + j + 1) = p1;
|
*(q + j + 1) = p1;
|
||||||
|
|
|
@ -41,12 +41,12 @@ static inline int GetResult(uint32 A, uint32 B, uint32 C, uint32 D) {
|
||||||
return (y>>1) - (x>>1);
|
return (y>>1) - (x>>1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define interpolate_1_1 interpolate16_1_1<Graphics::ColorMasks<bitFormat> >
|
#define interpolate_1_1 interpolate16_1_1<ColorMask>
|
||||||
#define interpolate_3_1 interpolate16_3_1<Graphics::ColorMasks<bitFormat> >
|
#define interpolate_3_1 interpolate16_3_1<ColorMask>
|
||||||
#define interpolate_6_1_1 interpolate16_6_1_1<Graphics::ColorMasks<bitFormat> >
|
#define interpolate_6_1_1 interpolate16_6_1_1<ColorMask>
|
||||||
#define interpolate_1_1_1_1 interpolate16_1_1_1_1<Graphics::ColorMasks<bitFormat> >
|
#define interpolate_1_1_1_1 interpolate16_1_1_1_1<ColorMask>
|
||||||
|
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void Super2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
void Super2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||||
const uint16 *bP;
|
const uint16 *bP;
|
||||||
uint16 *dP;
|
uint16 *dP;
|
||||||
|
@ -155,7 +155,7 @@ void Super2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin
|
||||||
|
|
||||||
MAKE_WRAPPER(Super2xSaI)
|
MAKE_WRAPPER(Super2xSaI)
|
||||||
|
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void SuperEagleTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
void SuperEagleTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||||
const uint16 *bP;
|
const uint16 *bP;
|
||||||
uint16 *dP;
|
uint16 *dP;
|
||||||
|
@ -260,7 +260,7 @@ void SuperEagleTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin
|
||||||
|
|
||||||
MAKE_WRAPPER(SuperEagle)
|
MAKE_WRAPPER(SuperEagle)
|
||||||
|
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void _2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
void _2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||||
const uint16 *bP;
|
const uint16 *bP;
|
||||||
uint16 *dP;
|
uint16 *dP;
|
||||||
|
|
|
@ -36,28 +36,28 @@
|
||||||
|
|
||||||
#if ASPECT_MODE == kSlowAndPerfectAspectMode
|
#if ASPECT_MODE == kSlowAndPerfectAspectMode
|
||||||
|
|
||||||
template<int bitFormat, int scale>
|
template<typename ColorMask, int scale>
|
||||||
static inline uint16 interpolate5(uint16 A, uint16 B) {
|
static inline uint16 interpolate5(uint16 A, uint16 B) {
|
||||||
uint16 r = (uint16)(((A & redblueMask & 0xFF00) * scale + (B & redblueMask & 0xFF00) * (5 - scale)) / 5);
|
uint16 r = (uint16)(((A & ColorMask::kRedBlueMask & 0xFF00) * scale + (B & ColorMask::kRedBlueMask & 0xFF00) * (5 - scale)) / 5);
|
||||||
uint16 g = (uint16)(((A & greenMask) * scale + (B & greenMask) * (5 - scale)) / 5);
|
uint16 g = (uint16)(((A & ColorMask::kGreenMask) * scale + (B & ColorMask::kGreenMask) * (5 - scale)) / 5);
|
||||||
uint16 b = (uint16)(((A & redblueMask & 0x00FF) * scale + (B & redblueMask & 0x00FF) * (5 - scale)) / 5);
|
uint16 b = (uint16)(((A & ColorMask::kRedBlueMask & 0x00FF) * scale + (B & ColorMask::kRedBlueMask & 0x00FF) * (5 - scale)) / 5);
|
||||||
|
|
||||||
return (uint16)((r & redblueMask & 0xFF00) | (g & greenMask) | (b & redblueMask & 0x00FF));
|
return (uint16)((r & ColorMask::kRedBlueMask & 0xFF00) | (g & ColorMask::kGreenMask) | (b & ColorMask::kRedBlueMask & 0x00FF));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<int bitFormat, int scale>
|
template<typename ColorMask, int scale>
|
||||||
static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint16 *srcB, int width) {
|
static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint16 *srcB, int width) {
|
||||||
// Accurate but slightly slower code
|
// Accurate but slightly slower code
|
||||||
while (width--) {
|
while (width--) {
|
||||||
*dst++ = interpolate5<bitFormat, scale>(*srcA++, *srcB++);
|
*dst++ = interpolate5<ColorMask, scale>(*srcA++, *srcB++);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ASPECT_MODE == kFastAndNiceAspectMode
|
#if ASPECT_MODE == kFastAndNiceAspectMode
|
||||||
|
|
||||||
template<int bitFormat, int scale>
|
template<typename ColorMask, int scale>
|
||||||
static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint16 *srcB, int width) {
|
static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint16 *srcB, int width) {
|
||||||
// For efficiency reasons we blit two pixels at a time, so it is important
|
// For efficiency reasons we blit two pixels at a time, so it is important
|
||||||
// that makeRectStretchable() guarantees that the width is even and that
|
// that makeRectStretchable() guarantees that the width is even and that
|
||||||
|
@ -78,11 +78,11 @@ static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint1
|
||||||
uint32 *d = (uint32 *)dst;
|
uint32 *d = (uint32 *)dst;
|
||||||
if (scale == 1) {
|
if (scale == 1) {
|
||||||
while (width--) {
|
while (width--) {
|
||||||
*d++ = interpolate32_3_1<bitFormat>(*sB++, *sA++);
|
*d++ = interpolate32_3_1<ColorMask>(*sB++, *sA++);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (width--) {
|
while (width--) {
|
||||||
*d++ = interpolate32_1_1<bitFormat>(*sB++, *sA++);
|
*d++ = interpolate32_1_1<ColorMask>(*sB++, *sA++);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,7 @@ void makeRectStretchable(int &x, int &y, int &w, int &h) {
|
||||||
* srcY + height - 1, and it should be stretched to Y coordinates srcY
|
* srcY + height - 1, and it should be stretched to Y coordinates srcY
|
||||||
* through real2Aspect(srcY + height - 1).
|
* through real2Aspect(srcY + height - 1).
|
||||||
*/
|
*/
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, int srcY, int origSrcY) {
|
int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, int srcY, int origSrcY) {
|
||||||
int maxDstY = real2Aspect(origSrcY + height - 1);
|
int maxDstY = real2Aspect(origSrcY + height - 1);
|
||||||
int y;
|
int y;
|
||||||
|
@ -156,16 +156,16 @@ int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, i
|
||||||
memcpy(dstPtr, srcPtr, width * 2);
|
memcpy(dstPtr, srcPtr, width * 2);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
interpolate5Line<bitFormat, 1>((uint16 *)dstPtr, (const uint16 *)(srcPtr - pitch), (const uint16 *)srcPtr, width);
|
interpolate5Line<ColorMask, 1>((uint16 *)dstPtr, (const uint16 *)(srcPtr - pitch), (const uint16 *)srcPtr, width);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
interpolate5Line<bitFormat, 2>((uint16 *)dstPtr, (const uint16 *)(srcPtr - pitch), (const uint16 *)srcPtr, width);
|
interpolate5Line<ColorMask, 2>((uint16 *)dstPtr, (const uint16 *)(srcPtr - pitch), (const uint16 *)srcPtr, width);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
interpolate5Line<bitFormat, 2>((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - pitch), width);
|
interpolate5Line<ColorMask, 2>((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - pitch), width);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
interpolate5Line<bitFormat, 1>((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - pitch), width);
|
interpolate5Line<ColorMask, 1>((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - pitch), width);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -177,8 +177,8 @@ int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, i
|
||||||
|
|
||||||
int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, int srcY, int origSrcY) {
|
int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, int srcY, int origSrcY) {
|
||||||
if (gBitFormat == 565)
|
if (gBitFormat == 565)
|
||||||
return stretch200To240<565>(buf, pitch, width, height, srcX, srcY, origSrcY);
|
return stretch200To240<Graphics::ColorMasks<565> >(buf, pitch, width, height, srcX, srcY, origSrcY);
|
||||||
else // gBitFormat == 555
|
else // gBitFormat == 555
|
||||||
return stretch200To240<555>(buf, pitch, width, height, srcX, srcY, origSrcY);
|
return stretch200To240<Graphics::ColorMasks<555> >(buf, pitch, width, height, srcX, srcY, origSrcY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ void DownscaleAllByHalf(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void DownscaleAllByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
void DownscaleAllByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||||
uint8 *work;
|
uint8 *work;
|
||||||
uint16 srcPitch16 = (uint16)(srcPitch / sizeof(uint16));
|
uint16 srcPitch16 = (uint16)(srcPitch / sizeof(uint16));
|
||||||
|
@ -55,7 +55,7 @@ void DownscaleAllByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dst
|
||||||
uint16 color2 = *(((const uint16 *)srcPtr) + (i + 1));
|
uint16 color2 = *(((const uint16 *)srcPtr) + (i + 1));
|
||||||
uint16 color3 = *(((const uint16 *)srcPtr) + (i + srcPitch16));
|
uint16 color3 = *(((const uint16 *)srcPtr) + (i + srcPitch16));
|
||||||
uint16 color4 = *(((const uint16 *)srcPtr) + (i + srcPitch16 + 1));
|
uint16 color4 = *(((const uint16 *)srcPtr) + (i + srcPitch16 + 1));
|
||||||
*(((uint16 *)work) + 0) = interpolate16_1_1_1_1<Graphics::ColorMasks<bitFormat> >(color1, color2, color3, color4);
|
*(((uint16 *)work) + 0) = interpolate16_1_1_1_1<ColorMask>(color1, color2, color3, color4);
|
||||||
|
|
||||||
work += sizeof(uint16);
|
work += sizeof(uint16);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ MAKE_WRAPPER(DownscaleAllByHalf)
|
||||||
* This filter (down)scales the source image horizontally by a factor of 1/2.
|
* This filter (down)scales the source image horizontally by a factor of 1/2.
|
||||||
* For example, a 320x200 image is scaled to 160x200.
|
* For example, a 320x200 image is scaled to 160x200.
|
||||||
*/
|
*/
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
void DownscaleHorizByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
void DownscaleHorizByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||||
uint16 *work;
|
uint16 *work;
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ void DownscaleHorizByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *d
|
||||||
for (int i = 0; i < width; i += 2) {
|
for (int i = 0; i < width; i += 2) {
|
||||||
uint16 color1 = *(((const uint16 *)(const void *)srcPtr) + i);
|
uint16 color1 = *(((const uint16 *)(const void *)srcPtr) + i);
|
||||||
uint16 color2 = *(((const uint16 *)(const void *)srcPtr) + (i + 1));
|
uint16 color2 = *(((const uint16 *)(const void *)srcPtr) + (i + 1));
|
||||||
*work++ = interpolate32_1_1<bitFormat>(color1, color2);
|
*work++ = interpolate32_1_1<ColorMask>(color1, color2);
|
||||||
}
|
}
|
||||||
srcPtr += srcPitch;
|
srcPtr += srcPitch;
|
||||||
dstPtr += dstPitch;
|
dstPtr += dstPitch;
|
||||||
|
|
|
@ -30,22 +30,16 @@
|
||||||
#include "graphics/colormasks.h"
|
#include "graphics/colormasks.h"
|
||||||
|
|
||||||
|
|
||||||
#define kHighBitsMask Graphics::ColorMasks<bitFormat>::kHighBitsMask
|
|
||||||
#define kLowBitsMask Graphics::ColorMasks<bitFormat>::kLowBitsMask
|
|
||||||
#define qhighBits Graphics::ColorMasks<bitFormat>::qhighBits
|
|
||||||
#define qlowBits Graphics::ColorMasks<bitFormat>::qlowBits
|
|
||||||
#define redblueMask Graphics::ColorMasks<bitFormat>::kRedBlueMask
|
|
||||||
#define greenMask Graphics::ColorMasks<bitFormat>::kGreenMask
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interpolate two 16 bit pixel *pairs* at once with equal weights 1.
|
* Interpolate two 16 bit pixel *pairs* at once with equal weights 1.
|
||||||
* In particular, p1 and p2 can contain two pixels each in the upper
|
* In particular, p1 and p2 can contain two pixels each in the upper
|
||||||
* and lower halves.
|
* and lower halves.
|
||||||
*/
|
*/
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
static inline uint32 interpolate32_1_1(uint32 p1, uint32 p2) {
|
static inline uint32 interpolate32_1_1(uint32 p1, uint32 p2) {
|
||||||
return (((p1 & kHighBitsMask) >> 1) + ((p2 & kHighBitsMask) >> 1) + (p1 & p2 & kLowBitsMask));
|
return (((p1 & ColorMask::kHighBitsMask) >> 1) +
|
||||||
|
((p2 & ColorMask::kHighBitsMask) >> 1) +
|
||||||
|
(p1 & p2 & ColorMask::kLowBitsMask));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53,12 +47,12 @@ static inline uint32 interpolate32_1_1(uint32 p1, uint32 p2) {
|
||||||
* In particular, p1 and p2 can contain two pixels/each in the upper
|
* In particular, p1 and p2 can contain two pixels/each in the upper
|
||||||
* and lower halves.
|
* and lower halves.
|
||||||
*/
|
*/
|
||||||
template<int bitFormat>
|
template<typename ColorMask>
|
||||||
static inline uint32 interpolate32_3_1(uint32 p1, uint32 p2) {
|
static inline uint32 interpolate32_3_1(uint32 p1, uint32 p2) {
|
||||||
register uint32 x = ((p1 & qhighBits) >> 2) * 3 + ((p2 & qhighBits) >> 2);
|
register uint32 x = ((p1 & ColorMask::qhighBits) >> 2) * 3 + ((p2 & ColorMask::qhighBits) >> 2);
|
||||||
register uint32 y = ((p1 & qlowBits) * 3 + (p2 & qlowBits)) >> 2;
|
register uint32 y = ((p1 & ColorMask::qlowBits) * 3 + (p2 & ColorMask::qlowBits)) >> 2;
|
||||||
|
|
||||||
y &= qlowBits;
|
y &= ColorMask::qlowBits;
|
||||||
return x + y;
|
return x + y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,9 +221,9 @@ extern "C" uint32 *RGBtoYUV;
|
||||||
#define MAKE_WRAPPER(FUNC) \
|
#define MAKE_WRAPPER(FUNC) \
|
||||||
void FUNC(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { \
|
void FUNC(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { \
|
||||||
if (gBitFormat == 565) \
|
if (gBitFormat == 565) \
|
||||||
FUNC ## Template<565>(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \
|
FUNC ## Template<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \
|
||||||
else \
|
else \
|
||||||
FUNC ## Template<555>(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \
|
FUNC ## Template<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Specifies the currently active 16bit pixel format, 555 or 565. */
|
/** Specifies the currently active 16bit pixel format, 555 or 565. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue