aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/platform/wince/CEScaler.cpp18
-rw-r--r--graphics/scaler.cpp53
-rw-r--r--graphics/scaler/2xsai.cpp26
-rw-r--r--graphics/scaler/aspect.cpp1
-rw-r--r--graphics/scaler/downscaler.cpp18
-rw-r--r--graphics/scaler/hq2x.cpp1
-rw-r--r--graphics/scaler/hq3x.cpp1
-rw-r--r--graphics/scaler/intern.h18
8 files changed, 93 insertions, 43 deletions
diff --git a/backends/platform/wince/CEScaler.cpp b/backends/platform/wince/CEScaler.cpp
index 546f8546c9..4e321e527e 100644
--- a/backends/platform/wince/CEScaler.cpp
+++ b/backends/platform/wince/CEScaler.cpp
@@ -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
diff --git a/graphics/scaler.cpp b/graphics/scaler.cpp
index 95606043b7..e9eeb71fe3 100644
--- a/graphics/scaler.cpp
+++ b/graphics/scaler.cpp
@@ -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)]);
diff --git a/graphics/scaler/2xsai.cpp b/graphics/scaler/2xsai.cpp
index 165734ba10..936ed19124 100644
--- a/graphics/scaler/2xsai.cpp
+++ b/graphics/scaler/2xsai.cpp
@@ -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);
+}
diff --git a/graphics/scaler/aspect.cpp b/graphics/scaler/aspect.cpp
index 3707f39b60..58974c30fa 100644
--- a/graphics/scaler/aspect.cpp
+++ b/graphics/scaler/aspect.cpp
@@ -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
diff --git a/graphics/scaler/downscaler.cpp b/graphics/scaler/downscaler.cpp
index 6f94f1f34b..7b2e7c70c4 100644
--- a/graphics/scaler/downscaler.cpp
+++ b/graphics/scaler/downscaler.cpp
@@ -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);
+}
diff --git a/graphics/scaler/hq2x.cpp b/graphics/scaler/hq2x.cpp
index 3d9112e5c6..c302ebe8e4 100644
--- a/graphics/scaler/hq2x.cpp
+++ b/graphics/scaler/hq2x.cpp
@@ -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]
diff --git a/graphics/scaler/hq3x.cpp b/graphics/scaler/hq3x.cpp
index 727f06ff0b..83b00ee4b3 100644
--- a/graphics/scaler/hq3x.cpp
+++ b/graphics/scaler/hq3x.cpp
@@ -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]
diff --git a/graphics/scaler/intern.h b/graphics/scaler/intern.h
index 706f0a11d0..4addd6d3bd 100644
--- a/graphics/scaler/intern.h
+++ b/graphics/scaler/intern.h
@@ -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