SCALERS: Get rid of MAKE_WRAPPER; make RGBtoYUV internal
svn-id: r48189
This commit is contained in:
parent
78b6bed8db
commit
a558e60fec
8 changed files with 93 additions and 43 deletions
|
@ -51,7 +51,14 @@ void PocketPCPortraitTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPt
|
|||
dstPtr += dstPitch;
|
||||
}
|
||||
}
|
||||
MAKE_WRAPPER(PocketPCPortrait)
|
||||
|
||||
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) {
|
||||
|
||||
|
@ -157,7 +164,14 @@ void SmartphoneLandscapeTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *ds
|
|||
}
|
||||
}
|
||||
}
|
||||
MAKE_WRAPPER(SmartphoneLandscape)
|
||||
|
||||
void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
extern int gBitFormat;
|
||||
if (gBitFormat == 565)
|
||||
SmartphoneLandscapeTemplate<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
else
|
||||
SmartphoneLandscapeTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -59,22 +59,27 @@ uint32 hqx_greenMask = 0;
|
|||
uint32 hqx_redBlueMask = 0;
|
||||
uint32 hqx_green_redBlue_Mask = 0;
|
||||
|
||||
// FIXME/TODO: The RGBtoYUV table sucks up 256 KB. This is bad.
|
||||
// In addition we never free it...
|
||||
//
|
||||
// Note: a memory lookup table is *not* necessarily faster than computing
|
||||
// these things on the fly, because of its size. The table together with
|
||||
// the code, plus the input/output GFX data, may not fit in the cache on some
|
||||
// systems, so main memory has to be accessed, which is about the worst thing
|
||||
// that can happen to code which tries to be fast...
|
||||
//
|
||||
// So we should think about ways to get this smaller / removed. Maybe we can
|
||||
// use the same technique employed by our MPEG code to reduce the size of the
|
||||
// lookup table at the cost of some additional computations?
|
||||
//
|
||||
// Of course, the above is largely a conjecture, and the actual speed
|
||||
// differences are likely to vary a lot between different architectures and
|
||||
// CPUs.
|
||||
/**
|
||||
* 16bit RGB to YUV conversion table. This table is setup by InitLUT().
|
||||
* Used by the hq scaler family.
|
||||
*
|
||||
* FIXME/TODO: The RGBtoYUV table sucks up 256 KB. This is bad.
|
||||
* In addition we never free it...
|
||||
*
|
||||
* Note: a memory lookup table is *not* necessarily faster than computing
|
||||
* these things on the fly, because of its size. The table together with
|
||||
* the code, plus the input/output GFX data, may not fit in the cache on some
|
||||
* systems, so main memory has to be accessed, which is about the worst thing
|
||||
* that can happen to code which tries to be fast...
|
||||
*
|
||||
* So we should think about ways to get this smaller / removed. Maybe we can
|
||||
* use the same technique employed by our MPEG code to reduce the size of the
|
||||
* lookup table at the cost of some additional computations?
|
||||
*
|
||||
* Of course, the above is largely a conjecture, and the actual speed
|
||||
* differences are likely to vary a lot between different architectures and
|
||||
* CPUs.
|
||||
*/
|
||||
uint32 *RGBtoYUV = 0;
|
||||
}
|
||||
|
||||
|
@ -322,7 +327,13 @@ void Normal1o5xTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin
|
|||
height -= 2;
|
||||
}
|
||||
}
|
||||
MAKE_WRAPPER(Normal1o5x)
|
||||
|
||||
void Normal1o5x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
if (gBitFormat == 565)
|
||||
Normal1o5xTemplate<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
else
|
||||
Normal1o5xTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
}
|
||||
|
||||
/**
|
||||
* The Scale2x filter, also known as AdvMame2x.
|
||||
|
@ -368,7 +379,13 @@ void TV2xTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 ds
|
|||
q += nextlineDst << 1;
|
||||
}
|
||||
}
|
||||
MAKE_WRAPPER(TV2x)
|
||||
|
||||
void TV2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
if (gBitFormat == 565)
|
||||
TV2xTemplate<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
else
|
||||
TV2xTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
}
|
||||
|
||||
static inline uint16 DOT_16(const uint16 *dotmatrix, uint16 c, int j, int i) {
|
||||
return c - ((c >> 2) & dotmatrix[((j & 3) << 2) + (i & 3)]);
|
||||
|
|
|
@ -153,7 +153,13 @@ void Super2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin
|
|||
}
|
||||
}
|
||||
|
||||
MAKE_WRAPPER(Super2xSaI)
|
||||
void Super2xSaI(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
extern int gBitFormat;
|
||||
if (gBitFormat == 565)
|
||||
Super2xSaITemplate<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
else
|
||||
Super2xSaITemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
}
|
||||
|
||||
template<typename ColorMask>
|
||||
void SuperEagleTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
|
@ -258,7 +264,14 @@ void SuperEagleTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin
|
|||
}
|
||||
}
|
||||
|
||||
MAKE_WRAPPER(SuperEagle)
|
||||
|
||||
void SuperEagle(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
extern int gBitFormat;
|
||||
if (gBitFormat == 565)
|
||||
SuperEagleTemplate<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
else
|
||||
SuperEagleTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
}
|
||||
|
||||
template<typename ColorMask>
|
||||
void _2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
|
@ -394,4 +407,11 @@ void _2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32
|
|||
}
|
||||
}
|
||||
|
||||
MAKE_WRAPPER(_2xSaI)
|
||||
|
||||
void _2xSaI(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
extern int gBitFormat;
|
||||
if (gBitFormat == 565)
|
||||
_2xSaITemplate<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
else
|
||||
_2xSaITemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
}
|
||||
|
|
|
@ -176,6 +176,7 @@ 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) {
|
||||
extern int gBitFormat;
|
||||
if (gBitFormat == 565)
|
||||
return stretch200To240<Graphics::ColorMasks<565> >(buf, pitch, width, height, srcX, srcY, origSrcY);
|
||||
else // gBitFormat == 555
|
||||
|
|
|
@ -63,7 +63,14 @@ void DownscaleAllByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dst
|
|||
dstPtr += dstPitch;
|
||||
}
|
||||
}
|
||||
MAKE_WRAPPER(DownscaleAllByHalf)
|
||||
|
||||
void DownscaleAllByHalf(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
extern int gBitFormat;
|
||||
if (gBitFormat == 565)
|
||||
DownscaleAllByHalfTemplate<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
else
|
||||
DownscaleAllByHalfTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -93,4 +100,11 @@ void DownscaleHorizByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *d
|
|||
dstPtr += dstPitch;
|
||||
}
|
||||
}
|
||||
MAKE_WRAPPER(DownscaleHorizByHalf)
|
||||
|
||||
void DownscaleHorizByHalf(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
|
||||
extern int gBitFormat;
|
||||
if (gBitFormat == 565)
|
||||
DownscaleHorizByHalfTemplate<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
else
|
||||
DownscaleHorizByHalfTemplate<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
|
||||
}
|
||||
|
|
|
@ -96,6 +96,7 @@ void HQ2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
|
|||
#define PIXEL11_90 *(q+1+nextlineDst) = interpolate16_2_3_3<ColorMask >(w5, w6, w8);
|
||||
#define PIXEL11_100 *(q+1+nextlineDst) = interpolate16_14_1_1<ColorMask >(w5, w6, w8);
|
||||
|
||||
extern "C" uint32 *RGBtoYUV;
|
||||
#define YUV(x) RGBtoYUV[w ## x]
|
||||
|
||||
|
||||
|
|
|
@ -99,6 +99,7 @@ void HQ3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
|
|||
#define PIXEL22_5 *(q+2+nextlineDst2) = interpolate16_1_1<ColorMask >(w6, w8);
|
||||
#define PIXEL22_C *(q+2+nextlineDst2) = w5;
|
||||
|
||||
extern "C" uint32 *RGBtoYUV;
|
||||
#define YUV(x) RGBtoYUV[w ## x]
|
||||
|
||||
|
||||
|
|
|
@ -211,22 +211,4 @@ static inline bool diffYUV(int yuv1, int yuv2) {
|
|||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* 16bit RGB to YUV conversion table. This table is setup by InitLUT().
|
||||
* Used by the hq scaler family.
|
||||
*/
|
||||
extern "C" uint32 *RGBtoYUV;
|
||||
|
||||
/** Auxiliary macro to simplify creating those template function wrappers. */
|
||||
#define MAKE_WRAPPER(FUNC) \
|
||||
void FUNC(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { \
|
||||
if (gBitFormat == 565) \
|
||||
FUNC ## Template<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \
|
||||
else \
|
||||
FUNC ## Template<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \
|
||||
}
|
||||
|
||||
/** Specifies the currently active 16bit pixel format, 555 or 565. */
|
||||
extern int gBitFormat;
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue