aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/gp32/gp32.cpp6
-rw-r--r--backends/sdl/sdl.cpp8
-rw-r--r--backends/sdl/sdl_gl.cpp8
-rw-r--r--base/gameDetector.cpp1
-rw-r--r--common/scaler.cpp3831
-rw-r--r--common/scaler.h4
6 files changed, 3839 insertions, 19 deletions
diff --git a/backends/gp32/gp32.cpp b/backends/gp32/gp32.cpp
index d81fbc2b8e..e78f185aa5 100644
--- a/backends/gp32/gp32.cpp
+++ b/backends/gp32/gp32.cpp
@@ -434,11 +434,11 @@ normal_mode:;
/*
// Distinguish 555 and 565 mode
if (sdl_hwscreen->format->Rmask == 0x7C00)
- Init_2xSaI(555);
+ InitScalers(555);
else
- Init_2xSaI(565);
+ InitScalers(565);
*/
- //Init_2xSaI(555); // ph0x fixme?
+ //InitScalers(555); // ph0x fixme?
//ph0x fixme - tmpscreen needed?
// Need some extra bytes around when using 2xSaI
diff --git a/backends/sdl/sdl.cpp b/backends/sdl/sdl.cpp
index daf4a58b0d..25e5aec488 100644
--- a/backends/sdl/sdl.cpp
+++ b/backends/sdl/sdl.cpp
@@ -90,6 +90,10 @@ void OSystem_SDL::load_gfx_mode() {
_scaleFactor = 2;
_scaler_proc = DotMatrix;
break;
+ case GFX_HQ3X:
+ _scaleFactor = 3;
+ _scaler_proc = HQ3x;
+ break;
case GFX_BILINEAR:
case GFX_DOUBLESIZE:
@@ -135,9 +139,9 @@ void OSystem_SDL::load_gfx_mode() {
// Distinguish 555 and 565 mode
if (_hwscreen->format->Rmask == 0x7C00)
- Init_2xSaI(555);
+ InitScalers(555);
else
- Init_2xSaI(565);
+ InitScalers(565);
// Need some extra bytes around when using 2xSaI
uint16 *tmp_screen = (uint16 *)calloc(_tmpScreenWidth * (_screenHeight + 3), sizeof(uint16));
diff --git a/backends/sdl/sdl_gl.cpp b/backends/sdl/sdl_gl.cpp
index 33dbd76dd2..6c1eaed351 100644
--- a/backends/sdl/sdl_gl.cpp
+++ b/backends/sdl/sdl_gl.cpp
@@ -147,6 +147,10 @@ void OSystem_SDL_OpenGL::load_gfx_mode() {
_scaleFactor = 2;
_scaler_proc = DotMatrix;
break;
+ case GFX_HQ3X:
+ _scaleFactor = 3;
+ _scaler_proc = HQ3x;
+ break;
default:
error("unknown gfx mode %d", _mode);
@@ -200,9 +204,9 @@ void OSystem_SDL_OpenGL::load_gfx_mode() {
// Distinguish 555 and 565 mode
if (_hwscreen->format->Rmask == 0x7C00)
- Init_2xSaI(555);
+ InitScalers(555);
else
- Init_2xSaI(565);
+ InitScalers(565);
}
//
diff --git a/base/gameDetector.cpp b/base/gameDetector.cpp
index 1b88b0a37d..0a7e392a60 100644
--- a/base/gameDetector.cpp
+++ b/base/gameDetector.cpp
@@ -115,6 +115,7 @@ static const struct GraphicsMode gfx_modes[] = {
{"advmame3x", "AdvMAME3x", GFX_ADVMAME3X},
{"tv2x", "TV2x", GFX_TV2X},
{"dotmatrix", "DotMatrix", GFX_DOTMATRIX},
+ {"hq3x", "HQ3x", GFX_HQ3X},
{"opengl", "OpenGL", GFX_BILINEAR},
#else
{"flipping", "Page Flipping", GFX_FLIPPING},
diff --git a/common/scaler.cpp b/common/scaler.cpp
index 3198e5bfac..34b35ca614 100644
--- a/common/scaler.cpp
+++ b/common/scaler.cpp
@@ -23,6 +23,8 @@
#include "stdafx.h"
#include "common/scummsys.h"
#include "common/scaler.h"
+#include "common/util.h"
+
// TODO: get rid of the colorMask etc. variables and instead use templates.
// This should give a respectable boost, since variable access (i.e. memory reads)
@@ -55,7 +57,9 @@ static const uint16 dotmatrix_555[16] = {
};
static const uint16 *dotmatrix;
-int Init_2xSaI(uint32 BitFormat) {
+static void InitLUTs(uint32 BitFormat);
+
+void InitScalers(uint32 BitFormat) {
if (BitFormat == 565) {
colorMask = 0xF7DEF7DE;
lowPixelMask = 0x08210821;
@@ -77,10 +81,10 @@ int Init_2xSaI(uint32 BitFormat) {
blueMask = 0x001F;
dotmatrix = dotmatrix_555;
} else {
- return 0;
+ error("Unknwon bit format %d\n", BitFormat);
}
- return 1;
+ InitLUTs(BitFormat);
}
static inline int GetResult(uint32 A, uint32 B, uint32 C, uint32 D) {
@@ -475,10 +479,10 @@ void _2xSaI(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch
void AdvMame2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
int width, int height) {
- unsigned int nextlineSrc = srcPitch / sizeof(uint16);
+ const unsigned int nextlineSrc = srcPitch / sizeof(uint16);
const uint16 *p = (const uint16 *)srcPtr;
- unsigned int nextlineDst = dstPitch / sizeof(uint16);
+ const unsigned int nextlineDst = dstPitch / sizeof(uint16);
uint16 *q = (uint16 *)dstPtr;
uint16 A, B, C;
@@ -511,10 +515,10 @@ void AdvMame2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPi
void AdvMame3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
int width, int height) {
- unsigned int nextlineSrc = srcPitch / sizeof(uint16);
+ const unsigned int nextlineSrc = srcPitch / sizeof(uint16);
const uint16 *p = (const uint16 *)srcPtr;
- unsigned int nextlineDst = dstPitch / sizeof(uint16);
+ const unsigned int nextlineDst = dstPitch / sizeof(uint16);
uint16 *q = (uint16 *)dstPtr;
uint16 A, B, C;
@@ -606,10 +610,10 @@ void Normal3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPit
void TV2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
int width, int height) {
- unsigned int nextlineSrc = srcPitch / sizeof(uint16);
+ const unsigned int nextlineSrc = srcPitch / sizeof(uint16);
const uint16 *p = (const uint16 *)srcPtr;
- unsigned int nextlineDst = dstPitch / sizeof(uint16);
+ const unsigned int nextlineDst = dstPitch / sizeof(uint16);
uint16 *q = (uint16 *)dstPtr;
while(height--) {
@@ -637,10 +641,10 @@ static inline uint16 DOT_16(uint16 c, int j, int i) {
void DotMatrix(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
int width, int height)
{
- unsigned int nextlineSrc = srcPitch / sizeof(uint16);
+ const unsigned int nextlineSrc = srcPitch / sizeof(uint16);
const uint16 *p = (const uint16 *)srcPtr;
- unsigned int nextlineDst = dstPitch / sizeof(uint16);
+ const unsigned int nextlineDst = dstPitch / sizeof(uint16);
uint16 *q = (uint16 *)dstPtr;
for (int j = 0, jj = 0; j < height; ++j, jj += 2) {
@@ -656,6 +660,3811 @@ void DotMatrix(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPi
}
}
+//
+// The HQ3x filter (C++ version) by Maxim Stepin (see http://www.hiend3d.com/hq3x.html).
+// Adapted to 16 bit output and optimized by Max Horn
+//
+static int RGBtoYUV[65536];
+
+#define INTERPOLATE_3_1(x, y) Q_INTERPOLATE(x, x, x, y)
+
+#define INTERPOLATE_2_1_1(x, y, z) Q_INTERPOLATE(x, x, y, z)
+
+static inline uint16 INTERPOLATE_7_1(uint16 w1, uint16 w2) {
+ return ((((w1 & redblueMask) * 7 + (w2 & redblueMask)) >> 3) & redblueMask) |
+ ((((w1 & greenMask) * 7 + (w2 & greenMask)) >> 3) & greenMask);
+}
+
+static inline uint16 INTERPOLATE_2_7_7(uint16 w1, uint16 w2, uint16 w3) {
+ return ((((w1 & redblueMask) * 2 + ((w2 & redblueMask) + (w3 & redblueMask)) * 7) >> 4) & redblueMask) |
+ ((((w1 & greenMask) * 2 + ((w2 & greenMask) + (w3 & greenMask)) * 7) >> 4) & greenMask);
+}
+
+#define INTERPOLATE_1_1(x, y) INTERPOLATE(x, y)
+
+#define PIXEL00_1M *(q) = INTERPOLATE_3_1(w[5], w[1]);
+#define PIXEL00_1U *(q) = INTERPOLATE_3_1(w[5], w[2]);
+#define PIXEL00_1L *(q) = INTERPOLATE_3_1(w[5], w[4]);
+#define PIXEL00_2 *(q) = INTERPOLATE_2_1_1(w[5], w[4], w[2]);
+#define PIXEL00_4 *(q) = INTERPOLATE_2_7_7(w[5], w[4], w[2]);
+#define PIXEL00_5 *(q) = INTERPOLATE_1_1(w[4], w[2]);
+#define PIXEL00_C *(q) = w[5];
+
+#define PIXEL01_1 *(q+1) = INTERPOLATE_3_1(w[5], w[2]);
+#define PIXEL01_3 *(q+1) = INTERPOLATE_7_1(w[5], w[2]);
+#define PIXEL01_6 *(q+1) = INTERPOLATE_3_1(w[2], w[5]);
+#define PIXEL01_C *(q+1) = w[5];
+
+#define PIXEL02_1M *(q+2) = INTERPOLATE_3_1(w[5], w[3]);
+#define PIXEL02_1U *(q+2) = INTERPOLATE_3_1(w[5], w[2]);
+#define PIXEL02_1R *(q+2) = INTERPOLATE_3_1(w[5], w[6]);
+#define PIXEL02_2 *(q+2) = INTERPOLATE_2_1_1(w[5], w[2], w[6]);
+#define PIXEL02_4 *(q+2) = INTERPOLATE_2_7_7(w[5], w[2], w[6]);
+#define PIXEL02_5 *(q+2) = INTERPOLATE_1_1(w[2], w[6]);
+#define PIXEL02_C *(q+2) = w[5];
+
+#define PIXEL10_1 *(q+nextlineDst) = INTERPOLATE_3_1(w[5], w[4]);
+#define PIXEL10_3 *(q+nextlineDst) = INTERPOLATE_7_1(w[5], w[4]);
+#define PIXEL10_6 *(q+nextlineDst) = INTERPOLATE_3_1(w[4], w[5]);
+#define PIXEL10_C *(q+nextlineDst) = w[5];
+
+#define PIXEL11 *(q+1+nextlineDst) = w[5];
+
+#define PIXEL12_1 *(q+2+nextlineDst) = INTERPOLATE_3_1(w[5], w[6]);
+#define PIXEL12_3 *(q+2+nextlineDst) = INTERPOLATE_7_1(w[5], w[6]);
+#define PIXEL12_6 *(q+2+nextlineDst) = INTERPOLATE_3_1(w[6], w[5]);
+#define PIXEL12_C *(q+2+nextlineDst) = w[5];
+
+#define PIXEL20_1M *(q+nextlineDst2) = INTERPOLATE_3_1(w[5], w[7]);
+#define PIXEL20_1D *(q+nextlineDst2) = INTERPOLATE_3_1(w[5], w[8]);
+#define PIXEL20_1L *(q+nextlineDst2) = INTERPOLATE_3_1(w[5], w[4]);
+#define PIXEL20_2 *(q+nextlineDst2) = INTERPOLATE_2_1_1(w[5], w[8], w[4]);
+#define PIXEL20_4 *(q+nextlineDst2) = INTERPOLATE_2_7_7(w[5], w[8], w[4]);
+#define PIXEL20_5 *(q+nextlineDst2) = INTERPOLATE_1_1(w[8], w[4]);
+#define PIXEL20_C *(q+nextlineDst2) = w[5];
+
+#define PIXEL21_1 *(q+1+nextlineDst2) = INTERPOLATE_3_1(w[5], w[8]);
+#define PIXEL21_3 *(q+1+nextlineDst2) = INTERPOLATE_7_1(w[5], w[8]);
+#define PIXEL21_6 *(q+1+nextlineDst2) = INTERPOLATE_3_1(w[8], w[5]);
+#define PIXEL21_C *(q+1+nextlineDst2) = w[5];
+
+#define PIXEL22_1M *(q+2+nextlineDst2) = INTERPOLATE_3_1(w[5], w[9]);
+#define PIXEL22_1D *(q+2+nextlineDst2) = INTERPOLATE_3_1(w[5], w[8]);
+#define PIXEL22_1R *(q+2+nextlineDst2) = INTERPOLATE_3_1(w[5], w[6]);
+#define PIXEL22_2 *(q+2+nextlineDst2) = INTERPOLATE_2_1_1(w[5], w[6], w[8]);
+#define PIXEL22_4 *(q+2+nextlineDst2) = INTERPOLATE_2_7_7(w[5], w[6], w[8]);
+#define PIXEL22_5 *(q+2+nextlineDst2) = INTERPOLATE_1_1(w[6], w[8]);
+#define PIXEL22_C *(q+2+nextlineDst2) = w[5];
+
+static inline bool diffYUV(unsigned int yuv1, unsigned int yuv2)
+{
+ static const int Ymask = 0x00FF0000;
+ static const int Umask = 0x0000FF00;
+ static const int Vmask = 0x000000FF;
+ static const int trY = 0x00300000;
+ static const int trU = 0x00000700;
+ static const int trV = 0x00000006;
+
+ return
+ ( ( abs((yuv1 & Ymask) - (yuv2 & Ymask)) > trY ) ||
+ ( abs((yuv1 & Umask) - (yuv2 & Umask)) > trU ) ||
+ ( abs((yuv1 & Vmask) - (yuv2 & Vmask)) > trV ) );
+}
+
+void HQ3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
+ int width, int height) {
+ int i, k;
+ int w[10];
+ int yuv[10];
+
+ const unsigned int nextlineSrc = srcPitch / sizeof(uint16);
+ const uint16 *p = (const uint16 *)srcPtr;
+
+ const unsigned int nextlineDst = dstPitch / sizeof(uint16);
+ const unsigned int nextlineDst2 = 2 * nextlineDst;
+ uint16 *q = (uint16 *)dstPtr;
+
+
+ // +----+----+----+
+ // | | | |
+ // | w1 | w2 | w3 |
+ // +----+----+----+
+ // | | | |
+ // | w4 | w5 | w6 |
+ // +----+----+----+
+ // | | | |
+ // | w7 | w8 | w9 |
+ // +----+----+----+
+
+ while (height--) {
+ w[2] = *(p - 1 - nextlineSrc);
+ w[5] = *(p - 1);
+ w[8] = *(p - 1 + nextlineSrc);
+
+ w[3] = *(p - nextlineSrc);
+ w[6] = *(p);
+ w[9] = *(p + nextlineSrc);
+
+ for (i=0; i<width; i++)
+ {
+ p++;
+
+ w[1] = w[2];
+ w[4] = w[5];
+ w[7] = w[8];
+
+ w[2] = w[3];
+ w[5] = w[6];
+ w[8] = w[9];
+
+ w[3] = *(p - nextlineSrc);
+ w[6] = *(p);
+ w[9] = *(p + nextlineSrc);
+
+ int pattern = 0;
+ int flag = 1;
+
+ for (k=1; k<=9; k++) {
+ yuv[k] = RGBtoYUV[w[k]];
+ }
+
+ for (k=1; k<=9; k++)
+ {
+ if (k==5) continue;
+
+ if ( w[k] != w[5] )
+ {
+ if (diffYUV(yuv[5], yuv[k]))
+ pattern |= flag;
+ }
+ flag <<= 1;
+ }
+
+ switch (pattern)
+ {
+ case 0:
+ case 1:
+ case 4:
+ case 32:
+ case 128:
+ case 5:
+ case 132:
+ case 160:
+ case 33:
+ case 129:
+ case 36:
+ case 133:
+ case 164:
+ case 161:
+ case 37:
+ case 165:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 2:
+ case 34:
+ case 130:
+ case 162:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 16:
+ case 17:
+ case 48:
+ case 49:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 64:
+ case 65:
+ case 68:
+ case 69:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 8:
+ case 12:
+ case 136:
+ case 140:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 3:
+ case 35:
+ case 131:
+ case 163:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 6:
+ case 38:
+ case 134:
+ case 166:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 20:
+ case 21:
+ case 52:
+ case 53:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 144:
+ case 145:
+ case 176:
+ case 177:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 192:
+ case 193:
+ case 196:
+ case 197:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 96:
+ case 97:
+ case 100:
+ case 101:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 40:
+ case 44:
+ case 168:
+ case 172:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 9:
+ case 13:
+ case 137:
+ case 141:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 18:
+ case 50:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 80:
+ case 81:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 72:
+ case 76:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_1M
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 10:
+ case 138:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 66:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 24:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 7:
+ case 39:
+ case 135:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 148:
+ case 149:
+ case 180:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 224:
+ case 228:
+ case 225:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 41:
+ case 169:
+ case 45:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 22:
+ case 54:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 208:
+ case 209:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 104:
+ case 108:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 11:
+ case 139:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 19:
+ case 51:
+ {
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL00_2
+ PIXEL01_6
+ PIXEL02_5
+ PIXEL12_1
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 146:
+ case 178:
+ {
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL12_C
+ PIXEL22_1D
+ }
+ else
+ {
+ PIXEL01_1
+ PIXEL02_5
+ PIXEL12_6
+ PIXEL22_2
+ }
+ PIXEL00_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_2
+ PIXEL21_1
+ break;
+ }
+ case 84:
+ case 85:
+ {
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL02_1U
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL02_2
+ PIXEL12_6
+ PIXEL21_1
+ PIXEL22_5
+ }
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1M
+ break;
+ }
+ case 112:
+ case 113:
+ {
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_6
+ PIXEL22_5
+ }
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ break;
+ }
+ case 200:
+ case 204:
+ {
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1R
+ }
+ else
+ {
+ PIXEL10_1
+ PIXEL20_5
+ PIXEL21_6
+ PIXEL22_2
+ }
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL11
+ PIXEL12_1
+ break;
+ }
+ case 73:
+ case 77:
+ {
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL00_1U
+ PIXEL10_C
+ PIXEL20_1M
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL00_2
+ PIXEL10_6
+ PIXEL20_5
+ PIXEL21_1
+ }
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL11
+ PIXEL12_1
+ PIXEL22_1M
+ break;
+ }
+ case 42:
+ case 170:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL10_C
+ PIXEL20_1D
+ }
+ else
+ {
+ PIXEL00_5
+ PIXEL01_1
+ PIXEL10_6
+ PIXEL20_2
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_1
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 14:
+ case 142:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_5
+ PIXEL01_6
+ PIXEL02_2
+ PIXEL10_1
+ }
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 67:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 70:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 28:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 152:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 194:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 98:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 56:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 25:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 26:
+ case 31:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL10_3
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL11
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 82:
+ case 214:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 88:
+ case 248:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 74:
+ case 107:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ }
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 27:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 86:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 216:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 106:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 30:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 210:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 120:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 75:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 29:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 198:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 184:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 99:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 57:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 71:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 156:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 226:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 60:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 195:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 102:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 153:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 58:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 83:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 92:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 202:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 78:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 154:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 114:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 89:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 90:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 55:
+ case 23:
+ {
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL00_2
+ PIXEL01_6
+ PIXEL02_5
+ PIXEL12_1
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 182:
+ case 150:
+ {
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ PIXEL22_1D
+ }
+ else
+ {
+ PIXEL01_1
+ PIXEL02_5
+ PIXEL12_6
+ PIXEL22_2
+ }
+ PIXEL00_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_2
+ PIXEL21_1
+ break;
+ }
+ case 213:
+ case 212:
+ {
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL02_1U
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL02_2
+ PIXEL12_6
+ PIXEL21_1
+ PIXEL22_5
+ }
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1M
+ break;
+ }
+ case 241:
+ case 240:
+ {
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_6
+ PIXEL22_5
+ }
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ break;
+ }
+ case 236:
+ case 232:
+ {
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ PIXEL22_1R
+ }
+ else
+ {
+ PIXEL10_1
+ PIXEL20_5
+ PIXEL21_6
+ PIXEL22_2
+ }
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL11
+ PIXEL12_1
+ break;
+ }
+ case 109:
+ case 105:
+ {
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL00_1U
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL00_2
+ PIXEL10_6
+ PIXEL20_5
+ PIXEL21_1
+ }
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL11
+ PIXEL12_1
+ PIXEL22_1M
+ break;
+ }
+ case 171:
+ case 43:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ PIXEL20_1D
+ }
+ else
+ {
+ PIXEL00_5
+ PIXEL01_1
+ PIXEL10_6
+ PIXEL20_2
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_1
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 143:
+ case 15:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_5
+ PIXEL01_6
+ PIXEL02_2
+ PIXEL10_1
+ }
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 124:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 203:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 62:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 211:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 118:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 217:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 110:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 155:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 188:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 185:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 61:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 157:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 103:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 227:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 230:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 199:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 220:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 158:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 234:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1R
+ break;
+ }
+ case 242:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1L
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 59:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 121:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 87:
+ {
+ PIXEL00_1L
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1M
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 79:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ PIXEL02_1R
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 122:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 94:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_C
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 218:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_C
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 91:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 229:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 167:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 173:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 181:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 186:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 115:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 93:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 206:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 205:
+ case 201:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_1M
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 174:
+ case 46:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_1M
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 179:
+ case 147:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_1M
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 117:
+ case 116:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_1M
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 189:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 231:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 126:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 219:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ PIXEL10_3
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 125:
+ {
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL00_1U
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL00_2
+ PIXEL10_6
+ PIXEL20_5
+ PIXEL21_1
+ }
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL11
+ PIXEL12_C
+ PIXEL22_1M
+ break;
+ }
+ case 221:
+ {
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL02_1U
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL02_2
+ PIXEL12_6
+ PIXEL21_1
+ PIXEL22_5
+ }
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL10_C
+ PIXEL11
+ PIXEL20_1M
+ break;
+ }
+ case 207:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_5
+ PIXEL01_6
+ PIXEL02_2
+ PIXEL10_1
+ }
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 238:
+ {
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ PIXEL22_1R
+ }
+ else
+ {
+ PIXEL10_1
+ PIXEL20_5
+ PIXEL21_6
+ PIXEL22_2
+ }
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL11
+ PIXEL12_1
+ break;
+ }
+ case 190:
+ {
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ PIXEL22_1D
+ }
+ else
+ {
+ PIXEL01_1
+ PIXEL02_5
+ PIXEL12_6
+ PIXEL22_2
+ }
+ PIXEL00_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL20_1D
+ PIXEL21_1
+ break;
+ }
+ case 187:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ PIXEL20_1D
+ }
+ else
+ {
+ PIXEL00_5
+ PIXEL01_1
+ PIXEL10_6
+ PIXEL20_2
+ }
+ PIXEL02_1M
+ PIXEL11
+ PIXEL12_C
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 243:
+ {
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_1
+ PIXEL20_2
+ PIXEL21_6
+ PIXEL22_5
+ }
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL10_1
+ PIXEL11
+ break;
+ }
+ case 119:
+ {
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL00_2
+ PIXEL01_6
+ PIXEL02_5
+ PIXEL12_1
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL20_1L
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 237:
+ case 233:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_2
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 175:
+ case 47:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_2
+ break;
+ }
+ case 183:
+ case 151:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_2
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 245:
+ case 244:
+ {
+ PIXEL00_2
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 250:
+ {
+ PIXEL00_1M
+ PIXEL01_C
+ PIXEL02_1M
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 123:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ }
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 95:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL10_3
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL11
+ PIXEL20_1M
+ PIXEL21_C
+ PIXEL22_1M
+ break;
+ }
+ case 222:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 252:
+ {
+ PIXEL00_1M
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 249:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 235:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ }
+ PIXEL02_1M
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 111:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 63:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1M
+ break;
+ }
+ case 159:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL10_3
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 215:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 246:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 254:
+ {
+ PIXEL00_1M
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_4
+ }
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_4
+ }
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL21_3
+ PIXEL22_2
+ }
+ break;
+ }
+ case 253:
+ {
+ PIXEL00_1U
+ PIXEL01_1
+ PIXEL02_1U
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 251:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL01_3
+ }
+ PIXEL02_1M
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL10_C
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL10_3
+ PIXEL20_2
+ PIXEL21_3
+ }
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL12_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL12_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 239:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ PIXEL02_1R
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_1
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ PIXEL22_1R
+ break;
+ }
+ case 127:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL01_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_2
+ PIXEL01_3
+ PIXEL10_3
+ }
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL02_4
+ PIXEL12_3
+ }
+ PIXEL11
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ PIXEL21_C
+ }
+ else
+ {
+ PIXEL20_4
+ PIXEL21_3
+ }
+ PIXEL22_1M
+ break;
+ }
+ case 191:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1D
+ PIXEL21_1
+ PIXEL22_1D
+ break;
+ }
+ case 223:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ PIXEL10_C
+ }
+ else
+ {
+ PIXEL00_4
+ PIXEL10_3
+ }
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL01_C
+ PIXEL02_C
+ PIXEL12_C
+ }
+ else
+ {
+ PIXEL01_3
+ PIXEL02_2
+ PIXEL12_3
+ }
+ PIXEL11
+ PIXEL20_1M
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL21_C
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL21_3
+ PIXEL22_4
+ }
+ break;
+ }
+ case 247:
+ {
+ PIXEL00_1L
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_1
+ PIXEL11
+ PIXEL12_C
+ PIXEL20_1L
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ case 255:
+ {
+ if (diffYUV(yuv[4], yuv[2]))
+ {
+ PIXEL00_C
+ }
+ else
+ {
+ PIXEL00_2
+ }
+ PIXEL01_C
+ if (diffYUV(yuv[2], yuv[6]))
+ {
+ PIXEL02_C
+ }
+ else
+ {
+ PIXEL02_2
+ }
+ PIXEL10_C
+ PIXEL11
+ PIXEL12_C
+ if (diffYUV(yuv[8], yuv[4]))
+ {
+ PIXEL20_C
+ }
+ else
+ {
+ PIXEL20_2
+ }
+ PIXEL21_C
+ if (diffYUV(yuv[6], yuv[8]))
+ {
+ PIXEL22_C
+ }
+ else
+ {
+ PIXEL22_2
+ }
+ break;
+ }
+ }
+ q += 3;
+ }
+ p += nextlineSrc - width;
+ q += (nextlineDst - width) * 3;
+ }
+}
+
+void InitLUTs(uint32 BitFormat)
+{
+ int i, j, k, r, g, b, Y, u, v;
+
+ for (i=0; i<32; i++) {
+ r = i << 3;
+ for (j=0; j<64; j++) {
+ g = j << 2;
+ for (k=0; k<32; k++) {
+ b = k << 3;
+ Y = (r + g + b) >> 2;
+ u = 128 + ((r - b) >> 2);
+ v = 128 + ((-r + 2*g -b)>>3);
+ RGBtoYUV[ (i << 11) + (j << 5) + k ] = (Y<<16) + (u<<8) + v;
+ }
+ }
+ }
+}
+
+
+#pragma mark -
+
+
#define kVeryFastAndUglyAspectMode 0 // No interpolation at all, but super-fast
#define kFastAndNiceAspectMode 1 // Quite good quality with good speed
#define kSlowAndPerfectAspectMode 2 // Accurate but slow code
diff --git a/common/scaler.h b/common/scaler.h
index 50cf196582..73ab6662ed 100644
--- a/common/scaler.h
+++ b/common/scaler.h
@@ -21,7 +21,7 @@
#ifndef COMMON_SCALER_H
#define COMMON_SCALER_H
-extern int Init_2xSaI (uint32 BitFormat);
+extern void InitScalers(uint32 BitFormat);
typedef void ScalerProc(const uint8 *srcPtr, uint32 srcPitch,
uint8 *dstPtr, uint32 dstPitch, int width, int height);
@@ -40,6 +40,7 @@ DECLARE_SCALER(Normal2x);
DECLARE_SCALER(Normal3x);
DECLARE_SCALER(TV2x);
DECLARE_SCALER(DotMatrix);
+DECLARE_SCALER(HQ3x);
FORCEINLINE int real2Aspect(int y) {
return y + (y + 1) / 5;
@@ -64,6 +65,7 @@ enum {
GFX_ADVMAME3X = 7,
GFX_TV2X = 8,
GFX_DOTMATRIX = 9,
+ GFX_HQ3X = 10,
GFX_BILINEAR = 12, // OpenGL backend