From f4e0331f2d26d73172c48afedcd037ccbb03df8b Mon Sep 17 00:00:00 2001 From: Eric Culp Date: Thu, 28 Jun 2012 01:22:04 -0400 Subject: [PATCH] GRAPHICS: Run edge.cpp through astyle to conform to style guidelines --- graphics/scaler/edge.cpp | 5219 ++++++++++++++++++-------------------- 1 file changed, 2480 insertions(+), 2739 deletions(-) diff --git a/graphics/scaler/edge.cpp b/graphics/scaler/edge.cpp index d116ff917c4..a4f5cb74ad2 100644 --- a/graphics/scaler/edge.cpp +++ b/graphics/scaler/edge.cpp @@ -105,7 +105,7 @@ * refreshes, etc.. Also good for seeing if the unchanged pixel detection is * working correctly or not :) */ -#define DEBUG_REFRESH_RANDOM_XOR 0 /* debug redraws */ +#define DEBUG_REFRESH_RANDOM_XOR 0 /* debug redraws */ /* Use with DEBUG_REFRESH_RANDOM_XOR. Randomize the borders of the drawing * area, whether they are unchanged or not. Useful for visualizing the @@ -114,19 +114,19 @@ * or color cycling, or anything that would cause a dirty rect or require a * redraw.... */ -#define DEBUG_DRAW_REFRESH_BORDERS 0 /* more redraw debug */ +#define DEBUG_DRAW_REFRESH_BORDERS 0 /* more redraw debug */ -#define INCREASE_WIN32_PRIORITY 0 /* 1 for slow CPUs */ -#define PARANOID_KNIGHTS 1 /* avoid artifacts */ -#define PARANOID_ARROWS 1 /* avoid artifacts */ -#define HANDLE_TRANSPARENT_OVERLAYS 1 /* as it says */ +#define INCREASE_WIN32_PRIORITY 0 /* 1 for slow CPUs */ +#define PARANOID_KNIGHTS 1 /* avoid artifacts */ +#define PARANOID_ARROWS 1 /* avoid artifacts */ +#define HANDLE_TRANSPARENT_OVERLAYS 1 /* as it says */ -#define SIN45 0.7071067811865 /* sin of 45 degrees */ -#define GREY_SHIFT 12 /* bit shift for greyscale precision */ -#define RGB_SHIFT 13 /* bit shift for RGB precision */ +#define SIN45 0.7071067811865 /* sin of 45 degrees */ +#define GREY_SHIFT 12 /* bit shift for greyscale precision */ +#define RGB_SHIFT 13 /* bit shift for RGB precision */ -const int16 one_sqrt2 = (int16) (((int16)1<(a,b) : interpolate32_1_1(a,b)) @@ -175,12 +175,11 @@ uint32 seed0, seed1, seed2, seed3; * 5 6 13 >> >> << * 5 6 13 << << >> * 6 5 13 >> >> << - * 6 5 13 << << >> seems to be slightly "better" than the others? + * 6 5 13 << << >> seems to be slightly "better" than the others? * * all others, including the "favorite" (13, 17, 5), fail some Monkey tests */ -uint32 xorshift_32(void) -{ +uint32 xorshift_32(void) { seed0 ^= seed0 << 6; seed0 ^= seed0 << 5; seed0 ^= seed0 >> 13; @@ -190,12 +189,11 @@ uint32 xorshift_32(void) /* period 2^128 - 1 */ /* None of the other published 2^128-1 xorshift RNGs passed OPERM5 */ -uint32 xorshift_128(void) -{ +uint32 xorshift_128(void) { uint32 temp; temp = (seed0 ^ (seed0 << 20)) ^ (seed1 ^ (seed1 >> 11)) ^ - (seed2 ^ (seed2 << 27)) ^ (seed3 ^ (seed3 >> 6)); + (seed2 ^ (seed2 << 27)) ^ (seed3 ^ (seed3 >> 6)); seed0 = seed1; seed1 = seed2; seed2 = seed3; @@ -205,12 +203,11 @@ uint32 xorshift_128(void) } /* return a random fraction over the range [0, 1) */ -double dxorshift_128(void) -{ +double dxorshift_128(void) { uint32 temp; temp = (seed0 ^ (seed0 << 20)) ^ (seed1 ^ (seed1 >> 11)) ^ - (seed2 ^ (seed2 << 27)) ^ (seed3 ^ (seed3 >> 6)); + (seed2 ^ (seed2 << 27)) ^ (seed3 ^ (seed3 >> 6)); seed0 = seed1; seed1 = seed2; seed2 = seed3; @@ -219,8 +216,7 @@ double dxorshift_128(void) return (temp / 4294967296.0); } -void initialize_xorshift_128(uint32 seed) -{ +void initialize_xorshift_128(uint32 seed) { /* seed0 needs to be initialized prior to calling xorshift_32() */ seed0 = seed; @@ -241,7 +237,7 @@ void initialize_xorshift_128(uint32 seed) * * |x| <= 1: * - * x + A*x3 A = 0.43157974, B = 0.76443945, C = 0.05831938 + * x + A*x3 A = 0.43157974, B = 0.76443945, C = 0.05831938 * --------------- * 1 + B*x2 + C*x4 * @@ -251,41 +247,39 @@ void initialize_xorshift_128(uint32 seed) * * |x| <= 1: * - * x * (E + F*x2) E = 1/C, F = A/C - * ---------------- G = (B/C + sqrt(B2/C2 - 4/C)) / 2 - * (G + x2)(H + x2) H = (B/C - sqrt(B2/C2 - 4/C)) / 2 + * x * (E + F*x2) E = 1/C, F = A/C + * ---------------- G = (B/C + sqrt(B2/C2 - 4/C)) / 2 + * (G + x2)(H + x2) H = (B/C - sqrt(B2/C2 - 4/C)) / 2 * - * E = 17.14695869537, F = 7.400279975541 - * G = 11.63393762882, H = 1.473874045440 + * E = 17.14695869537, F = 7.400279975541 + * G = 11.63393762882, H = 1.473874045440 * * |x| > 1: pi/2 - * - * x * (I + x2) I = A - * ---------------- J = (B + sqrt(B2 - 4C)) / 2 - * (J + x2)(K + x2) K = (B - sqrt(B2 - 4C)) / 2 + * x * (I + x2) I = A + * ---------------- J = (B + sqrt(B2 - 4C)) / 2 + * (J + x2)(K + x2) K = (B - sqrt(B2 - 4C)) / 2 * - * I = 0.43157974 - * J = 0.6784840295980, K = 0.0859554204018 + * I = 0.43157974 + * J = 0.6784840295980, K = 0.0859554204018 * */ -double fast_atan(double x0) -{ +double fast_atan(double x0) { double x2; double x; x = fabs(x0); - x2 = x*x; - if (x > 1) - { + x2 = x * x; + if (x > 1) { x2 = 1.570796326795 - - x * (0.43157974 + x2) / - ((0.6784840295980 + x2) * (0.0859554204018 + x2)); + x * (0.43157974 + x2) / + ((0.6784840295980 + x2) * (0.0859554204018 + x2)); if (x0 < 0) return -x2; return x2; } return x0 * (17.14695869537 + 7.400279975541 * x2) / - ((11.63393762882 + x2) * (1.473874045440 + x2)); + ((11.63393762882 + x2) * (1.473874045440 + x2)); } @@ -296,32 +290,30 @@ double fast_atan(double x0) * * No matter how you do it, mapping 3 bitplanes into a single greyscale * bitplane will always result in colors which are very different mapping to - * the same greyscale value. Inevitably, these pixels will appear next to - * each other at some point in some image, and edge detection on a single + * the same greyscale value. Inevitably, these pixels will appear next to + * each other at some point in some image, and edge detection on a single * bitplane will behave quite strangely due to them having the same or nearly - * the same greyscale values. Calculating distances between pixels using all - * three RGB bitplanes is *way* too time consuming, so single bitplane - * edge detection is used for speed's sake. In order to try to avoid the - * color mapping problems of using a single bitplane, 3 different greyscale - * mappings are tested for each 3x3 grid, and the one with the most "signal" - * (sum of squares difference from center pixel) is chosen. This usually + * the same greyscale values. Calculating distances between pixels using all + * three RGB bitplanes is *way* too time consuming, so single bitplane + * edge detection is used for speed's sake. In order to try to avoid the + * color mapping problems of using a single bitplane, 3 different greyscale + * mappings are tested for each 3x3 grid, and the one with the most "signal" + * (sum of squares difference from center pixel) is chosen. This usually * results in useable contrast within the 3x3 grid. * - * This results in a whopping 25% increase in overall runtime of the filter + * This results in a whopping 25% increase in overall runtime of the filter * over simply using luma or some other single greyscale bitplane, but it - * does greatly reduce the amount of errors due to greyscale mapping - * problems. I think this is the best compromise between accuracy and + * does greatly reduce the amount of errors due to greyscale mapping + * problems. I think this is the best compromise between accuracy and * speed, and is still a lot faster than edge detecting over all three RGB * bitplanes. The increase in image quality is well worth the speed hit. * */ -int16 * EdgePlugin::chooseGreyscale(uint16 *pixels) -{ +int16 *EdgePlugin::chooseGreyscale(uint16 *pixels) { int i, j; int32 scores[3]; - for (i = 0; i < 3; i++) - { + for (i = 0; i < 3; i++) { int16 *diff_ptr; int16 *bptr; uint16 *pptr; @@ -364,8 +356,7 @@ int16 * EdgePlugin::chooseGreyscale(uint16 *pixels) /* choose greyscale with highest score, ties decided in GRB order */ - if (scores[1] >= scores[0] && scores[1] >= scores[2]) - { + if (scores[1] >= scores[0] && scores[1] >= scores[2]) { if (!scores[1]) return NULL; _chosenGreyscale = _greyscaleTable[1]; @@ -373,8 +364,7 @@ int16 * EdgePlugin::chooseGreyscale(uint16 *pixels) return _greyscaleDiffs[1]; } - if (scores[0] >= scores[1] && scores[0] >= scores[2]) - { + if (scores[0] >= scores[1] && scores[0] >= scores[2]) { if (!scores[0]) return NULL; _chosenGreyscale = _greyscaleTable[0]; @@ -392,15 +382,15 @@ int16 * EdgePlugin::chooseGreyscale(uint16 *pixels) /* - * Calculate the distance between pixels in RGB space. Greyscale isn't - * accurate enough for choosing nearest-neighbors :( Luma-like weighting - * of the individual bitplane distances prior to squaring gives the most + * Calculate the distance between pixels in RGB space. Greyscale isn't + * accurate enough for choosing nearest-neighbors :( Luma-like weighting + * of the individual bitplane distances prior to squaring gives the most * useful results. * */ int32 EdgePlugin::calcPixelDiffNosqrt(uint16 pixel1, uint16 pixel2) { -#if 1 /* distance between pixels, weighted by roughly luma proportions */ +#if 1 /* distance between pixels, weighted by roughly luma proportions */ int32 sum = 0; int16 *rgb_ptr1 = _rgbTable[pixel1]; int16 *rgb_ptr2 = _rgbTable[pixel2]; @@ -416,27 +406,22 @@ int32 EdgePlugin::calcPixelDiffNosqrt(uint16 pixel1, uint16 pixel2) { return sum; #endif -#if 0 /* distance between pixels, weighted by chosen greyscale proportions */ +#if 0 /* distance between pixels, weighted by chosen greyscale proportions */ int32 sum = 0; int16 *rgb_ptr1 = _rgbTable[pixel1]; int16 *rgb_ptr2 = _rgbTable[pixel2]; int16 diff; int r_shift, g_shift, b_shift; - if (_chosenGreyscale == _greyscaleTable[1]) - { + if (_chosenGreyscale == _greyscaleTable[1]) { r_shift = 1; g_shift = 2; b_shift = 0; - } - else if (_chosenGreyscale == _greyscaleTable[0]) - { + } else if (_chosenGreyscale == _greyscaleTable[0]) { r_shift = 2; g_shift = 1; b_shift = 0; - } - else - { + } else { r_shift = 0; g_shift = 1; b_shift = 2; @@ -452,7 +437,7 @@ int32 EdgePlugin::calcPixelDiffNosqrt(uint16 pixel1, uint16 pixel2) { return sum; #endif -#if 0 /* distance between pixels, unweighted */ +#if 0 /* distance between pixels, unweighted */ int32 sum = 0; int16 *rgb_ptr1 = _rgbTable[pixel1]; int16 *rgb_ptr2 = _rgbTable[pixel2]; @@ -468,7 +453,7 @@ int32 EdgePlugin::calcPixelDiffNosqrt(uint16 pixel1, uint16 pixel2) { return sum; #endif -#if 0 /* use the greyscale directly */ +#if 0 /* use the greyscale directly */ return labs(_chosenGreyscale[pixel1] - _chosenGreyscale[pixel2]); #endif } @@ -479,7 +464,7 @@ int32 EdgePlugin::calcPixelDiffNosqrt(uint16 pixel1, uint16 pixel2) { * Create vectors of all delta grey values from center pixel, with magnitudes * ranging from [1.0, 0.0] (zero difference, maximum difference). Find * the two principle axes of the grid by calculating the eigenvalues and - * eigenvectors of the inertia tensor. Use the eigenvectors to calculate the + * eigenvectors of the inertia tensor. Use the eigenvectors to calculate the * edge direction. In other words, find the angle of the line that optimally * passes through the 3x3 pattern of pixels. * @@ -490,10 +475,9 @@ int32 EdgePlugin::calcPixelDiffNosqrt(uint16 pixel1, uint16 pixel2) { * */ int EdgePlugin::findPrincipleAxis(uint16 *pixels, int16 *diffs, int16 *bplane, - int8 *sim, - int32 *return_angle) { - struct xy_point - { + int8 *sim, + int32 *return_angle) { + struct xy_point { int16 x, y; }; @@ -528,58 +512,56 @@ int EdgePlugin::findPrincipleAxis(uint16 *pixels, int16 *diffs, int16 *bplane, /* if (max_diff == 0) return '0'; */ /* normalize the differences */ - scale = (1L<<(GREY_SHIFT+GREY_SHIFT)) / max_diff; + scale = (1L << (GREY_SHIFT + GREY_SHIFT)) / max_diff; for (i = 0; i < 8; i++) - diffs[i] = (diffs[i] * scale + ((int16)1<<(GREY_SHIFT-1))) >> GREY_SHIFT; + diffs[i] = (diffs[i] * scale + ((int16)1 << (GREY_SHIFT - 1))) >> GREY_SHIFT; /* - * Some pixel patterns need to NOT be reversed, since the pixels of + * Some pixel patterns need to NOT be reversed, since the pixels of * interest that form the edge to be detected are off-center. - * + * */ /* calculate yes/no similarity matrix to center pixel */ /* store the number of similar pixels */ - cutoff = ((int16)1<<(GREY_SHIFT-3)); + cutoff = ((int16)1 << (GREY_SHIFT - 3)); for (i = 0, _simSum = 0; i < 8; i++) _simSum += (sim[i] = (diffs[i] < cutoff)); /* don't reverse pattern for off-center knights and sharp corners */ - if (_simSum >= 3 && _simSum <= 5) - { + if (_simSum >= 3 && _simSum <= 5) { /* |. */ /* '- */ if (sim[1] && sim[4] && sim[5] && !sim[3] && !sim[6] && - (!sim[0] ^ !sim[7])) + (!sim[0] ^ !sim[7])) reverse_flag = 0; /* -. */ /* '| */ else if (sim[2] && sim[3] && sim[6] && !sim[1] && !sim[4] && - (!sim[0] ^ !sim[7])) + (!sim[0] ^ !sim[7])) reverse_flag = 0; /* .- */ /* |' */ else if (sim[4] && sim[6] && sim[0] && !sim[1] && !sim[3] && - (!sim[2] ^ !sim[5])) + (!sim[2] ^ !sim[5])) reverse_flag = 0; /* .| */ /* -' */ else if (sim[1] && sim[3] && sim[7] && !sim[4] && !sim[6] && - (!sim[2] ^ !sim[5])) + (!sim[2] ^ !sim[5])) reverse_flag = 0; /* 90 degree corners */ - else if (_simSum == 3) - { + else if (_simSum == 3) { if ((sim[0] && sim[1] && sim[3]) || - (sim[1] && sim[2] && sim[4]) || - (sim[3] && sim[5] && sim[6]) || - (sim[4] && sim[6] && sim[7])) + (sim[1] && sim[2] && sim[4]) || + (sim[3] && sim[5] && sim[6]) || + (sim[4] && sim[6] && sim[7])) reverse_flag = 0; } } /* redo similarity array, less stringent for later checks */ - cutoff = ((int16)1<<(GREY_SHIFT-1)); + cutoff = ((int16)1 << (GREY_SHIFT - 1)); for (i = 0, _simSum = 0; i < 8; i++) _simSum += (sim[i] = (diffs[i] < cutoff)); @@ -587,23 +569,22 @@ int EdgePlugin::findPrincipleAxis(uint16 *pixels, int16 *diffs, int16 *bplane, if (_simSum == 0) return '0'; /* reverse the difference array, so most similar is closest to 1 */ - if (reverse_flag) - { - diffs[0] = ((int16)1<> GREY_SHIFT; - diffs[2] = (diffs[2] * one_sqrt2 + ((int16)1<<(GREY_SHIFT-1))) >> GREY_SHIFT; - diffs[5] = (diffs[5] * one_sqrt2 + ((int16)1<<(GREY_SHIFT-1))) >> GREY_SHIFT; - diffs[7] = (diffs[7] * one_sqrt2 + ((int16)1<<(GREY_SHIFT-1))) >> GREY_SHIFT; + diffs[0] = (diffs[0] * one_sqrt2 + ((int16)1 << (GREY_SHIFT - 1))) >> GREY_SHIFT; + diffs[2] = (diffs[2] * one_sqrt2 + ((int16)1 << (GREY_SHIFT - 1))) >> GREY_SHIFT; + diffs[5] = (diffs[5] * one_sqrt2 + ((int16)1 << (GREY_SHIFT - 1))) >> GREY_SHIFT; + diffs[7] = (diffs[7] * one_sqrt2 + ((int16)1 << (GREY_SHIFT - 1))) >> GREY_SHIFT; /* create the vectors, centered at 0,0 */ xy_points[0].x = -diffs[0]; @@ -624,8 +605,7 @@ int EdgePlugin::findPrincipleAxis(uint16 *pixels, int16 *diffs, int16 *bplane, xy_points[8].y = -diffs[7]; /* calculate the centroid of the points */ - for (i = 0; i < 9; i++) - { + for (i = 0; i < 9; i++) { centx += xy_points[i].x; centy += xy_points[i].y; } @@ -633,15 +613,13 @@ int EdgePlugin::findPrincipleAxis(uint16 *pixels, int16 *diffs, int16 *bplane, centy /= 9; /* translate centroid to 0,0 */ - for (i = 0; i < 9; i++) - { + for (i = 0; i < 9; i++) { xy_points[i].x -= centx; xy_points[i].y -= centy; } /* fill inertia tensor 3x3 matrix */ - for (i = 0; i < 9; i++) - { + for (i = 0; i < 9; i++) { half_matrix[0] += xy_points[i].x * xy_points[i].x; half_matrix[1] += xy_points[i].y * xy_points[i].x; half_matrix[2] += xy_points[i].y * xy_points[i].y; @@ -650,13 +628,13 @@ int EdgePlugin::findPrincipleAxis(uint16 *pixels, int16 *diffs, int16 *bplane, /* calculate eigenvalues */ a = half_matrix[0] - half_matrix[2]; b = half_matrix[1] << 1; - b = sqrt(b*b + a*a); + b = sqrt(b * b + a * a); a = half_matrix[0] + half_matrix[2]; eigenval1 = (a + b); eigenval2 = (a - b); - /* find largest eigenvalue */ - if (eigenval1 == eigenval2) /* X and + shapes */ + /* find largest eigenvalue */ + if (eigenval1 == eigenval2) /* X and + shapes */ return '*'; else if (eigenval1 > eigenval2) best_val = eigenval1; @@ -676,33 +654,24 @@ int EdgePlugin::findPrincipleAxis(uint16 *pixels, int16 *diffs, int16 *bplane, c = best_val + half_matrix[1]; a = c - half_matrix[0]; b = c - half_matrix[2]; - if (b) - { + if (b) { x = 1.0; ratio = y = a / b; - } - else if (a) - { + } else if (a) { y = 1.0; x = b / a; ratio = a / b; - } - else if (a == b) - { + } else if (a == b) { *return_angle = 13500; return '\\'; - } - else + } else return '*'; /* calculate angle in degrees * 100 */ - if (x) - { + if (x) { angle = (int32) floor(5729.577951307 * fast_atan(ratio) + 0.5); if (x < 0.0) angle += 18000; - } - else - { + } else { if (y > 0.0) angle = 9000; else if (y < 0.0) angle = -9000; else return '0'; @@ -735,106 +704,102 @@ int EdgePlugin::checkArrows(int best_dir, uint16 *pixels, int8 *sim, int half_fl uint16 center = pixels[4]; if (center == pixels[0] && center == pixels[2] && - center == pixels[6] && center == pixels[8]) - { - switch(best_dir) - { - case 5: - if (center != pixels[5]) /* < */ - return 0; - break; - case 6: - if (center != pixels[3]) /* > */ - return 0; - break; - case 7: - if (center != pixels[7]) /* ^ */ - return 0; - break; - case 8: - if (center != pixels[1]) /* v */ - return 0; - break; + center == pixels[6] && center == pixels[8]) { + switch (best_dir) { + case 5: + if (center != pixels[5]) /* < */ + return 0; + break; + case 6: + if (center != pixels[3]) /* > */ + return 0; + break; + case 7: + if (center != pixels[7]) /* ^ */ + return 0; + break; + case 8: + if (center != pixels[1]) /* v */ + return 0; + break; } } - switch(best_dir) - { - case 5: /* < */ - if (center == pixels[2] && center == pixels[8] && - pixels[1] == pixels[5] && pixels[5] == pixels[7] && - (((center == pixels[0]) ^ (center == pixels[6])) || - (center == pixels[0] && center == pixels[6] && - pixels[1] != pixels[3]))) - return 0; - break; + switch (best_dir) { + case 5: /* < */ + if (center == pixels[2] && center == pixels[8] && + pixels[1] == pixels[5] && pixels[5] == pixels[7] && + (((center == pixels[0]) ^ (center == pixels[6])) || + (center == pixels[0] && center == pixels[6] && + pixels[1] != pixels[3]))) + return 0; + break; - case 6: /* > */ - if (center == pixels[0] && center == pixels[6] && - pixels[1] == pixels[3] && pixels[3] == pixels[7] && - (((center == pixels[2]) ^ (center == pixels[8])) || - (center == pixels[2] && center == pixels[8] && - pixels[1] != pixels[5]))) - return 0; - break; + case 6: /* > */ + if (center == pixels[0] && center == pixels[6] && + pixels[1] == pixels[3] && pixels[3] == pixels[7] && + (((center == pixels[2]) ^ (center == pixels[8])) || + (center == pixels[2] && center == pixels[8] && + pixels[1] != pixels[5]))) + return 0; + break; - case 7: /* ^ */ - if (center == pixels[6] && center == pixels[8] && - pixels[3] == pixels[7] && pixels[7] == pixels[5] && - (((center == pixels[0]) ^ (center == pixels[2])) || - (center == pixels[0] && center == pixels[2] && - pixels[3] != pixels[1]))) - return 0; - break; + case 7: /* ^ */ + if (center == pixels[6] && center == pixels[8] && + pixels[3] == pixels[7] && pixels[7] == pixels[5] && + (((center == pixels[0]) ^ (center == pixels[2])) || + (center == pixels[0] && center == pixels[2] && + pixels[3] != pixels[1]))) + return 0; + break; - case 8: /* v */ - if (center == pixels[0] && center == pixels[2] && - pixels[1] == pixels[3] && pixels[1] == pixels[5] && - (((center == pixels[6]) ^ (center == pixels[8])) || - (center == pixels[6] && center == pixels[8] && - pixels[3] != pixels[7]))) - return 0; - break; + case 8: /* v */ + if (center == pixels[0] && center == pixels[2] && + pixels[1] == pixels[3] && pixels[1] == pixels[5] && + (((center == pixels[6]) ^ (center == pixels[8])) || + (center == pixels[6] && center == pixels[8] && + pixels[3] != pixels[7]))) + return 0; + break; } - switch(best_dir) - { - case 5: - if (sim[0] == sim[5] && - sim[1] == sim[3] && - sim[3] == sim[6] && - ((sim[2] && sim[7]) || - (half_flag && _simSum == 2 && sim[4] && - (sim[2] || sim[7])))) /* < */ - return 1; - break; - case 6: - if (sim[2] == sim[7] && - sim[1] == sim[4] && - sim[4] == sim[6] && - ((sim[0] && sim[5]) || - (half_flag && _simSum == 2 && sim[3] && - (sim[0] || sim[5])))) /* > */ - return 1; - break; - case 7: - if (sim[0] == sim[2] && - sim[1] == sim[3] && - sim[3] == sim[4] && - ((sim[5] && sim[7]) || - (half_flag && _simSum == 2 && sim[6] && - (sim[5] || sim[7])))) /* ^ */ - return 1; - break; - case 8: - if (sim[5] == sim[7] && - sim[3] == sim[6] && - sim[4] == sim[6] && - ((sim[0] && sim[2]) || - (half_flag && _simSum == 2 && sim[1] && - (sim[0] || sim[2])))) /* v */ - return 1; - break; + switch (best_dir) { + case 5: + if (sim[0] == sim[5] && + sim[1] == sim[3] && + sim[3] == sim[6] && + ((sim[2] && sim[7]) || + (half_flag && _simSum == 2 && sim[4] && + (sim[2] || sim[7])))) /* < */ + return 1; + break; + case 6: + if (sim[2] == sim[7] && + sim[1] == sim[4] && + sim[4] == sim[6] && + ((sim[0] && sim[5]) || + (half_flag && _simSum == 2 && sim[3] && + (sim[0] || sim[5])))) /* > */ + return 1; + break; + case 7: + if (sim[0] == sim[2] && + sim[1] == sim[3] && + sim[3] == sim[4] && + ((sim[5] && sim[7]) || + (half_flag && _simSum == 2 && sim[6] && + (sim[5] || sim[7])))) /* ^ */ + return 1; + break; + case 8: + if (sim[5] == sim[7] && + sim[3] == sim[6] && + sim[4] == sim[6] && + ((sim[0] && sim[2]) || + (half_flag && _simSum == 2 && sim[1] && + (sim[0] || sim[2])))) /* v */ + return 1; + break; } return 0; @@ -843,15 +808,15 @@ int EdgePlugin::checkArrows(int best_dir, uint16 *pixels, int8 *sim, int half_fl /* - * Take original direction, refine it by testing different pixel difference + * Take original direction, refine it by testing different pixel difference * patterns based on the initial gross edge direction. * - * The angle value is not currently used, but may be useful for future + * The angle value is not currently used, but may be useful for future * refinement algorithms. * */ int EdgePlugin::refineDirection(char edge_type, uint16 *pixels, int16 *bptr, - int8 *sim, double angle) { + int8 *sim, double angle) { int32 sums_dir[9] = { 0 }; int32 sum; int32 best_sum; @@ -870,867 +835,820 @@ int EdgePlugin::refineDirection(char edge_type, uint16 *pixels, int16 *bptr, * */ - switch(edge_type) - { - case '|': - diff_array[0] = labs(bptr[4] - bptr[1]); - diff_array[1] = labs(bptr[4] - bptr[7]); - diff_array[2] = labs(bptr[3] - bptr[0]); - diff_array[3] = labs(bptr[3] - bptr[6]); - diff_array[4] = labs(bptr[5] - bptr[2]); - diff_array[5] = labs(bptr[5] - bptr[8]); - diff_array[6] = labs(bptr[4] - bptr[2]); - diff_array[7] = labs(bptr[4] - bptr[8]); - diff_array[8] = labs(bptr[3] - bptr[1]); - diff_array[9] = labs(bptr[3] - bptr[7]); - diff_array[10] = labs(bptr[4] - bptr[0]); - diff_array[11] = labs(bptr[4] - bptr[6]); - diff_array[12] = labs(bptr[5] - bptr[1]); - diff_array[13] = labs(bptr[5] - bptr[7]); - diff_array[14] = labs(bptr[0] - bptr[6]); - diff_array[15] = labs(bptr[2] - bptr[8]); - diff_array[16] = labs(bptr[1] - bptr[7]); - diff_array[17] = labs(bptr[0] - bptr[1]); - diff_array[18] = labs(bptr[2] - bptr[1]); - diff_array[19] = labs(bptr[0] - bptr[2]); - diff_array[20] = labs(bptr[3] - bptr[5]); - diff_array[21] = labs(bptr[6] - bptr[8]); - diff_array[22] = labs(bptr[6] - bptr[7]); - diff_array[23] = labs(bptr[8] - bptr[7]); + switch (edge_type) { + case '|': + diff_array[0] = labs(bptr[4] - bptr[1]); + diff_array[1] = labs(bptr[4] - bptr[7]); + diff_array[2] = labs(bptr[3] - bptr[0]); + diff_array[3] = labs(bptr[3] - bptr[6]); + diff_array[4] = labs(bptr[5] - bptr[2]); + diff_array[5] = labs(bptr[5] - bptr[8]); + diff_array[6] = labs(bptr[4] - bptr[2]); + diff_array[7] = labs(bptr[4] - bptr[8]); + diff_array[8] = labs(bptr[3] - bptr[1]); + diff_array[9] = labs(bptr[3] - bptr[7]); + diff_array[10] = labs(bptr[4] - bptr[0]); + diff_array[11] = labs(bptr[4] - bptr[6]); + diff_array[12] = labs(bptr[5] - bptr[1]); + diff_array[13] = labs(bptr[5] - bptr[7]); + diff_array[14] = labs(bptr[0] - bptr[6]); + diff_array[15] = labs(bptr[2] - bptr[8]); + diff_array[16] = labs(bptr[1] - bptr[7]); + diff_array[17] = labs(bptr[0] - bptr[1]); + diff_array[18] = labs(bptr[2] - bptr[1]); + diff_array[19] = labs(bptr[0] - bptr[2]); + diff_array[20] = labs(bptr[3] - bptr[5]); + diff_array[21] = labs(bptr[6] - bptr[8]); + diff_array[22] = labs(bptr[6] - bptr[7]); + diff_array[23] = labs(bptr[8] - bptr[7]); - /* | vertical */ - sums_dir[0] = diff_array[0] + diff_array[1] + diff_array[2] + - diff_array[3] + diff_array[4] + diff_array[5]; + /* | vertical */ + sums_dir[0] = diff_array[0] + diff_array[1] + diff_array[2] + + diff_array[3] + diff_array[4] + diff_array[5]; - /* << top */ - sum = diff_array[8] + diff_array[9] + - ((diff_array[6] + diff_array[7] + - diff_array[12] + diff_array[13]) << 1) + - diff_array[14] + diff_array[16] + diff_array[15]; - sum = (sum * 6) / 13; - sums_dir[5] = sum; + /* << top */ + sum = diff_array[8] + diff_array[9] + + ((diff_array[6] + diff_array[7] + + diff_array[12] + diff_array[13]) << 1) + + diff_array[14] + diff_array[16] + diff_array[15]; + sum = (sum * 6) / 13; + sums_dir[5] = sum; - /* >> top */ - sum = diff_array[12] + diff_array[13] + - ((diff_array[10] + diff_array[11] + - diff_array[8] + diff_array[9]) << 1) + - diff_array[15] + diff_array[16] + diff_array[14]; - sum = (sum * 6) / 13; - sums_dir[6] = sum; + /* >> top */ + sum = diff_array[12] + diff_array[13] + + ((diff_array[10] + diff_array[11] + + diff_array[8] + diff_array[9]) << 1) + + diff_array[15] + diff_array[16] + diff_array[14]; + sum = (sum * 6) / 13; + sums_dir[6] = sum; - /* ^ bottom */ - sum = diff_array[8] + diff_array[12] + - ((diff_array[11] + diff_array[7]) << 1) + - (diff_array[1] << 2) + - diff_array[19] + diff_array[20] + diff_array[21]; - sum = (sum * 6) / 13; - sums_dir[7] = sum; + /* ^ bottom */ + sum = diff_array[8] + diff_array[12] + + ((diff_array[11] + diff_array[7]) << 1) + + (diff_array[1] << 2) + + diff_array[19] + diff_array[20] + diff_array[21]; + sum = (sum * 6) / 13; + sums_dir[7] = sum; - /* v bottom */ - sum = diff_array[9] + diff_array[13] + - ((diff_array[10] + diff_array[6]) << 1) + - (diff_array[0] << 2) + - diff_array[21] + diff_array[20] + diff_array[19]; - sum = (sum * 6) / 13; - sums_dir[8] = sum; + /* v bottom */ + sum = diff_array[9] + diff_array[13] + + ((diff_array[10] + diff_array[6]) << 1) + + (diff_array[0] << 2) + + diff_array[21] + diff_array[20] + diff_array[19]; + sum = (sum * 6) / 13; + sums_dir[8] = sum; - /* '| */ - sums_dir[1] = diff_array[1] + diff_array[5] + diff_array[10] + - diff_array[12] + (diff_array[3] << 1); - /* '| alt */ - sum = diff_array[10] + diff_array[1] + diff_array[18] + - diff_array[4] + diff_array[5] + diff_array[14]; - if (sum < sums_dir[1]) - sums_dir[1] = sum; + /* '| */ + sums_dir[1] = diff_array[1] + diff_array[5] + diff_array[10] + + diff_array[12] + (diff_array[3] << 1); + /* '| alt */ + sum = diff_array[10] + diff_array[1] + diff_array[18] + + diff_array[4] + diff_array[5] + diff_array[14]; + if (sum < sums_dir[1]) + sums_dir[1] = sum; - /* |. */ - sums_dir[2] = diff_array[0] + diff_array[2] + diff_array[7] + - diff_array[9] + (diff_array[4] << 1); - /* |. alt */ - sum = diff_array[0] + diff_array[7] + diff_array[22] + - diff_array[3] + diff_array[2] + diff_array[15]; - if (sum < sums_dir[2]) - sums_dir[2] = sum; + /* |. */ + sums_dir[2] = diff_array[0] + diff_array[2] + diff_array[7] + + diff_array[9] + (diff_array[4] << 1); + /* |. alt */ + sum = diff_array[0] + diff_array[7] + diff_array[22] + + diff_array[3] + diff_array[2] + diff_array[15]; + if (sum < sums_dir[2]) + sums_dir[2] = sum; - /* |' */ - sums_dir[3] = diff_array[1] + diff_array[3] + diff_array[6] + - diff_array[8] + (diff_array[5] << 1); - /* |' alt */ - sum = diff_array[6] + diff_array[1] + diff_array[17] + - diff_array[2] + diff_array[3] + diff_array[15]; - if (sum < sums_dir[3]) - sums_dir[3] = sum; + /* |' */ + sums_dir[3] = diff_array[1] + diff_array[3] + diff_array[6] + + diff_array[8] + (diff_array[5] << 1); + /* |' alt */ + sum = diff_array[6] + diff_array[1] + diff_array[17] + + diff_array[2] + diff_array[3] + diff_array[15]; + if (sum < sums_dir[3]) + sums_dir[3] = sum; - /* .| */ - sums_dir[4] = diff_array[0] + diff_array[4] + diff_array[11] + - diff_array[13] + (diff_array[2] << 1); - /* .| alt */ - sum = diff_array[11] + diff_array[0] + diff_array[23] + - diff_array[5] + diff_array[4] + diff_array[14]; - if (sum < sums_dir[4]) - sums_dir[4] = sum; + /* .| */ + sums_dir[4] = diff_array[0] + diff_array[4] + diff_array[11] + + diff_array[13] + (diff_array[2] << 1); + /* .| alt */ + sum = diff_array[11] + diff_array[0] + diff_array[23] + + diff_array[5] + diff_array[4] + diff_array[14]; + if (sum < sums_dir[4]) + sums_dir[4] = sum; - best_sum = sums_dir[0]; - for (i = 1; i < 9; i++) - if (sums_dir[i] < best_sum) best_sum = sums_dir[i]; - if (best_sum == sums_dir[0]) return 6; /* | */ + best_sum = sums_dir[0]; + for (i = 1; i < 9; i++) + if (sums_dir[i] < best_sum) best_sum = sums_dir[i]; + if (best_sum == sums_dir[0]) return 6; /* | */ - best_dir = 0; - for (i = 0, n = 0; i < 9; i++) - { - if (sums_dir[i] == best_sum) - { - best_dir = i; - n++; - } + best_dir = 0; + for (i = 0, n = 0; i < 9; i++) { + if (sums_dir[i] == best_sum) { + best_dir = i; + n++; } + } - /* best direction uncertain, return original direction */ - if (n > 1) return 6; /* | */ + /* best direction uncertain, return original direction */ + if (n > 1) return 6; /* | */ - if (best_dir >= 5) - ok_arrow_flag = checkArrows(best_dir, pixels, sim, 1); - - switch(best_dir) - { - case 1: - return 4; /* '| */ - break; - case 2: - return 5; /* |. */ - break; - case 3: - return 7; /* |' */ - break; - case 4: - return 8; /* .| */ - break; - case 5: - if (ok_arrow_flag) - return 12; /* < */ - break; - case 6: - if (ok_arrow_flag) - return 13; /* > */ - break; - case 7: - if (ok_arrow_flag) - return 14; /* ^ */ - break; - case 8: - if (ok_arrow_flag) - return 15; /* V */ - break; - case 0: - default: - return 6; /* | */ - break; - } + if (best_dir >= 5) + ok_arrow_flag = checkArrows(best_dir, pixels, sim, 1); + switch (best_dir) { + case 1: + return 4; /* '| */ break; - - case '-': - diff_array[0] = labs(bptr[4] - bptr[3]); - diff_array[1] = labs(bptr[4] - bptr[5]); - diff_array[2] = labs(bptr[0] - bptr[1]); - diff_array[3] = labs(bptr[1] - bptr[2]); - diff_array[4] = labs(bptr[7] - bptr[6]); - diff_array[5] = labs(bptr[7] - bptr[8]); - diff_array[6] = labs(bptr[4] - bptr[6]); - diff_array[7] = labs(bptr[4] - bptr[8]); - diff_array[8] = labs(bptr[1] - bptr[3]); - diff_array[9] = labs(bptr[1] - bptr[5]); - diff_array[10] = labs(bptr[4] - bptr[0]); - diff_array[11] = labs(bptr[4] - bptr[2]); - diff_array[12] = labs(bptr[7] - bptr[3]); - diff_array[13] = labs(bptr[7] - bptr[5]); - diff_array[14] = labs(bptr[0] - bptr[2]); - diff_array[15] = labs(bptr[6] - bptr[8]); - diff_array[16] = labs(bptr[3] - bptr[5]); - diff_array[17] = labs(bptr[0] - bptr[3]); - diff_array[18] = labs(bptr[6] - bptr[3]); - diff_array[19] = labs(bptr[0] - bptr[6]); - diff_array[20] = labs(bptr[1] - bptr[7]); - diff_array[21] = labs(bptr[2] - bptr[8]); - diff_array[22] = labs(bptr[2] - bptr[5]); - diff_array[23] = labs(bptr[8] - bptr[5]); - - /* - horizontal */ - sums_dir[0] = diff_array[0] + diff_array[1] + diff_array[2] + - diff_array[3] + diff_array[4] + diff_array[5]; - - /* << bottom */ - sum = diff_array[8] + diff_array[12] + - ((diff_array[11] + diff_array[7]) << 1) + - (diff_array[1] << 2) + - diff_array[19] + diff_array[20] + diff_array[21]; - sum = (sum * 6) / 13; - sums_dir[5] = sum; - - /* >> bottom */ - sum = diff_array[9] + diff_array[13] + - ((diff_array[10] + diff_array[6]) << 1) + - (diff_array[0] << 2) + - diff_array[21] + diff_array[20] + diff_array[19]; - sum = (sum * 6) / 13; - sums_dir[6] = sum; - - /* ^ top */ - sum = diff_array[8] + diff_array[9] + - ((diff_array[6] + diff_array[7] + - diff_array[12] + diff_array[13]) << 1) + - diff_array[14] + diff_array[16] + diff_array[15]; - sum = (sum * 6) / 13; - sums_dir[7] = sum; - - /* v top */ - sum = diff_array[12] + diff_array[13] + - ((diff_array[10] + diff_array[11] + - diff_array[8] + diff_array[9]) << 1) + - diff_array[15] + diff_array[16] + diff_array[14]; - sum = (sum * 6) / 13; - sums_dir[8] = sum; - - /* '- */ - sums_dir[1] = diff_array[1] + diff_array[5] + diff_array[10] + - diff_array[12] + (diff_array[3] << 1); - /* '- alt */ - sum = diff_array[10] + diff_array[1] + diff_array[18] + - diff_array[4] + diff_array[5] + diff_array[14]; - if (sum < sums_dir[1]) - sums_dir[1] = sum; - - /* -. */ - sums_dir[2] = diff_array[0] + diff_array[2] + diff_array[7] + - diff_array[9] + (diff_array[4] << 1); - /* -. alt */ - sum = diff_array[0] + diff_array[7] + diff_array[22] + - diff_array[3] + diff_array[2] + diff_array[15]; - if (sum < sums_dir[2]) - sums_dir[2] = sum; - - /* -' */ - sums_dir[3] = diff_array[0] + diff_array[4] + diff_array[11] + - diff_array[13] + (diff_array[2] << 1); - /* -' alt */ - sum = diff_array[11] + diff_array[0] + diff_array[23] + - diff_array[5] + diff_array[4] + diff_array[14]; - if (sum < sums_dir[3]) - sums_dir[3] = sum; - - /* .- */ - sums_dir[4] = diff_array[1] + diff_array[3] + diff_array[6] + - diff_array[8] + (diff_array[5] << 1); - /* .- alt */ - sum = diff_array[6] + diff_array[1] + diff_array[17] + - diff_array[2] + diff_array[3] + diff_array[15]; - if (sum < sums_dir[4]) - sums_dir[4] = sum; - - best_sum = sums_dir[0]; - for (i = 1; i < 9; i++) - if (sums_dir[i] < best_sum) best_sum = sums_dir[i]; - if (best_sum == sums_dir[0]) return 0; /* - */ - - best_dir = 0; - for (i = 0, n = 0; i < 9; i++) - { - if (sums_dir[i] == best_sum) - { - best_dir = i; - n++; - } - } - - /* best direction uncertain, return original direction */ - if (n > 1) return 0; /* - */ - - if (best_dir >= 5) - ok_arrow_flag = checkArrows(best_dir, pixels, sim, 1); - - switch(best_dir) - { - case 1: - return 1; /* '- */ - break; - case 2: - return 2; /* -. */ - break; - case 3: - return 10; /* -' */ - break; - case 4: - return 11; /* .- */ - break; - case 5: - if (ok_arrow_flag) - return 12; /* < */ - break; - case 6: - if (ok_arrow_flag) - return 13; /* > */ - break; - case 7: - if (ok_arrow_flag) - return 14; /* ^ */ - break; - case 8: - if (ok_arrow_flag) - return 15; /* V */ - break; - case 0: - default: - return 0; /* - */ - break; - } - + case 2: + return 5; /* |. */ break; - - case '\\': - - /* CHECK -- handle noisy half-diags */ - if (_simSum == 1) - { - if (pixels[1] == pixels[3] && pixels[3] == pixels[5] && - pixels[5] == pixels[7]) - { - if (pixels[2] != pixels[1] && pixels[6] != pixels[1]) - { - sum = labs(bptr[2] - bptr[4]) + - labs(bptr[6] - bptr[4]); - - if (sim[0] && sum < (labs(bptr[8] - bptr[4]) << 1)) - { - if (bptr[4] > bptr[8]) - { - if (bptr[2] > bptr[4] && - bptr[6] > bptr[4]) - return 18; /* '/ */ - } - else - { - if (bptr[2] < bptr[4] && - bptr[6] < bptr[4]) - return 18; /* '/ */ - } - } - - if (sim[7] && sum < (labs(bptr[0] - bptr[4]) << 1)) - { - if (bptr[4] > bptr[0]) - { - if (bptr[2] > bptr[4] && - bptr[6] > bptr[4]) - return 19; /* /. */ - } - else - { - if (bptr[2] < bptr[4] && - bptr[6] < bptr[4]) - return 19; /* /. */ - } - } - } - } - - if (sim[0] && - labs(bptr[4] - bptr[0]) < ((int16)1<<(GREY_SHIFT-3))) - return 3; /* \ */ - if (sim[7] && - labs(bptr[4] - bptr[8]) < ((int16)1<<(GREY_SHIFT-3))) - return 3; /* \ */ - } - - diff_array[0] = labs(bptr[4] - bptr[0]); - diff_array[1] = labs(bptr[4] - bptr[5]); - diff_array[2] = labs(bptr[3] - bptr[7]); - diff_array[3] = labs(bptr[7] - bptr[8]); - diff_array[4] = labs(bptr[1] - bptr[2]); - diff_array[5] = labs(bptr[4] - bptr[3]); - diff_array[6] = labs(bptr[4] - bptr[8]); - diff_array[7] = labs(bptr[0] - bptr[1]); - diff_array[8] = labs(bptr[1] - bptr[5]); - diff_array[9] = labs(bptr[6] - bptr[7]); - diff_array[10] = labs(bptr[4] - bptr[7]); - diff_array[11] = labs(bptr[5] - bptr[8]); - diff_array[12] = labs(bptr[3] - bptr[6]); - diff_array[13] = labs(bptr[4] - bptr[1]); - diff_array[14] = labs(bptr[0] - bptr[3]); - diff_array[15] = labs(bptr[2] - bptr[5]); - diff_array[20] = labs(bptr[0] - bptr[2]); - diff_array[21] = labs(bptr[6] - bptr[8]); - diff_array[22] = labs(bptr[0] - bptr[6]); - diff_array[23] = labs(bptr[2] - bptr[8]); - diff_array[16] = labs(bptr[4] - bptr[2]); - diff_array[18] = labs(bptr[4] - bptr[6]); - - /* '- */ - sums_dir[1] = diff_array[0] + diff_array[1] + diff_array[2] + - diff_array[3] + (diff_array[4] << 1); - /* '- alt */ - sum = diff_array[0] + diff_array[1] + diff_array[12] + - diff_array[9] + diff_array[3] + diff_array[20]; - if (sum < sums_dir[1]) - sums_dir[1] = sum; - - /* -. */ - sums_dir[2] = diff_array[5] + diff_array[6] + diff_array[7] + - diff_array[8] + (diff_array[9] << 1); - /* -. alt */ - sum = diff_array[6] + diff_array[5] + diff_array[15] + - diff_array[4] + diff_array[7] + diff_array[21]; - if (sum < sums_dir[2]) - sums_dir[2] = sum; - - /* '| */ - sums_dir[3] = diff_array[0] + diff_array[8] + diff_array[10] + - diff_array[11] + (diff_array[12] << 1); - /* '| alt */ - sum = diff_array[0] + diff_array[10] + diff_array[4] + - diff_array[15] + diff_array[11] + diff_array[22]; - if (sum < sums_dir[3]) - sums_dir[3] = sum; - - /* |. */ - sums_dir[4] = diff_array[2] + diff_array[6] + diff_array[13] + - diff_array[14] + (diff_array[15] << 1); - /* |. alt */ - sum = diff_array[13] + diff_array[6] + diff_array[9] + - diff_array[12] + diff_array[14] + diff_array[23]; - if (sum < sums_dir[4]) - sums_dir[4] = sum; - - /* \ 45 */ - sums_dir[0] = diff_array[0] + diff_array[6] + - (diff_array[2] << 1) + (diff_array[8] << 1); - - /* << top */ - sum = labs(bptr[3] - bptr[1]) + labs(bptr[3] - bptr[7]) + - ((labs(bptr[4] - bptr[2]) + labs(bptr[4] - bptr[8]) + - labs(bptr[5] - bptr[1]) + labs(bptr[5] - bptr[7])) << 1) + - labs(bptr[0] - bptr[6]) + labs(bptr[1] - bptr[7]) + - labs(bptr[2] - bptr[8]); - sum = (sum * 6) / 13; - sums_dir[5] = sum; - - /* >> top */ - sum = labs(bptr[5] - bptr[1]) + labs(bptr[5] - bptr[7]) + - ((labs(bptr[4] - bptr[0]) + labs(bptr[4] - bptr[6]) + - labs(bptr[3] - bptr[1]) + labs(bptr[3] - bptr[7])) << 1) + - labs(bptr[2] - bptr[8]) + labs(bptr[1] - bptr[7]) + - labs(bptr[0] - bptr[6]); - sum = (sum * 6) / 13; - sums_dir[6] = sum; - - /* ^ top */ - sum = labs(bptr[1] - bptr[3]) + labs(bptr[1] - bptr[5]) + - ((labs(bptr[4] - bptr[6]) + labs(bptr[4] - bptr[8]) + - labs(bptr[7] - bptr[3]) + labs(bptr[7] - bptr[5])) << 1) + - labs(bptr[0] - bptr[2]) + labs(bptr[3] - bptr[5]) + - labs(bptr[6] - bptr[8]); - sum = (sum * 6) / 13; - sums_dir[7] = sum; - - /* v top */ - sum = labs(bptr[7] - bptr[3]) + labs(bptr[7] - bptr[5]) + - ((labs(bptr[4] - bptr[0]) + labs(bptr[4] - bptr[2]) + - labs(bptr[1] - bptr[3]) + labs(bptr[1] - bptr[5])) << 1) + - labs(bptr[6] - bptr[8]) + labs(bptr[3] - bptr[5]) + - labs(bptr[0] - bptr[2]); - sum = (sum * 6) / 13; - sums_dir[8] = sum; - - best_sum = sums_dir[0]; - for (i = 1; i < 9; i++) - if (sums_dir[i] < best_sum) best_sum = sums_dir[i]; - - best_dir = 0; - for (i = 0, n = 0; i < 9; i++) - { - if (sums_dir[i] == best_sum) - { - best_dir = i; - n++; - } - } - - /* CHECK -- handle zig-zags */ - if (_simSum == 3) - { - if ((best_dir == 0 || best_dir == 1) && - sim[0] && sim[1] && sim[4]) - return 1; /* '- */ - if ((best_dir == 0 || best_dir == 2) && - sim[3] && sim[6] && sim[7]) - return 2; /* -. */ - if ((best_dir == 0 || best_dir == 3) && - sim[0] && sim[3] && sim[6]) - return 4; /* '| */ - if ((best_dir == 0 || best_dir == 4) && - sim[1] && sim[4] && sim[7]) - return 5; /* |. */ - } - - if (n > 1 && best_sum == sums_dir[0]) return 3; /* \ */ - - /* best direction uncertain, return non-edge to avoid artifacts */ - if (n > 1) return -1; - - /* CHECK -- diagonal intersections */ - if (best_dir == 0 && - (sim[1] == sim[4] || sim[3] == sim[6]) && - (sim[1] == sim[3] || sim[4] == sim[6])) - { - if ((pixels[1] == pixels[3] || pixels[5] == pixels[7]) || - ((pixels[0] == pixels[4]) ^ (pixels[8] == pixels[4]))) - { - if (pixels[2] == pixels[4]) - return 16; /* \' */ - if (pixels[6] == pixels[4]) - return 17; /* .\ */ - } - - if (_simSum == 3 && sim[0] && sim[7] && - pixels[1] == pixels[3] && pixels[3] == pixels[5] && - pixels[5] == pixels[7]) - { - if (sim[2]) - return 16; /* \' */ - if (sim[5]) - return 17; /* .\ */ - } - - if (_simSum == 3 && sim[2] && sim[5]) - { - if (sim[0]) - return 18; /* '/ */ - if (sim[7]) - return 19; /* /. */ - } - } - - if (best_dir >= 5) - ok_arrow_flag = checkArrows(best_dir, pixels, sim, 0); - - switch(best_dir) - { - case 1: - return 1; /* '- */ - break; - case 2: - return 2; /* -. */ - break; - case 3: - return 4; /* '| */ - break; - case 4: - return 5; /* |. */ - break; - case 5: - if (ok_arrow_flag) - return 12; /* < */ - break; - case 6: - if (ok_arrow_flag) - return 13; /* > */ - break; - case 7: - if (ok_arrow_flag) - return 14; /* ^ */ - break; - case 8: - if (ok_arrow_flag) - return 15; /* V */ - break; - case 0: - default: - return 3; /* \ */ - break; - } - + case 3: + return 7; /* |' */ break; - - case '/': - - /* CHECK -- handle noisy half-diags */ - if (_simSum == 1) - { - if (pixels[1] == pixels[3] && pixels[3] == pixels[5] && - pixels[5] == pixels[7]) - { - if (pixels[0] != pixels[1] && pixels[8] != pixels[1]) - { - sum = labs(bptr[0] - bptr[4]) + - labs(bptr[8] - bptr[4]); - - if (sim[2] && sum < (labs(bptr[6] - bptr[4]) << 1)) - { - if (bptr[4] > bptr[6]) - { - if (bptr[0] > bptr[4] && - bptr[8] > bptr[4]) - return 16; /* \' */ - } - else - { - if (bptr[0] < bptr[4] && - bptr[8] < bptr[4]) - return 16; /* \' */ - } - } - - if (sim[5] && sum < (labs(bptr[2] - bptr[4]) << 1)) - { - if (bptr[4] > bptr[2]) - { - if (bptr[0] > bptr[4] && - bptr[8] > bptr[4]) - { - if (pixels[6] == pixels[4]) - return 17; /* .\ */ - return 3; /* \ */ - } - } - else - { - if (bptr[0] < bptr[4] && - bptr[8] < bptr[4]) - { - if (pixels[6] == pixels[4]) - return 17; /* .\ */ - return 3; /* \ */ - } - } - } - } - } - - if (sim[2] && - labs(bptr[4] - bptr[2]) < ((int16)1<<(GREY_SHIFT-3))) - return 9; /* / */ - if (sim[5] && - labs(bptr[4] - bptr[6]) < ((int16)1<<(GREY_SHIFT-3))) - return 9; /* / */ - } - - diff_array[0] = labs(bptr[4] - bptr[0]); - diff_array[1] = labs(bptr[4] - bptr[5]); - diff_array[3] = labs(bptr[7] - bptr[8]); - diff_array[4] = labs(bptr[1] - bptr[2]); - diff_array[5] = labs(bptr[4] - bptr[3]); - diff_array[6] = labs(bptr[4] - bptr[8]); - diff_array[7] = labs(bptr[0] - bptr[1]); - diff_array[9] = labs(bptr[6] - bptr[7]); - diff_array[10] = labs(bptr[4] - bptr[7]); - diff_array[11] = labs(bptr[5] - bptr[8]); - diff_array[12] = labs(bptr[3] - bptr[6]); - diff_array[13] = labs(bptr[4] - bptr[1]); - diff_array[14] = labs(bptr[0] - bptr[3]); - diff_array[15] = labs(bptr[2] - bptr[5]); - diff_array[16] = labs(bptr[4] - bptr[2]); - diff_array[17] = labs(bptr[1] - bptr[3]); - diff_array[18] = labs(bptr[4] - bptr[6]); - diff_array[19] = labs(bptr[5] - bptr[7]); - diff_array[20] = labs(bptr[0] - bptr[2]); - diff_array[21] = labs(bptr[6] - bptr[8]); - diff_array[22] = labs(bptr[0] - bptr[6]); - diff_array[23] = labs(bptr[2] - bptr[8]); - - /* |' */ - sums_dir[1] = diff_array[10] + diff_array[12] + diff_array[16] + - diff_array[17] + (diff_array[11] << 1); - /* |' alt */ - sum = diff_array[16] + diff_array[10] + diff_array[7] + - diff_array[14] + diff_array[12] + diff_array[23]; - if (sum < sums_dir[1]) - sums_dir[1] = sum; - - /* .| */ - sums_dir[2] = diff_array[13] + diff_array[15] + diff_array[18] + - diff_array[19] + (diff_array[14] << 1); - /* .| alt */ - sum = diff_array[18] + diff_array[13] + diff_array[3] + - diff_array[11] + diff_array[15] + diff_array[22]; - if (sum < sums_dir[2]) - sums_dir[2] = sum; - - /* -' */ - sums_dir[3] = diff_array[5] + diff_array[9] + diff_array[16] + - diff_array[19] + (diff_array[7] << 1); - /* -' alt */ - sum = diff_array[16] + diff_array[5] + diff_array[11] + - diff_array[3] + diff_array[9] + diff_array[20]; - if (sum < sums_dir[3]) - sums_dir[3] = sum; - - /* .- */ - sums_dir[4] = diff_array[1] + diff_array[4] + diff_array[17] + - diff_array[18] + (diff_array[3] << 1); - /* .- alt */ - sum = diff_array[18] + diff_array[1] + diff_array[14] + - diff_array[7] + diff_array[4] + diff_array[21]; - if (sum < sums_dir[4]) - sums_dir[4] = sum; - - /* / 135 */ - sums_dir[0] = diff_array[16] + diff_array[18] + - (diff_array[17] << 1) + (diff_array[19] << 1); - - /* << top */ - sum = labs(bptr[3] - bptr[1]) + labs(bptr[3] - bptr[7]) + - ((labs(bptr[4] - bptr[2]) + labs(bptr[4] - bptr[8]) + - labs(bptr[5] - bptr[1]) + labs(bptr[5] - bptr[7])) << 1) + - labs(bptr[0] - bptr[6]) + labs(bptr[1] - bptr[7]) + - labs(bptr[2] - bptr[8]); - sum = (sum * 6) / 13; - sums_dir[5] = sum; - - /* >> top */ - sum = labs(bptr[5] - bptr[1]) + labs(bptr[5] - bptr[7]) + - ((labs(bptr[4] - bptr[0]) + labs(bptr[4] - bptr[6]) + - labs(bptr[3] - bptr[1]) + labs(bptr[3] - bptr[7])) << 1) + - labs(bptr[2] - bptr[8]) + labs(bptr[1] - bptr[7]) + - labs(bptr[0] - bptr[6]); - sum = (sum * 6) / 13; - sums_dir[6] = sum; - - /* ^ top */ - sum = labs(bptr[1] - bptr[3]) + labs(bptr[1] - bptr[5]) + - ((labs(bptr[4] - bptr[6]) + labs(bptr[4] - bptr[8]) + - labs(bptr[7] - bptr[3]) + labs(bptr[7] - bptr[5])) << 1) + - labs(bptr[0] - bptr[2]) + labs(bptr[3] - bptr[5]) + - labs(bptr[6] - bptr[8]); - sum = (sum * 6) / 13; - sums_dir[7] = sum; - - /* v top */ - sum = labs(bptr[7] - bptr[3]) + labs(bptr[7] - bptr[5]) + - ((labs(bptr[4] - bptr[0]) + labs(bptr[4] - bptr[2]) + - labs(bptr[1] - bptr[3]) + labs(bptr[1] - bptr[5])) << 1) + - labs(bptr[6] - bptr[8]) + labs(bptr[3] - bptr[5]) + - labs(bptr[0] - bptr[2]); - sum = (sum * 6) / 13; - sums_dir[8] = sum; - - best_sum = sums_dir[0]; - for (i = 1; i < 9; i++) - if (sums_dir[i] < best_sum) best_sum = sums_dir[i]; - - best_dir = 0; - for (i = 0, n = 0; i < 9; i++) - { - if (sums_dir[i] == best_sum) - { - best_dir = i; - n++; - } - } - - /* CHECK -- handle zig-zags */ - if (_simSum == 3) - { - if ((best_dir == 0 || best_dir == 1) && - sim[2] && sim[4] && sim[6]) - return 7; /* |' */ - if ((best_dir == 0 || best_dir == 2) && - sim[1] && sim[3] && sim[5]) - return 8; /* .| */ - if ((best_dir == 0 || best_dir == 3) && - sim[1] && sim[2] && sim[3]) - return 10; /* -' */ - if ((best_dir == 0 || best_dir == 4) && - sim[4] && sim[5] && sim[6]) - return 11; /* .- */ - } - - if (n > 1 && best_sum == sums_dir[0]) return 9; /* / */ - - /* best direction uncertain, return non-edge to avoid artifacts */ - if (n > 1) return -1; - - /* CHECK -- diagonal intersections */ - if (best_dir == 0 && - (sim[1] == sim[3] || sim[4] == sim[6]) && - (sim[1] == sim[4] || sim[3] == sim[6])) - { - if ((pixels[1] == pixels[5] || pixels[3] == pixels[7]) || - ((pixels[2] == pixels[4]) ^ (pixels[6] == pixels[4]))) - { - if (pixels[0] == pixels[4]) - return 18; /* '/ */ - if (pixels[8] == pixels[4]) - return 19; /* /. */ - } - - if (_simSum == 3 && sim[2] && sim[5] && - pixels[1] == pixels[3] && pixels[3] == pixels[5] && - pixels[5] == pixels[7]) - { - if (sim[0]) - return 18; /* '/ */ - if (sim[7]) - return 19; /* /. */ - } - - if (_simSum == 3 && sim[0] && sim[7]) - { - if (sim[2]) - return 16; /* \' */ - if (sim[5]) - return 17; /* .\ */ - } - } - - if (best_dir >= 5) - ok_arrow_flag = checkArrows(best_dir, pixels, sim, 0); - - switch(best_dir) - { - case 1: - return 7; /* |' */ - break; - case 2: - return 8; /* .| */ - break; - case 3: - return 10; /* -' */ - break; - case 4: - return 11; /* .- */ - break; - case 5: - if (ok_arrow_flag) - return 12; /* < */ - break; - case 6: - if (ok_arrow_flag) - return 13; /* > */ - break; - case 7: - if (ok_arrow_flag) - return 14; /* ^ */ - break; - case 8: - if (ok_arrow_flag) - return 15; /* V */ - break; - break; - case 0: - default: - return 9; /* / */ - break; - } - + case 4: + return 8; /* .| */ break; - - case '*': - return 127; + case 5: + if (ok_arrow_flag) + return 12; /* < */ break; - - case '0': + case 6: + if (ok_arrow_flag) + return 13; /* > */ + break; + case 7: + if (ok_arrow_flag) + return 14; /* ^ */ + break; + case 8: + if (ok_arrow_flag) + return 15; /* V */ + break; + case 0: default: - return -1; + return 6; /* | */ break; + } + + break; + + case '-': + diff_array[0] = labs(bptr[4] - bptr[3]); + diff_array[1] = labs(bptr[4] - bptr[5]); + diff_array[2] = labs(bptr[0] - bptr[1]); + diff_array[3] = labs(bptr[1] - bptr[2]); + diff_array[4] = labs(bptr[7] - bptr[6]); + diff_array[5] = labs(bptr[7] - bptr[8]); + diff_array[6] = labs(bptr[4] - bptr[6]); + diff_array[7] = labs(bptr[4] - bptr[8]); + diff_array[8] = labs(bptr[1] - bptr[3]); + diff_array[9] = labs(bptr[1] - bptr[5]); + diff_array[10] = labs(bptr[4] - bptr[0]); + diff_array[11] = labs(bptr[4] - bptr[2]); + diff_array[12] = labs(bptr[7] - bptr[3]); + diff_array[13] = labs(bptr[7] - bptr[5]); + diff_array[14] = labs(bptr[0] - bptr[2]); + diff_array[15] = labs(bptr[6] - bptr[8]); + diff_array[16] = labs(bptr[3] - bptr[5]); + diff_array[17] = labs(bptr[0] - bptr[3]); + diff_array[18] = labs(bptr[6] - bptr[3]); + diff_array[19] = labs(bptr[0] - bptr[6]); + diff_array[20] = labs(bptr[1] - bptr[7]); + diff_array[21] = labs(bptr[2] - bptr[8]); + diff_array[22] = labs(bptr[2] - bptr[5]); + diff_array[23] = labs(bptr[8] - bptr[5]); + + /* - horizontal */ + sums_dir[0] = diff_array[0] + diff_array[1] + diff_array[2] + + diff_array[3] + diff_array[4] + diff_array[5]; + + /* << bottom */ + sum = diff_array[8] + diff_array[12] + + ((diff_array[11] + diff_array[7]) << 1) + + (diff_array[1] << 2) + + diff_array[19] + diff_array[20] + diff_array[21]; + sum = (sum * 6) / 13; + sums_dir[5] = sum; + + /* >> bottom */ + sum = diff_array[9] + diff_array[13] + + ((diff_array[10] + diff_array[6]) << 1) + + (diff_array[0] << 2) + + diff_array[21] + diff_array[20] + diff_array[19]; + sum = (sum * 6) / 13; + sums_dir[6] = sum; + + /* ^ top */ + sum = diff_array[8] + diff_array[9] + + ((diff_array[6] + diff_array[7] + + diff_array[12] + diff_array[13]) << 1) + + diff_array[14] + diff_array[16] + diff_array[15]; + sum = (sum * 6) / 13; + sums_dir[7] = sum; + + /* v top */ + sum = diff_array[12] + diff_array[13] + + ((diff_array[10] + diff_array[11] + + diff_array[8] + diff_array[9]) << 1) + + diff_array[15] + diff_array[16] + diff_array[14]; + sum = (sum * 6) / 13; + sums_dir[8] = sum; + + /* '- */ + sums_dir[1] = diff_array[1] + diff_array[5] + diff_array[10] + + diff_array[12] + (diff_array[3] << 1); + /* '- alt */ + sum = diff_array[10] + diff_array[1] + diff_array[18] + + diff_array[4] + diff_array[5] + diff_array[14]; + if (sum < sums_dir[1]) + sums_dir[1] = sum; + + /* -. */ + sums_dir[2] = diff_array[0] + diff_array[2] + diff_array[7] + + diff_array[9] + (diff_array[4] << 1); + /* -. alt */ + sum = diff_array[0] + diff_array[7] + diff_array[22] + + diff_array[3] + diff_array[2] + diff_array[15]; + if (sum < sums_dir[2]) + sums_dir[2] = sum; + + /* -' */ + sums_dir[3] = diff_array[0] + diff_array[4] + diff_array[11] + + diff_array[13] + (diff_array[2] << 1); + /* -' alt */ + sum = diff_array[11] + diff_array[0] + diff_array[23] + + diff_array[5] + diff_array[4] + diff_array[14]; + if (sum < sums_dir[3]) + sums_dir[3] = sum; + + /* .- */ + sums_dir[4] = diff_array[1] + diff_array[3] + diff_array[6] + + diff_array[8] + (diff_array[5] << 1); + /* .- alt */ + sum = diff_array[6] + diff_array[1] + diff_array[17] + + diff_array[2] + diff_array[3] + diff_array[15]; + if (sum < sums_dir[4]) + sums_dir[4] = sum; + + best_sum = sums_dir[0]; + for (i = 1; i < 9; i++) + if (sums_dir[i] < best_sum) best_sum = sums_dir[i]; + if (best_sum == sums_dir[0]) return 0; /* - */ + + best_dir = 0; + for (i = 0, n = 0; i < 9; i++) { + if (sums_dir[i] == best_sum) { + best_dir = i; + n++; + } + } + + /* best direction uncertain, return original direction */ + if (n > 1) return 0; /* - */ + + if (best_dir >= 5) + ok_arrow_flag = checkArrows(best_dir, pixels, sim, 1); + + switch (best_dir) { + case 1: + return 1; /* '- */ + break; + case 2: + return 2; /* -. */ + break; + case 3: + return 10; /* -' */ + break; + case 4: + return 11; /* .- */ + break; + case 5: + if (ok_arrow_flag) + return 12; /* < */ + break; + case 6: + if (ok_arrow_flag) + return 13; /* > */ + break; + case 7: + if (ok_arrow_flag) + return 14; /* ^ */ + break; + case 8: + if (ok_arrow_flag) + return 15; /* V */ + break; + case 0: + default: + return 0; /* - */ + break; + } + + break; + + case '\\': + + /* CHECK -- handle noisy half-diags */ + if (_simSum == 1) { + if (pixels[1] == pixels[3] && pixels[3] == pixels[5] && + pixels[5] == pixels[7]) { + if (pixels[2] != pixels[1] && pixels[6] != pixels[1]) { + sum = labs(bptr[2] - bptr[4]) + + labs(bptr[6] - bptr[4]); + + if (sim[0] && sum < (labs(bptr[8] - bptr[4]) << 1)) { + if (bptr[4] > bptr[8]) { + if (bptr[2] > bptr[4] && + bptr[6] > bptr[4]) + return 18; /* '/ */ + } else { + if (bptr[2] < bptr[4] && + bptr[6] < bptr[4]) + return 18; /* '/ */ + } + } + + if (sim[7] && sum < (labs(bptr[0] - bptr[4]) << 1)) { + if (bptr[4] > bptr[0]) { + if (bptr[2] > bptr[4] && + bptr[6] > bptr[4]) + return 19; /* /. */ + } else { + if (bptr[2] < bptr[4] && + bptr[6] < bptr[4]) + return 19; /* /. */ + } + } + } + } + + if (sim[0] && + labs(bptr[4] - bptr[0]) < ((int16)1 << (GREY_SHIFT - 3))) + return 3; /* \ */ + if (sim[7] && + labs(bptr[4] - bptr[8]) < ((int16)1 << (GREY_SHIFT - 3))) + return 3; /* \ */ + } + + diff_array[0] = labs(bptr[4] - bptr[0]); + diff_array[1] = labs(bptr[4] - bptr[5]); + diff_array[2] = labs(bptr[3] - bptr[7]); + diff_array[3] = labs(bptr[7] - bptr[8]); + diff_array[4] = labs(bptr[1] - bptr[2]); + diff_array[5] = labs(bptr[4] - bptr[3]); + diff_array[6] = labs(bptr[4] - bptr[8]); + diff_array[7] = labs(bptr[0] - bptr[1]); + diff_array[8] = labs(bptr[1] - bptr[5]); + diff_array[9] = labs(bptr[6] - bptr[7]); + diff_array[10] = labs(bptr[4] - bptr[7]); + diff_array[11] = labs(bptr[5] - bptr[8]); + diff_array[12] = labs(bptr[3] - bptr[6]); + diff_array[13] = labs(bptr[4] - bptr[1]); + diff_array[14] = labs(bptr[0] - bptr[3]); + diff_array[15] = labs(bptr[2] - bptr[5]); + diff_array[20] = labs(bptr[0] - bptr[2]); + diff_array[21] = labs(bptr[6] - bptr[8]); + diff_array[22] = labs(bptr[0] - bptr[6]); + diff_array[23] = labs(bptr[2] - bptr[8]); + diff_array[16] = labs(bptr[4] - bptr[2]); + diff_array[18] = labs(bptr[4] - bptr[6]); + + /* '- */ + sums_dir[1] = diff_array[0] + diff_array[1] + diff_array[2] + + diff_array[3] + (diff_array[4] << 1); + /* '- alt */ + sum = diff_array[0] + diff_array[1] + diff_array[12] + + diff_array[9] + diff_array[3] + diff_array[20]; + if (sum < sums_dir[1]) + sums_dir[1] = sum; + + /* -. */ + sums_dir[2] = diff_array[5] + diff_array[6] + diff_array[7] + + diff_array[8] + (diff_array[9] << 1); + /* -. alt */ + sum = diff_array[6] + diff_array[5] + diff_array[15] + + diff_array[4] + diff_array[7] + diff_array[21]; + if (sum < sums_dir[2]) + sums_dir[2] = sum; + + /* '| */ + sums_dir[3] = diff_array[0] + diff_array[8] + diff_array[10] + + diff_array[11] + (diff_array[12] << 1); + /* '| alt */ + sum = diff_array[0] + diff_array[10] + diff_array[4] + + diff_array[15] + diff_array[11] + diff_array[22]; + if (sum < sums_dir[3]) + sums_dir[3] = sum; + + /* |. */ + sums_dir[4] = diff_array[2] + diff_array[6] + diff_array[13] + + diff_array[14] + (diff_array[15] << 1); + /* |. alt */ + sum = diff_array[13] + diff_array[6] + diff_array[9] + + diff_array[12] + diff_array[14] + diff_array[23]; + if (sum < sums_dir[4]) + sums_dir[4] = sum; + + /* \ 45 */ + sums_dir[0] = diff_array[0] + diff_array[6] + + (diff_array[2] << 1) + (diff_array[8] << 1); + + /* << top */ + sum = labs(bptr[3] - bptr[1]) + labs(bptr[3] - bptr[7]) + + ((labs(bptr[4] - bptr[2]) + labs(bptr[4] - bptr[8]) + + labs(bptr[5] - bptr[1]) + labs(bptr[5] - bptr[7])) << 1) + + labs(bptr[0] - bptr[6]) + labs(bptr[1] - bptr[7]) + + labs(bptr[2] - bptr[8]); + sum = (sum * 6) / 13; + sums_dir[5] = sum; + + /* >> top */ + sum = labs(bptr[5] - bptr[1]) + labs(bptr[5] - bptr[7]) + + ((labs(bptr[4] - bptr[0]) + labs(bptr[4] - bptr[6]) + + labs(bptr[3] - bptr[1]) + labs(bptr[3] - bptr[7])) << 1) + + labs(bptr[2] - bptr[8]) + labs(bptr[1] - bptr[7]) + + labs(bptr[0] - bptr[6]); + sum = (sum * 6) / 13; + sums_dir[6] = sum; + + /* ^ top */ + sum = labs(bptr[1] - bptr[3]) + labs(bptr[1] - bptr[5]) + + ((labs(bptr[4] - bptr[6]) + labs(bptr[4] - bptr[8]) + + labs(bptr[7] - bptr[3]) + labs(bptr[7] - bptr[5])) << 1) + + labs(bptr[0] - bptr[2]) + labs(bptr[3] - bptr[5]) + + labs(bptr[6] - bptr[8]); + sum = (sum * 6) / 13; + sums_dir[7] = sum; + + /* v top */ + sum = labs(bptr[7] - bptr[3]) + labs(bptr[7] - bptr[5]) + + ((labs(bptr[4] - bptr[0]) + labs(bptr[4] - bptr[2]) + + labs(bptr[1] - bptr[3]) + labs(bptr[1] - bptr[5])) << 1) + + labs(bptr[6] - bptr[8]) + labs(bptr[3] - bptr[5]) + + labs(bptr[0] - bptr[2]); + sum = (sum * 6) / 13; + sums_dir[8] = sum; + + best_sum = sums_dir[0]; + for (i = 1; i < 9; i++) + if (sums_dir[i] < best_sum) best_sum = sums_dir[i]; + + best_dir = 0; + for (i = 0, n = 0; i < 9; i++) { + if (sums_dir[i] == best_sum) { + best_dir = i; + n++; + } + } + + /* CHECK -- handle zig-zags */ + if (_simSum == 3) { + if ((best_dir == 0 || best_dir == 1) && + sim[0] && sim[1] && sim[4]) + return 1; /* '- */ + if ((best_dir == 0 || best_dir == 2) && + sim[3] && sim[6] && sim[7]) + return 2; /* -. */ + if ((best_dir == 0 || best_dir == 3) && + sim[0] && sim[3] && sim[6]) + return 4; /* '| */ + if ((best_dir == 0 || best_dir == 4) && + sim[1] && sim[4] && sim[7]) + return 5; /* |. */ + } + + if (n > 1 && best_sum == sums_dir[0]) return 3; /* \ */ + + /* best direction uncertain, return non-edge to avoid artifacts */ + if (n > 1) return -1; + + /* CHECK -- diagonal intersections */ + if (best_dir == 0 && + (sim[1] == sim[4] || sim[3] == sim[6]) && + (sim[1] == sim[3] || sim[4] == sim[6])) { + if ((pixels[1] == pixels[3] || pixels[5] == pixels[7]) || + ((pixels[0] == pixels[4]) ^ (pixels[8] == pixels[4]))) { + if (pixels[2] == pixels[4]) + return 16; /* \' */ + if (pixels[6] == pixels[4]) + return 17; /* .\ */ + } + + if (_simSum == 3 && sim[0] && sim[7] && + pixels[1] == pixels[3] && pixels[3] == pixels[5] && + pixels[5] == pixels[7]) { + if (sim[2]) + return 16; /* \' */ + if (sim[5]) + return 17; /* .\ */ + } + + if (_simSum == 3 && sim[2] && sim[5]) { + if (sim[0]) + return 18; /* '/ */ + if (sim[7]) + return 19; /* /. */ + } + } + + if (best_dir >= 5) + ok_arrow_flag = checkArrows(best_dir, pixels, sim, 0); + + switch (best_dir) { + case 1: + return 1; /* '- */ + break; + case 2: + return 2; /* -. */ + break; + case 3: + return 4; /* '| */ + break; + case 4: + return 5; /* |. */ + break; + case 5: + if (ok_arrow_flag) + return 12; /* < */ + break; + case 6: + if (ok_arrow_flag) + return 13; /* > */ + break; + case 7: + if (ok_arrow_flag) + return 14; /* ^ */ + break; + case 8: + if (ok_arrow_flag) + return 15; /* V */ + break; + case 0: + default: + return 3; /* \ */ + break; + } + + break; + + case '/': + + /* CHECK -- handle noisy half-diags */ + if (_simSum == 1) { + if (pixels[1] == pixels[3] && pixels[3] == pixels[5] && + pixels[5] == pixels[7]) { + if (pixels[0] != pixels[1] && pixels[8] != pixels[1]) { + sum = labs(bptr[0] - bptr[4]) + + labs(bptr[8] - bptr[4]); + + if (sim[2] && sum < (labs(bptr[6] - bptr[4]) << 1)) { + if (bptr[4] > bptr[6]) { + if (bptr[0] > bptr[4] && + bptr[8] > bptr[4]) + return 16; /* \' */ + } else { + if (bptr[0] < bptr[4] && + bptr[8] < bptr[4]) + return 16; /* \' */ + } + } + + if (sim[5] && sum < (labs(bptr[2] - bptr[4]) << 1)) { + if (bptr[4] > bptr[2]) { + if (bptr[0] > bptr[4] && + bptr[8] > bptr[4]) { + if (pixels[6] == pixels[4]) + return 17; /* .\ */ + return 3; /* \ */ + } + } else { + if (bptr[0] < bptr[4] && + bptr[8] < bptr[4]) { + if (pixels[6] == pixels[4]) + return 17; /* .\ */ + return 3; /* \ */ + } + } + } + } + } + + if (sim[2] && + labs(bptr[4] - bptr[2]) < ((int16)1 << (GREY_SHIFT - 3))) + return 9; /* / */ + if (sim[5] && + labs(bptr[4] - bptr[6]) < ((int16)1 << (GREY_SHIFT - 3))) + return 9; /* / */ + } + + diff_array[0] = labs(bptr[4] - bptr[0]); + diff_array[1] = labs(bptr[4] - bptr[5]); + diff_array[3] = labs(bptr[7] - bptr[8]); + diff_array[4] = labs(bptr[1] - bptr[2]); + diff_array[5] = labs(bptr[4] - bptr[3]); + diff_array[6] = labs(bptr[4] - bptr[8]); + diff_array[7] = labs(bptr[0] - bptr[1]); + diff_array[9] = labs(bptr[6] - bptr[7]); + diff_array[10] = labs(bptr[4] - bptr[7]); + diff_array[11] = labs(bptr[5] - bptr[8]); + diff_array[12] = labs(bptr[3] - bptr[6]); + diff_array[13] = labs(bptr[4] - bptr[1]); + diff_array[14] = labs(bptr[0] - bptr[3]); + diff_array[15] = labs(bptr[2] - bptr[5]); + diff_array[16] = labs(bptr[4] - bptr[2]); + diff_array[17] = labs(bptr[1] - bptr[3]); + diff_array[18] = labs(bptr[4] - bptr[6]); + diff_array[19] = labs(bptr[5] - bptr[7]); + diff_array[20] = labs(bptr[0] - bptr[2]); + diff_array[21] = labs(bptr[6] - bptr[8]); + diff_array[22] = labs(bptr[0] - bptr[6]); + diff_array[23] = labs(bptr[2] - bptr[8]); + + /* |' */ + sums_dir[1] = diff_array[10] + diff_array[12] + diff_array[16] + + diff_array[17] + (diff_array[11] << 1); + /* |' alt */ + sum = diff_array[16] + diff_array[10] + diff_array[7] + + diff_array[14] + diff_array[12] + diff_array[23]; + if (sum < sums_dir[1]) + sums_dir[1] = sum; + + /* .| */ + sums_dir[2] = diff_array[13] + diff_array[15] + diff_array[18] + + diff_array[19] + (diff_array[14] << 1); + /* .| alt */ + sum = diff_array[18] + diff_array[13] + diff_array[3] + + diff_array[11] + diff_array[15] + diff_array[22]; + if (sum < sums_dir[2]) + sums_dir[2] = sum; + + /* -' */ + sums_dir[3] = diff_array[5] + diff_array[9] + diff_array[16] + + diff_array[19] + (diff_array[7] << 1); + /* -' alt */ + sum = diff_array[16] + diff_array[5] + diff_array[11] + + diff_array[3] + diff_array[9] + diff_array[20]; + if (sum < sums_dir[3]) + sums_dir[3] = sum; + + /* .- */ + sums_dir[4] = diff_array[1] + diff_array[4] + diff_array[17] + + diff_array[18] + (diff_array[3] << 1); + /* .- alt */ + sum = diff_array[18] + diff_array[1] + diff_array[14] + + diff_array[7] + diff_array[4] + diff_array[21]; + if (sum < sums_dir[4]) + sums_dir[4] = sum; + + /* / 135 */ + sums_dir[0] = diff_array[16] + diff_array[18] + + (diff_array[17] << 1) + (diff_array[19] << 1); + + /* << top */ + sum = labs(bptr[3] - bptr[1]) + labs(bptr[3] - bptr[7]) + + ((labs(bptr[4] - bptr[2]) + labs(bptr[4] - bptr[8]) + + labs(bptr[5] - bptr[1]) + labs(bptr[5] - bptr[7])) << 1) + + labs(bptr[0] - bptr[6]) + labs(bptr[1] - bptr[7]) + + labs(bptr[2] - bptr[8]); + sum = (sum * 6) / 13; + sums_dir[5] = sum; + + /* >> top */ + sum = labs(bptr[5] - bptr[1]) + labs(bptr[5] - bptr[7]) + + ((labs(bptr[4] - bptr[0]) + labs(bptr[4] - bptr[6]) + + labs(bptr[3] - bptr[1]) + labs(bptr[3] - bptr[7])) << 1) + + labs(bptr[2] - bptr[8]) + labs(bptr[1] - bptr[7]) + + labs(bptr[0] - bptr[6]); + sum = (sum * 6) / 13; + sums_dir[6] = sum; + + /* ^ top */ + sum = labs(bptr[1] - bptr[3]) + labs(bptr[1] - bptr[5]) + + ((labs(bptr[4] - bptr[6]) + labs(bptr[4] - bptr[8]) + + labs(bptr[7] - bptr[3]) + labs(bptr[7] - bptr[5])) << 1) + + labs(bptr[0] - bptr[2]) + labs(bptr[3] - bptr[5]) + + labs(bptr[6] - bptr[8]); + sum = (sum * 6) / 13; + sums_dir[7] = sum; + + /* v top */ + sum = labs(bptr[7] - bptr[3]) + labs(bptr[7] - bptr[5]) + + ((labs(bptr[4] - bptr[0]) + labs(bptr[4] - bptr[2]) + + labs(bptr[1] - bptr[3]) + labs(bptr[1] - bptr[5])) << 1) + + labs(bptr[6] - bptr[8]) + labs(bptr[3] - bptr[5]) + + labs(bptr[0] - bptr[2]); + sum = (sum * 6) / 13; + sums_dir[8] = sum; + + best_sum = sums_dir[0]; + for (i = 1; i < 9; i++) + if (sums_dir[i] < best_sum) best_sum = sums_dir[i]; + + best_dir = 0; + for (i = 0, n = 0; i < 9; i++) { + if (sums_dir[i] == best_sum) { + best_dir = i; + n++; + } + } + + /* CHECK -- handle zig-zags */ + if (_simSum == 3) { + if ((best_dir == 0 || best_dir == 1) && + sim[2] && sim[4] && sim[6]) + return 7; /* |' */ + if ((best_dir == 0 || best_dir == 2) && + sim[1] && sim[3] && sim[5]) + return 8; /* .| */ + if ((best_dir == 0 || best_dir == 3) && + sim[1] && sim[2] && sim[3]) + return 10; /* -' */ + if ((best_dir == 0 || best_dir == 4) && + sim[4] && sim[5] && sim[6]) + return 11; /* .- */ + } + + if (n > 1 && best_sum == sums_dir[0]) return 9; /* / */ + + /* best direction uncertain, return non-edge to avoid artifacts */ + if (n > 1) return -1; + + /* CHECK -- diagonal intersections */ + if (best_dir == 0 && + (sim[1] == sim[3] || sim[4] == sim[6]) && + (sim[1] == sim[4] || sim[3] == sim[6])) { + if ((pixels[1] == pixels[5] || pixels[3] == pixels[7]) || + ((pixels[2] == pixels[4]) ^ (pixels[6] == pixels[4]))) { + if (pixels[0] == pixels[4]) + return 18; /* '/ */ + if (pixels[8] == pixels[4]) + return 19; /* /. */ + } + + if (_simSum == 3 && sim[2] && sim[5] && + pixels[1] == pixels[3] && pixels[3] == pixels[5] && + pixels[5] == pixels[7]) { + if (sim[0]) + return 18; /* '/ */ + if (sim[7]) + return 19; /* /. */ + } + + if (_simSum == 3 && sim[0] && sim[7]) { + if (sim[2]) + return 16; /* \' */ + if (sim[5]) + return 17; /* .\ */ + } + } + + if (best_dir >= 5) + ok_arrow_flag = checkArrows(best_dir, pixels, sim, 0); + + switch (best_dir) { + case 1: + return 7; /* |' */ + break; + case 2: + return 8; /* .| */ + break; + case 3: + return 10; /* -' */ + break; + case 4: + return 11; /* .- */ + break; + case 5: + if (ok_arrow_flag) + return 12; /* < */ + break; + case 6: + if (ok_arrow_flag) + return 13; /* > */ + break; + case 7: + if (ok_arrow_flag) + return 14; /* ^ */ + break; + case 8: + if (ok_arrow_flag) + return 15; /* V */ + break; + break; + case 0: + default: + return 9; /* / */ + break; + } + + break; + + case '*': + return 127; + break; + + case '0': + default: + return -1; + break; } return -1; @@ -1754,132 +1672,121 @@ int EdgePlugin::fixKnights(int sub_type, uint16 *pixels, int8 *sim) { */ /* check to see if original knight is ok */ - switch(sub_type) - { - case 1: /* '- */ - if (sim[0] && sim[4] && - !(_simSum == 3 && sim[5] && - pixels[0] == pixels[4] && pixels[6] == pixels[4])) - ok_orig_flag = 1; - break; + switch (sub_type) { + case 1: /* '- */ + if (sim[0] && sim[4] && + !(_simSum == 3 && sim[5] && + pixels[0] == pixels[4] && pixels[6] == pixels[4])) + ok_orig_flag = 1; + break; - case 2: /* -. */ - if (sim[3] && sim[7] && - !(_simSum == 3 && sim[2] && - pixels[2] == pixels[4] && pixels[8] == pixels[4])) - ok_orig_flag = 1; - break; + case 2: /* -. */ + if (sim[3] && sim[7] && + !(_simSum == 3 && sim[2] && + pixels[2] == pixels[4] && pixels[8] == pixels[4])) + ok_orig_flag = 1; + break; - case 4: /* '| */ - if (sim[0] && sim[6] && - !(_simSum == 3 && sim[2] && - pixels[0] == pixels[4] && pixels[2] == pixels[4])) - ok_orig_flag = 1; - break; + case 4: /* '| */ + if (sim[0] && sim[6] && + !(_simSum == 3 && sim[2] && + pixels[0] == pixels[4] && pixels[2] == pixels[4])) + ok_orig_flag = 1; + break; - case 5: /* |. */ - if (sim[1] && sim[7] && - !(_simSum == 3 && sim[5] && - pixels[6] == pixels[4] && pixels[8] == pixels[4])) - ok_orig_flag = 1; - break; + case 5: /* |. */ + if (sim[1] && sim[7] && + !(_simSum == 3 && sim[5] && + pixels[6] == pixels[4] && pixels[8] == pixels[4])) + ok_orig_flag = 1; + break; - case 7: /* |' */ - if (sim[2] && sim[6] && - !(_simSum == 3 && sim[0] && - pixels[0] == pixels[4] && pixels[2] == pixels[4])) - ok_orig_flag = 1; - break; + case 7: /* |' */ + if (sim[2] && sim[6] && + !(_simSum == 3 && sim[0] && + pixels[0] == pixels[4] && pixels[2] == pixels[4])) + ok_orig_flag = 1; + break; - case 8: /* .| */ - if (sim[1] && sim[5] && - !(_simSum == 3 && sim[7] && - pixels[6] == pixels[4] && pixels[8] == pixels[4])) - ok_orig_flag = 1; - break; + case 8: /* .| */ + if (sim[1] && sim[5] && + !(_simSum == 3 && sim[7] && + pixels[6] == pixels[4] && pixels[8] == pixels[4])) + ok_orig_flag = 1; + break; - case 10: /* -' */ - if (sim[2] && sim[3] && - !(_simSum == 3 && sim[7] && - pixels[2] == pixels[4] && pixels[8] == pixels[4])) - ok_orig_flag = 1; - break; + case 10: /* -' */ + if (sim[2] && sim[3] && + !(_simSum == 3 && sim[7] && + pixels[2] == pixels[4] && pixels[8] == pixels[4])) + ok_orig_flag = 1; + break; - case 11: /* .- */ - if (sim[4] && sim[5] && - !(_simSum == 3 && sim[0] && - pixels[0] == pixels[4] && pixels[6] == pixels[4])) - ok_orig_flag = 1; - break; + case 11: /* .- */ + if (sim[4] && sim[5] && + !(_simSum == 3 && sim[0] && + pixels[0] == pixels[4] && pixels[6] == pixels[4])) + ok_orig_flag = 1; + break; - default: /* not a knight */ - return sub_type; - break; + default: /* not a knight */ + return sub_type; + break; } /* look for "better" knights */ - if (center == pixels[0] && center == pixels[5]) /* '- */ - { + if (center == pixels[0] && center == pixels[5]) { /* '- */ dir = 1; flags[dir] = 1; n++; } - if (center == pixels[3] && center == pixels[8]) /* -. */ - { + if (center == pixels[3] && center == pixels[8]) { /* -. */ dir = 2; flags[dir] = 1; n++; } - if (center == pixels[0] && center == pixels[7]) /* '| */ - { + if (center == pixels[0] && center == pixels[7]) { /* '| */ dir = 4; flags[dir] = 1; n++; } - if (center == pixels[1] && center == pixels[8]) /* |. */ - { + if (center == pixels[1] && center == pixels[8]) { /* |. */ dir = 5; flags[dir] = 1; n++; } - if (center == pixels[2] && center == pixels[7]) /* |' */ - { + if (center == pixels[2] && center == pixels[7]) { /* |' */ dir = 7; flags[dir] = 1; n++; } - if (center == pixels[1] && center == pixels[6]) /* .| */ - { + if (center == pixels[1] && center == pixels[6]) { /* .| */ dir = 8; flags[dir] = 1; n++; } - if (center == pixels[3] && center == pixels[2]) /* -' */ - { + if (center == pixels[3] && center == pixels[2]) { /* -' */ dir = 10; flags[dir] = 1; n++; } - if (center == pixels[6] && center == pixels[5]) /* .- */ - { + if (center == pixels[6] && center == pixels[5]) { /* .- */ dir = 11; flags[dir] = 1; n++; } - if (n == 0) - { + if (n == 0) { if (ok_orig_flag) return sub_type; return -1; } if (n == 1) return dir; - if (n == 2) - { + if (n == 2) { /* slanted W patterns */ - if (flags[1] && flags[5]) return 3; /* \ */ - if (flags[2] && flags[4]) return 3; /* \ */ - if (flags[7] && flags[11]) return 9; /* / */ - if (flags[8] && flags[10]) return 9; /* / */ + if (flags[1] && flags[5]) return 3; /* \ */ + if (flags[2] && flags[4]) return 3; /* \ */ + if (flags[7] && flags[11]) return 9; /* / */ + if (flags[8] && flags[10]) return 9; /* / */ } if (flags[sub_type] && ok_orig_flag) return sub_type; @@ -1889,17 +1796,17 @@ int EdgePlugin::fixKnights(int sub_type, uint16 *pixels, int8 *sim) { /* From ScummVM HQ2x/HQ3x scalers (Maxim Stepin and Max Horn) */ -#define highBits 0xF7DEF7DE -#define lowBits 0x08210821 -#define qhighBits 0xE79CE79C -#define qlowBits 0x18631863 -#define redblueMask 0xF81F -#define greenMask 0x07E0 +#define highBits 0xF7DEF7DE +#define lowBits 0x08210821 +#define qhighBits 0xE79CE79C +#define qlowBits 0x18631863 +#define redblueMask 0xF81F +#define greenMask 0x07E0 /* Fill pixel grid without interpolation, using the detected edge */ template void EdgePlugin::anti_alias_grid_clean_3x(uint8 *dptr, int dstPitch, - uint16 *pixels, int sub_type, int16 *bptr) { + uint16 *pixels, int sub_type, int16 *bptr) { uint16 *dptr2; int16 tmp_grey; uint16 center = pixels[4]; @@ -1908,581 +1815,576 @@ void EdgePlugin::anti_alias_grid_clean_3x(uint8 *dptr, int dstPitch, uint16 *ptmp; int i; - switch (sub_type) - { - case 1: /* '- */ - for (i = 0; i < 9; i++) - tmp[i] = center; + switch (sub_type) { + case 1: /* '- */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[6]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[3]); + diff2 = labs(bptr[4] - bptr[7]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[6] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[6] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[6] = pixels[7]; + else + tmp[6] = pixels[4]; - tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); tmp_grey = _chosenGreyscale[tmp[6]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[8]); + if (diff1 <= diff2) + tmp[7] = tmp[6]; + } + + break; + + case 2: /* -. */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); + tmp_grey = _chosenGreyscale[tmp[2]]; #if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[3]); - diff2 = labs(bptr[4] - bptr[7]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[6] = center; - else /* choose nearest pixel */ + diff1 = labs(bptr[4] - bptr[5]); + diff2 = labs(bptr[4] - bptr[1]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[2] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[6] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[6] = pixels[7]; - else - tmp[6] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[5]; + else + tmp[2] = pixels[4]; - tmp_grey = _chosenGreyscale[tmp[6]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[8]); - if (diff1 <= diff2) - tmp[7] = tmp[6]; - } - - break; - - case 2: /* -. */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); tmp_grey = _chosenGreyscale[tmp[2]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[5]); - diff2 = labs(bptr[4] - bptr[1]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[2] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[5]; - else - tmp[2] = pixels[4]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[0]); + if (diff1 <= diff2) + tmp[1] = tmp[2]; + } - tmp_grey = _chosenGreyscale[tmp[2]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[0]); - if (diff1 <= diff2) - tmp[1] = tmp[2]; - } + break; - break; - - case 3: /* \ */ - case 16: /* \' */ - case 17: /* .\ */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - if (sub_type != 16) - { - tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[5]; - else - tmp[2] = pixels[4]; - } - - if (sub_type != 17) - { - tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); - diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[6] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[6] = pixels[7]; - else - tmp[6] = pixels[4]; - } - - break; - - case 4: /* '| */ - for (i = 0; i < 9; i++) - tmp[i] = center; + case 3: /* \ */ + case 16: /* \' */ + case 17: /* .\ */ + for (i = 0; i < 9; i++) + tmp[i] = center; + if (sub_type != 16) { tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); - tmp_grey = _chosenGreyscale[tmp[2]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[1]); - diff2 = labs(bptr[4] - bptr[5]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[2] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[5]; - else - tmp[2] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[2]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[8]); - if (diff1 <= diff2) - tmp[5] = tmp[2]; - } - - break; - - case 5: /* |. */ - for (i = 0; i < 9; i++) - tmp[i] = center; + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[5]; + else + tmp[2] = pixels[4]; + } + if (sub_type != 17) { tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[6]]; + diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[6] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[6] = pixels[7]; + else + tmp[6] = pixels[4]; + } + + break; + + case 4: /* '| */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); + tmp_grey = _chosenGreyscale[tmp[2]]; #if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[7]); - diff2 = labs(bptr[4] - bptr[3]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[6] = center; - else /* choose nearest pixel */ + diff1 = labs(bptr[4] - bptr[1]); + diff2 = labs(bptr[4] - bptr[5]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[2] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[6] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[6] = pixels[7]; - else - tmp[6] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[5]; + else + tmp[2] = pixels[4]; - tmp_grey = _chosenGreyscale[tmp[6]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[0]); - if (diff1 <= diff2) - tmp[3] = tmp[6]; - } - - break; - - case 7: /* |' */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); - tmp_grey = _chosenGreyscale[tmp[0]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[1]); - diff2 = labs(bptr[4] - bptr[3]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[0] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[0]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[6]); - if (diff1 <= diff2) - tmp[3] = tmp[0]; - } - - break; - - case 8: /* .| */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[8]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[7]); - diff2 = labs(bptr[4] - bptr[5]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[8] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[8] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[8] = pixels[7]; - else - tmp[8] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[8]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[2]); - if (diff1 <= diff2) - tmp[5] = tmp[8]; - } - - break; - - case 9: /* / */ - case 18: /* '/ */ - case 19: /* /. */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - if (sub_type != 18) - { - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; - } - - if (sub_type != 19) - { - tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); - diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[8] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[8] = pixels[7]; - else - tmp[8] = pixels[4]; - } - - break; - - case 10: /* -' */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[8]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[5]); - diff2 = labs(bptr[4] - bptr[7]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[8] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[8] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[8] = pixels[7]; - else - tmp[8] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[8]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[6]); - if (diff1 <= diff2) - tmp[7] = tmp[8]; - } - - break; - - case 11: /* .- */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); - tmp_grey = _chosenGreyscale[tmp[0]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[3]); - diff2 = labs(bptr[4] - bptr[1]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[0] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[0]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[2]); - if (diff1 <= diff2) - tmp[1] = tmp[0]; - } - - break; - - case 12: /* < */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); - tmp_grey = _chosenGreyscale[tmp[0]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[1]); - diff2 = labs(bptr[4] - bptr[3]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[0] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; - } - - tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[6]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[3]); - diff2 = labs(bptr[4] - bptr[7]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[6] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[6] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[6] = pixels[7]; - else - tmp[6] = pixels[4]; - } - - break; - - case 13: /* > */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); tmp_grey = _chosenGreyscale[tmp[2]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[5]); - diff2 = labs(bptr[4] - bptr[1]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[2] = center; - else /* choose nearest pixel */ + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[8]); + if (diff1 <= diff2) + tmp[5] = tmp[2]; + } + + break; + + case 5: /* |. */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[6]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[7]); + diff2 = labs(bptr[4] - bptr[3]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[6] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[5]; - else - tmp[2] = pixels[4]; - } + { + diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[6] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[6] = pixels[7]; + else + tmp[6] = pixels[4]; - tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[8]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[7]); - diff2 = labs(bptr[4] - bptr[5]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[8] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[8] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[8] = pixels[7]; - else - tmp[8] = pixels[4]; - } - - break; - - case 14: /* ^ */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); - tmp_grey = _chosenGreyscale[tmp[0]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[1]); - diff2 = labs(bptr[4] - bptr[3]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[0] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; - } - - tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); - tmp_grey = _chosenGreyscale[tmp[2]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[5]); - diff2 = labs(bptr[4] - bptr[1]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[2] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[5]; - else - tmp[2] = pixels[4]; - } - - break; - - case 15: /* v */ - for (i = 0; i < 9; i++) - tmp[i] = center; - - tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); tmp_grey = _chosenGreyscale[tmp[6]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[3]); - diff2 = labs(bptr[4] - bptr[7]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[6] = center; - else /* choose nearest pixel */ + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[0]); + if (diff1 <= diff2) + tmp[3] = tmp[6]; + } + + break; + + case 7: /* |' */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + tmp_grey = _chosenGreyscale[tmp[0]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[1]); + diff2 = labs(bptr[4] - bptr[3]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[0] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[6] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[6] = pixels[7]; - else - tmp[6] = pixels[4]; - } + { + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; + + tmp_grey = _chosenGreyscale[tmp[0]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[6]); + if (diff1 <= diff2) + tmp[3] = tmp[0]; + } + + break; + + case 8: /* .| */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[8]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[7]); + diff2 = labs(bptr[4] - bptr[5]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[8] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[8] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[8] = pixels[7]; + else + tmp[8] = pixels[4]; - tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); tmp_grey = _chosenGreyscale[tmp[8]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[7]); - diff2 = labs(bptr[4] - bptr[5]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[8] = center; - else /* choose nearest pixel */ + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[2]); + if (diff1 <= diff2) + tmp[5] = tmp[8]; + } + + break; + + case 9: /* / */ + case 18: /* '/ */ + case 19: /* /. */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + if (sub_type != 18) { + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; + } + + if (sub_type != 19) { + tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); + diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[8] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[8] = pixels[7]; + else + tmp[8] = pixels[4]; + } + + break; + + case 10: /* -' */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[8]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[5]); + diff2 = labs(bptr[4] - bptr[7]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[8] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[8] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[8] = pixels[7]; - else - tmp[8] = pixels[4]; - } + { + diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[8] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[8] = pixels[7]; + else + tmp[8] = pixels[4]; - break; + tmp_grey = _chosenGreyscale[tmp[8]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[6]); + if (diff1 <= diff2) + tmp[7] = tmp[8]; + } - case 127: /* * */ - case -1: /* no edge */ - case 0: /* - */ - case 6: /* | */ - default: - dptr2 = ((uint16 *) (dptr - dstPitch)) - 1; - *dptr2++ = center; - *dptr2++ = center; - *dptr2 = center; - dptr2 = ((uint16 *) dptr) - 1; - *dptr2++ = center; - *dptr2++ = center; + break; + + case 11: /* .- */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + tmp_grey = _chosenGreyscale[tmp[0]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[3]); + diff2 = labs(bptr[4] - bptr[1]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[0] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; + + tmp_grey = _chosenGreyscale[tmp[0]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[2]); + if (diff1 <= diff2) + tmp[1] = tmp[0]; + } + + break; + + case 12: /* < */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + tmp_grey = _chosenGreyscale[tmp[0]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[1]); + diff2 = labs(bptr[4] - bptr[3]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[0] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; + } + + tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[6]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[3]); + diff2 = labs(bptr[4] - bptr[7]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[6] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[6] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[6] = pixels[7]; + else + tmp[6] = pixels[4]; + } + + break; + + case 13: /* > */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); + tmp_grey = _chosenGreyscale[tmp[2]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[5]); + diff2 = labs(bptr[4] - bptr[1]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[2] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[5]; + else + tmp[2] = pixels[4]; + } + + tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[8]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[7]); + diff2 = labs(bptr[4] - bptr[5]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[8] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[8] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[8] = pixels[7]; + else + tmp[8] = pixels[4]; + } + + break; + + case 14: /* ^ */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + tmp_grey = _chosenGreyscale[tmp[0]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[1]); + diff2 = labs(bptr[4] - bptr[3]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[0] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; + } + + tmp[2] = interpolate_1_1_1(pixels[1], pixels[5], center); + tmp_grey = _chosenGreyscale[tmp[2]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[5]); + diff2 = labs(bptr[4] - bptr[1]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[2] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[5]; + else + tmp[2] = pixels[4]; + } + + break; + + case 15: /* v */ + for (i = 0; i < 9; i++) + tmp[i] = center; + + tmp[6] = interpolate_1_1_1(pixels[3], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[6]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[3]); + diff2 = labs(bptr[4] - bptr[7]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[6] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[6], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[6], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[6], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[6] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[6] = pixels[7]; + else + tmp[6] = pixels[4]; + } + + tmp[8] = interpolate_1_1_1(pixels[5], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[8]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[7]); + diff2 = labs(bptr[4] - bptr[5]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[8] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[8], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[8], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[8], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[8] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[8] = pixels[7]; + else + tmp[8] = pixels[4]; + } + + break; + + case 127: /* * */ + case -1: /* no edge */ + case 0: /* - */ + case 6: /* | */ + default: + dptr2 = ((uint16 *)(dptr - dstPitch)) - 1; + *dptr2++ = center; + *dptr2++ = center; + *dptr2 = center; + dptr2 = ((uint16 *) dptr) - 1; + *dptr2++ = center; + *dptr2++ = center; #if DEBUG_REFRESH_RANDOM_XOR - *dptr2 = center ^ (uint16) (dxorshift_128() * (1L<<16)); + *dptr2 = center ^ (uint16)(dxorshift_128() * (1L << 16)); #else - *dptr2 = center; + *dptr2 = center; #endif - dptr2 = ((uint16 *) (dptr + dstPitch)) - 1; - *dptr2++ = center; - *dptr2++ = center; - *dptr2 = center; + dptr2 = ((uint16 *)(dptr + dstPitch)) - 1; + *dptr2++ = center; + *dptr2++ = center; + *dptr2 = center; - return; + return; - break; + break; } ptmp = tmp; - dptr2 = ((uint16 *) (dptr - dstPitch)) - 1; + dptr2 = ((uint16 *)(dptr - dstPitch)) - 1; *dptr2++ = *ptmp++; *dptr2++ = *ptmp++; *dptr2 = *ptmp++; @@ -2490,11 +2392,11 @@ void EdgePlugin::anti_alias_grid_clean_3x(uint8 *dptr, int dstPitch, *dptr2++ = *ptmp++; *dptr2++ = *ptmp++; #if DEBUG_REFRESH_RANDOM_XOR - *dptr2 = *ptmp++ ^ (uint16) (dxorshift_128() * (1L<<16)); + *dptr2 = *ptmp++ ^ (uint16)(dxorshift_128() * (1L << 16)); #else *dptr2 = *ptmp++; #endif - dptr2 = ((uint16 *) (dptr + dstPitch)) - 1; + dptr2 = ((uint16 *)(dptr + dstPitch)) - 1; *dptr2++ = *ptmp++; *dptr2++ = *ptmp++; *dptr2 = *ptmp; @@ -2505,9 +2407,9 @@ void EdgePlugin::anti_alias_grid_clean_3x(uint8 *dptr, int dstPitch, /* Fill pixel grid with or without interpolation, using the detected edge */ template void EdgePlugin::anti_alias_grid_2x(uint8 *dptr, int dstPitch, - uint16 *pixels, int sub_type, int16 *bptr, - int8 *sim, - int interpolate_2x) { + uint16 *pixels, int sub_type, int16 *bptr, + int8 *sim, + int interpolate_2x) { uint16 *dptr2; uint16 center = pixels[4]; int32 diff1, diff2, diff3; @@ -2515,948 +2417,851 @@ void EdgePlugin::anti_alias_grid_2x(uint8 *dptr, int dstPitch, uint16 tmp[4]; uint16 *ptmp; - switch (sub_type) - { - case 1: /* '- */ - tmp[0] = tmp[1] = tmp[3] = center; + switch (sub_type) { + case 1: /* '- */ + tmp[0] = tmp[1] = tmp[3] = center; + + tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[2]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[3]); + diff2 = labs(bptr[4] - bptr[7]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[2] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[7]; + else + tmp[2] = pixels[4]; - tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); tmp_grey = _chosenGreyscale[tmp[2]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[3]); - diff2 = labs(bptr[4] - bptr[7]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[2] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[7]; - else - tmp[2] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[2]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[8]); - if (diff1 <= diff2) - { - if (interpolate_2x) - { - uint16 tmp_pixel = tmp[2]; - tmp[2] = interpolate_3_1(tmp_pixel, center); - tmp[3] = interpolate_3_1(center, tmp_pixel); - } + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[8]); + if (diff1 <= diff2) { + if (interpolate_2x) { + uint16 tmp_pixel = tmp[2]; + tmp[2] = interpolate_3_1(tmp_pixel, center); + tmp[3] = interpolate_3_1(center, tmp_pixel); } - else - { - if (interpolate_2x) - { - tmp[2] = interpolate_1_1(tmp[2], center); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[2]]) - tmp[2] = center; - } - } - } - - break; - - case 2: /* -. */ - tmp[0] = tmp[2] = tmp[3] = center; - - tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); - tmp_grey = _chosenGreyscale[tmp[1]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[5]); - diff2 = labs(bptr[4] - bptr[1]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[1] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[1] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[1] = pixels[5]; - else - tmp[1] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[1]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[0]); - if (diff1 <= diff2) - { - if (interpolate_2x) - { - uint16 tmp_pixel = tmp[1]; - tmp[1] = interpolate_3_1(tmp_pixel, center); - tmp[0] = interpolate_3_1(center, tmp_pixel); - } - } - else - { - if (interpolate_2x) - { - tmp[1] = interpolate_1_1(tmp[1], center); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[1]]) - tmp[1] = center; - } - } - } - - break; - - case 3: /* \ */ - case 16: /* \' */ - case 17: /* .\ */ - tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; - - if (sub_type != 16) - { - tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); - diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[1] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[1] = pixels[5]; - else - tmp[1] = pixels[4]; - - if (interpolate_2x) - { - tmp[1] = interpolate_1_1(tmp[1], center); - } - /* sim test is for hyper-cephalic kitten eyes and squeeze toy - * mouse pointer in Sam&Max. Half-diags can be too thin in 2x - * nearest-neighbor, so detect them and don't anti-alias them. - */ - else if (bptr[4] > _chosenGreyscale[tmp[1]] || - (_simSum == 1 && (sim[0] || sim[7]) && - pixels[1] == pixels[3] && pixels[5] == pixels[7])) - tmp[1] = center; - } - - if (sub_type != 17) - { - tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[7]; - else - tmp[2] = pixels[4]; - - if (interpolate_2x) - { + } else { + if (interpolate_2x) { tmp[2] = interpolate_1_1(tmp[2], center); + } else { + if (bptr[4] > _chosenGreyscale[tmp[2]]) + tmp[2] = center; } - /* sim test is for hyper-cephalic kitten eyes and squeeze toy - * mouse pointer in Sam&Max. Half-diags can be too thin in 2x - * nearest-neighbor, so detect them and don't anti-alias them. - */ - else if (bptr[4] > _chosenGreyscale[tmp[2]] || - (_simSum == 1 && (sim[0] || sim[7]) && - pixels[1] == pixels[3] && pixels[5] == pixels[7])) - tmp[2] = center; } + } - break; + break; - case 4: /* '| */ - tmp[0] = tmp[2] = tmp[3] = center; + case 2: /* -. */ + tmp[0] = tmp[2] = tmp[3] = center; + + tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); + tmp_grey = _chosenGreyscale[tmp[1]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[5]); + diff2 = labs(bptr[4] - bptr[1]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[1] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[1] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[1] = pixels[5]; + else + tmp[1] = pixels[4]; - tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); tmp_grey = _chosenGreyscale[tmp[1]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[1]); - diff2 = labs(bptr[4] - bptr[5]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[0]); + if (diff1 <= diff2) { + if (interpolate_2x) { + uint16 tmp_pixel = tmp[1]; + tmp[1] = interpolate_3_1(tmp_pixel, center); + tmp[0] = interpolate_3_1(center, tmp_pixel); + } + } else { + if (interpolate_2x) { + tmp[1] = interpolate_1_1(tmp[1], center); + } else { + if (bptr[4] > _chosenGreyscale[tmp[1]]) + tmp[1] = center; + } + } + } + + break; + + case 3: /* \ */ + case 16: /* \' */ + case 17: /* .\ */ + tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; + + if (sub_type != 16) { + tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); + diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[1] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[1] = pixels[5]; + else + tmp[1] = pixels[4]; + + if (interpolate_2x) { + tmp[1] = interpolate_1_1(tmp[1], center); + } + /* sim test is for hyper-cephalic kitten eyes and squeeze toy + * mouse pointer in Sam&Max. Half-diags can be too thin in 2x + * nearest-neighbor, so detect them and don't anti-alias them. + */ + else if (bptr[4] > _chosenGreyscale[tmp[1]] || + (_simSum == 1 && (sim[0] || sim[7]) && + pixels[1] == pixels[3] && pixels[5] == pixels[7])) tmp[1] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[1] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[1] = pixels[5]; - else - tmp[1] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[1]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[8]); - if (diff1 <= diff2) - { - if (interpolate_2x) - { - uint16 tmp_pixel = tmp[1]; - tmp[1] = interpolate_3_1(tmp_pixel, center); - tmp[3] = interpolate_3_1(center, tmp_pixel); - } - } - else - { - if (interpolate_2x) - { - tmp[1] = interpolate_1_1(tmp[1], center); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[1]]) - tmp[1] = center; - } - } - } - - break; - - case 5: /* |. */ - tmp[0] = tmp[1] = tmp[3] = center; + } + if (sub_type != 17) { tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[2]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[7]); - diff2 = labs(bptr[4] - bptr[3]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[7]; + else + tmp[2] = pixels[4]; + + if (interpolate_2x) { + tmp[2] = interpolate_1_1(tmp[2], center); + } + /* sim test is for hyper-cephalic kitten eyes and squeeze toy + * mouse pointer in Sam&Max. Half-diags can be too thin in 2x + * nearest-neighbor, so detect them and don't anti-alias them. + */ + else if (bptr[4] > _chosenGreyscale[tmp[2]] || + (_simSum == 1 && (sim[0] || sim[7]) && + pixels[1] == pixels[3] && pixels[5] == pixels[7])) tmp[2] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[7]; - else - tmp[2] = pixels[4]; + } - tmp_grey = _chosenGreyscale[tmp[2]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[0]); - if (diff1 <= diff2) - { - if (interpolate_2x) - { - uint16 tmp_pixel = tmp[2]; - tmp[2] = interpolate_3_1(tmp_pixel, center); - tmp[0] = interpolate_3_1(center, tmp_pixel); - } + break; + + case 4: /* '| */ + tmp[0] = tmp[2] = tmp[3] = center; + + tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); + tmp_grey = _chosenGreyscale[tmp[1]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[1]); + diff2 = labs(bptr[4] - bptr[5]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[1] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[1] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[1] = pixels[5]; + else + tmp[1] = pixels[4]; + + tmp_grey = _chosenGreyscale[tmp[1]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[8]); + if (diff1 <= diff2) { + if (interpolate_2x) { + uint16 tmp_pixel = tmp[1]; + tmp[1] = interpolate_3_1(tmp_pixel, center); + tmp[3] = interpolate_3_1(center, tmp_pixel); } - else - { - if (interpolate_2x) - { - tmp[2] = interpolate_1_1(tmp[2], center); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[2]]) - tmp[2] = center; - } + } else { + if (interpolate_2x) { + tmp[1] = interpolate_1_1(tmp[1], center); + } else { + if (bptr[4] > _chosenGreyscale[tmp[1]]) + tmp[1] = center; } } + } - break; + break; - case 7: /* |' */ - tmp[1] = tmp[2] = tmp[3] = center; + case 5: /* |. */ + tmp[0] = tmp[1] = tmp[3] = center; + + tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[2]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[7]); + diff2 = labs(bptr[4] - bptr[3]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[2] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[7]; + else + tmp[2] = pixels[4]; + + tmp_grey = _chosenGreyscale[tmp[2]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[0]); + if (diff1 <= diff2) { + if (interpolate_2x) { + uint16 tmp_pixel = tmp[2]; + tmp[2] = interpolate_3_1(tmp_pixel, center); + tmp[0] = interpolate_3_1(center, tmp_pixel); + } + } else { + if (interpolate_2x) { + tmp[2] = interpolate_1_1(tmp[2], center); + } else { + if (bptr[4] > _chosenGreyscale[tmp[2]]) + tmp[2] = center; + } + } + } + + break; + + case 7: /* |' */ + tmp[1] = tmp[2] = tmp[3] = center; + + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + tmp_grey = _chosenGreyscale[tmp[0]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[1]); + diff2 = labs(bptr[4] - bptr[3]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[0] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); tmp_grey = _chosenGreyscale[tmp[0]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[1]); - diff2 = labs(bptr[4] - bptr[3]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[0] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[0]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[6]); - if (diff1 <= diff2) - { - if (interpolate_2x) - { - uint16 tmp_pixel = tmp[0]; - tmp[0] = interpolate_3_1(tmp_pixel, center); - tmp[2] = interpolate_3_1(center, tmp_pixel); - } + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[6]); + if (diff1 <= diff2) { + if (interpolate_2x) { + uint16 tmp_pixel = tmp[0]; + tmp[0] = interpolate_3_1(tmp_pixel, center); + tmp[2] = interpolate_3_1(center, tmp_pixel); } - else - { - if (interpolate_2x) - { - tmp[0] = interpolate_1_1(tmp[0], center); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[0]]) - tmp[0] = center; - } - } - } - - break; - - case 8: /* .| */ - tmp[0] = tmp[1] = tmp[2] = center; - - tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[3]]; -#if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[7]); - diff2 = labs(bptr[4] - bptr[5]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[3] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[3] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[3] = pixels[7]; - else - tmp[3] = pixels[4]; - - tmp_grey = _chosenGreyscale[tmp[3]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[2]); - if (diff1 <= diff2) - { - if (interpolate_2x) - { - uint16 tmp_pixel = tmp[3]; - tmp[3] = interpolate_3_1(tmp_pixel, center); - tmp[1] = interpolate_3_1(center, tmp_pixel); - } - } - else - { - if (interpolate_2x) - { - tmp[3] = interpolate_1_1(tmp[3], center); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[3]]) - tmp[3] = center; - } - } - } - - break; - - case 9: /* / */ - case 18: /* '/ */ - case 19: /* /. */ - tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; - - if (sub_type != 18) - { - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; - - if (interpolate_2x) - { + } else { + if (interpolate_2x) { tmp[0] = interpolate_1_1(tmp[0], center); + } else { + if (bptr[4] > _chosenGreyscale[tmp[0]]) + tmp[0] = center; } - /* sim test is for hyper-cephalic kitten eyes and squeeze toy - * mouse pointer in Sam&Max. Half-diags can be too thin in 2x - * nearest-neighbor, so detect them and don't anti-alias them. - */ - else if (bptr[4] > _chosenGreyscale[tmp[0]] || - (_simSum == 1 && (sim[2] || sim[5]) && - pixels[1] == pixels[5] && pixels[3] == pixels[7])) - tmp[0] = center; } + } - if (sub_type != 19) - { - tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); - diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[3] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[3] = pixels[7]; - else - tmp[3] = pixels[4]; + break; - if (interpolate_2x) - { + case 8: /* .| */ + tmp[0] = tmp[1] = tmp[2] = center; + + tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[3]]; +#if PARANOID_KNIGHTS + diff1 = labs(bptr[4] - bptr[7]); + diff2 = labs(bptr[4] - bptr[5]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[3] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[3] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[3] = pixels[7]; + else + tmp[3] = pixels[4]; + + tmp_grey = _chosenGreyscale[tmp[3]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[2]); + if (diff1 <= diff2) { + if (interpolate_2x) { + uint16 tmp_pixel = tmp[3]; + tmp[3] = interpolate_3_1(tmp_pixel, center); + tmp[1] = interpolate_3_1(center, tmp_pixel); + } + } else { + if (interpolate_2x) { tmp[3] = interpolate_1_1(tmp[3], center); + } else { + if (bptr[4] > _chosenGreyscale[tmp[3]]) + tmp[3] = center; } - /* sim test is for hyper-cephalic kitten eyes and squeeze toy - * mouse pointer in Sam&Max. Half-diags can be too thin in 2x - * nearest-neighbor, so detect them and don't anti-alias them. - */ - else if (bptr[4] > _chosenGreyscale[tmp[3]] || - (_simSum == 1 && (sim[2] || sim[5]) && - pixels[1] == pixels[5] && pixels[3] == pixels[7])) - tmp[3] = center; } + } - break; + break; - case 10: /* -' */ - tmp[0] = tmp[1] = tmp[2] = center; + case 9: /* / */ + case 18: /* '/ */ + case 19: /* /. */ + tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; + if (sub_type != 18) { + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; + + if (interpolate_2x) { + tmp[0] = interpolate_1_1(tmp[0], center); + } + /* sim test is for hyper-cephalic kitten eyes and squeeze toy + * mouse pointer in Sam&Max. Half-diags can be too thin in 2x + * nearest-neighbor, so detect them and don't anti-alias them. + */ + else if (bptr[4] > _chosenGreyscale[tmp[0]] || + (_simSum == 1 && (sim[2] || sim[5]) && + pixels[1] == pixels[5] && pixels[3] == pixels[7])) + tmp[0] = center; + } + + if (sub_type != 19) { tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[3]]; + diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[3] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[3] = pixels[7]; + else + tmp[3] = pixels[4]; + + if (interpolate_2x) { + tmp[3] = interpolate_1_1(tmp[3], center); + } + /* sim test is for hyper-cephalic kitten eyes and squeeze toy + * mouse pointer in Sam&Max. Half-diags can be too thin in 2x + * nearest-neighbor, so detect them and don't anti-alias them. + */ + else if (bptr[4] > _chosenGreyscale[tmp[3]] || + (_simSum == 1 && (sim[2] || sim[5]) && + pixels[1] == pixels[5] && pixels[3] == pixels[7])) + tmp[3] = center; + } + + break; + + case 10: /* -' */ + tmp[0] = tmp[1] = tmp[2] = center; + + tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[3]]; #if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[5]); - diff2 = labs(bptr[4] - bptr[7]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[3] = center; - else /* choose nearest pixel */ + diff1 = labs(bptr[4] - bptr[5]); + diff2 = labs(bptr[4] - bptr[7]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[3] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[3] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[3] = pixels[7]; - else - tmp[3] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[3] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[3] = pixels[7]; + else + tmp[3] = pixels[4]; - tmp_grey = _chosenGreyscale[tmp[3]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[6]); - if (diff1 <= diff2) - { - if (interpolate_2x) - { - uint16 tmp_pixel = tmp[3]; - tmp[3] = interpolate_3_1(tmp_pixel, center); - tmp[2] = interpolate_3_1(center, tmp_pixel); - } + tmp_grey = _chosenGreyscale[tmp[3]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[6]); + if (diff1 <= diff2) { + if (interpolate_2x) { + uint16 tmp_pixel = tmp[3]; + tmp[3] = interpolate_3_1(tmp_pixel, center); + tmp[2] = interpolate_3_1(center, tmp_pixel); } - else - { - if (interpolate_2x) - { - tmp[3] = interpolate_1_1(tmp[3], center); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[3]]) - tmp[3] = center; - } + } else { + if (interpolate_2x) { + tmp[3] = interpolate_1_1(tmp[3], center); + } else { + if (bptr[4] > _chosenGreyscale[tmp[3]]) + tmp[3] = center; } } + } - break; + break; - case 11: /* .- */ - tmp[1] = tmp[2] = tmp[3] = center; + case 11: /* .- */ + tmp[1] = tmp[2] = tmp[3] = center; - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); - tmp_grey = _chosenGreyscale[tmp[0]]; + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + tmp_grey = _chosenGreyscale[tmp[0]]; #if PARANOID_KNIGHTS - diff1 = labs(bptr[4] - bptr[3]); - diff2 = labs(bptr[4] - bptr[1]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[0] = center; - else /* choose nearest pixel */ + diff1 = labs(bptr[4] - bptr[3]); + diff2 = labs(bptr[4] - bptr[1]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[0] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; - tmp_grey = _chosenGreyscale[tmp[0]]; - diff1 = labs(bptr[4] - tmp_grey); - diff2 = labs(bptr[4] - bptr[2]); - if (diff1 <= diff2) - { - if (interpolate_2x) - { - uint16 tmp_pixel = tmp[0]; - tmp[0] = interpolate_3_1(tmp_pixel, center); - tmp[1] = interpolate_3_1(center, tmp_pixel); - } - } - else - { - if (interpolate_2x) - { - tmp[0] = interpolate_1_1(tmp[0], center); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[0]]) - tmp[0] = center; - } - } - } - - break; - - case 12: /* < */ - tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; - - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); tmp_grey = _chosenGreyscale[tmp[0]]; + diff1 = labs(bptr[4] - tmp_grey); + diff2 = labs(bptr[4] - bptr[2]); + if (diff1 <= diff2) { + if (interpolate_2x) { + uint16 tmp_pixel = tmp[0]; + tmp[0] = interpolate_3_1(tmp_pixel, center); + tmp[1] = interpolate_3_1(center, tmp_pixel); + } + } else { + if (interpolate_2x) { + tmp[0] = interpolate_1_1(tmp[0], center); + } else { + if (bptr[4] > _chosenGreyscale[tmp[0]]) + tmp[0] = center; + } + } + } + + break; + + case 12: /* < */ + tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; + + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + tmp_grey = _chosenGreyscale[tmp[0]]; #if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[1]); - diff2 = labs(bptr[4] - bptr[3]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + diff1 = labs(bptr[4] - bptr[1]); + diff2 = labs(bptr[4] - bptr[3]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[0] = center; + else /* choose nearest pixel */ +#endif + { + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; + + /* check for half-arrow */ + if (_simSum == 2 && sim[4] && sim[2]) { + if (interpolate_2x) { + tmp[0] = interpolate_1_1(center, tmp[0]); + tmp[2] = interpolate_2_1(center, tmp[0]); + } else { + if (bptr[4] > _chosenGreyscale[tmp[0]]) + tmp[0] = center; + } + + break; + } + + if (interpolate_2x) + tmp[0] = interpolate_2_1(center, tmp[0]); + else tmp[0] = center; - else /* choose nearest pixel */ + } + + tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[2]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[3]); + diff2 = labs(bptr[4] - bptr[7]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[2] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[7]; + else + tmp[2] = pixels[4]; - /* check for half-arrow */ - if (_simSum == 2 && sim[4] && sim[2]) - { - if (interpolate_2x) - { - tmp[0] = interpolate_1_1(center, tmp[0]); - tmp[2] = interpolate_2_1(center, tmp[0]); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[0]]) - tmp[0] = center; - } - - break; + /* check for half-arrow */ + if (_simSum == 2 && sim[4] && sim[7]) { + if (interpolate_2x) { + tmp[2] = interpolate_1_1(center, tmp[2]); + tmp[0] = interpolate_2_1(center, tmp[2]); + } else { + if (bptr[4] > _chosenGreyscale[tmp[2]]) + tmp[2] = center; } - if (interpolate_2x) - tmp[0] = interpolate_2_1(center, tmp[0]); - else - tmp[0] = center; + break; } - tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[2]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[3]); - diff2 = labs(bptr[4] - bptr[7]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + if (interpolate_2x) + tmp[2] = interpolate_2_1(center, tmp[2]); + else tmp[2] = center; - else /* choose nearest pixel */ + } + + break; + + case 13: /* > */ + tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; + + tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); + tmp_grey = _chosenGreyscale[tmp[1]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[5]); + diff2 = labs(bptr[4] - bptr[1]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[1] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[7]; - else - tmp[2] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[1] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[1] = pixels[5]; + else + tmp[1] = pixels[4]; - /* check for half-arrow */ - if (_simSum == 2 && sim[4] && sim[7]) - { - if (interpolate_2x) - { - tmp[2] = interpolate_1_1(center, tmp[2]); - tmp[0] = interpolate_2_1(center, tmp[2]); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[2]]) - tmp[2] = center; - } - - break; + /* check for half-arrow */ + if (_simSum == 2 && sim[3] && sim[0]) { + if (interpolate_2x) { + tmp[1] = interpolate_1_1(center, tmp[1]); + tmp[3] = interpolate_2_1(center, tmp[1]); + } else { + if (bptr[4] > _chosenGreyscale[tmp[1]]) + tmp[1] = center; } - if (interpolate_2x) - tmp[2] = interpolate_2_1(center, tmp[2]); - else - tmp[2] = center; + break; } - break; - - case 13: /* > */ - tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; - - tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); - tmp_grey = _chosenGreyscale[tmp[1]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[5]); - diff2 = labs(bptr[4] - bptr[1]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + if (interpolate_2x) + tmp[1] = interpolate_2_1(center, tmp[1]); + else tmp[1] = center; - else /* choose nearest pixel */ + } + + tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[3]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[7]); + diff2 = labs(bptr[4] - bptr[5]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[3] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[1] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[1] = pixels[5]; - else - tmp[1] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[3] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[3] = pixels[7]; + else + tmp[3] = pixels[4]; - /* check for half-arrow */ - if (_simSum == 2 && sim[3] && sim[0]) - { - if (interpolate_2x) - { - tmp[1] = interpolate_1_1(center, tmp[1]); - tmp[3] = interpolate_2_1(center, tmp[1]); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[1]]) - tmp[1] = center; - } - - break; + /* check for half-arrow */ + if (_simSum == 2 && sim[3] && sim[5]) { + if (interpolate_2x) { + tmp[3] = interpolate_1_1(center, tmp[3]); + tmp[1] = interpolate_2_1(center, tmp[3]); + } else { + if (bptr[4] > _chosenGreyscale[tmp[3]]) + tmp[3] = center; } - if (interpolate_2x) - tmp[1] = interpolate_2_1(center, tmp[1]); - else - tmp[1] = center; + break; } - tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[3]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[7]); - diff2 = labs(bptr[4] - bptr[5]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + if (interpolate_2x) + tmp[3] = interpolate_2_1(center, tmp[3]); + else tmp[3] = center; - else /* choose nearest pixel */ + } + + break; + + case 14: /* ^ */ + tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; + + tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); + tmp_grey = _chosenGreyscale[tmp[0]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[1]); + diff2 = labs(bptr[4] - bptr[3]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[0] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[3] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[3] = pixels[7]; - else - tmp[3] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); + diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[0] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[0] = pixels[3]; + else + tmp[0] = pixels[4]; - /* check for half-arrow */ - if (_simSum == 2 && sim[3] && sim[5]) - { - if (interpolate_2x) - { - tmp[3] = interpolate_1_1(center, tmp[3]); - tmp[1] = interpolate_2_1(center, tmp[3]); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[3]]) - tmp[3] = center; - } - - break; + /* check for half-arrow */ + if (_simSum == 2 && sim[6] && sim[5]) { + if (interpolate_2x) { + tmp[0] = interpolate_1_1(center, tmp[0]); + tmp[1] = interpolate_2_1(center, tmp[0]); + } else { + if (bptr[4] > _chosenGreyscale[tmp[0]]) + tmp[0] = center; } - if (interpolate_2x) - tmp[3] = interpolate_2_1(center, tmp[3]); - else - tmp[3] = center; + break; } - break; - - case 14: /* ^ */ - tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; - - tmp[0] = interpolate_1_1_1(pixels[1], pixels[3], center); - tmp_grey = _chosenGreyscale[tmp[0]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[1]); - diff2 = labs(bptr[4] - bptr[3]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + if (interpolate_2x) + tmp[0] = interpolate_2_1(center, tmp[0]); + else tmp[0] = center; - else /* choose nearest pixel */ + } + + tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); + tmp_grey = _chosenGreyscale[tmp[1]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[5]); + diff2 = labs(bptr[4] - bptr[1]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[1] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[0], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[0], pixels[3]); - diff3 = calcPixelDiffNosqrt(tmp[0], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[0] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[0] = pixels[3]; - else - tmp[0] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); + diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); + diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[1] = pixels[1]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[1] = pixels[5]; + else + tmp[1] = pixels[4]; - /* check for half-arrow */ - if (_simSum == 2 && sim[6] && sim[5]) - { - if (interpolate_2x) - { - tmp[0] = interpolate_1_1(center, tmp[0]); - tmp[1] = interpolate_2_1(center, tmp[0]); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[0]]) - tmp[0] = center; - } - - break; + /* check for half-arrow */ + if (_simSum == 2 && sim[6] && sim[7]) { + if (interpolate_2x) { + tmp[1] = interpolate_1_1(center, tmp[1]); + tmp[0] = interpolate_2_1(center, tmp[1]); + } else { + if (bptr[4] > _chosenGreyscale[tmp[1]]) + tmp[1] = center; } - if (interpolate_2x) - tmp[0] = interpolate_2_1(center, tmp[0]); - else - tmp[0] = center; + break; } - tmp[1] = interpolate_1_1_1(pixels[1], pixels[5], center); - tmp_grey = _chosenGreyscale[tmp[1]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[5]); - diff2 = labs(bptr[4] - bptr[1]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + if (interpolate_2x) + tmp[1] = interpolate_2_1(center, tmp[1]); + else tmp[1] = center; - else /* choose nearest pixel */ + } + + break; + + case 15: /* v */ + tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; + + tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[2]]; +#if PARANOID_ARROWS + diff1 = labs(bptr[4] - bptr[3]); + diff2 = labs(bptr[4] - bptr[7]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[2] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[1], pixels[1]); - diff2 = calcPixelDiffNosqrt(tmp[1], pixels[5]); - diff3 = calcPixelDiffNosqrt(tmp[1], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[1] = pixels[1]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[1] = pixels[5]; - else - tmp[1] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); + diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[2] = pixels[3]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[2] = pixels[7]; + else + tmp[2] = pixels[4]; - /* check for half-arrow */ - if (_simSum == 2 && sim[6] && sim[7]) - { - if (interpolate_2x) - { - tmp[1] = interpolate_1_1(center, tmp[1]); - tmp[0] = interpolate_2_1(center, tmp[1]); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[1]]) - tmp[1] = center; - } - - break; + /* check for half-arrow */ + if (_simSum == 2 && sim[1] && sim[0]) { + if (interpolate_2x) { + tmp[2] = interpolate_1_1(center, tmp[2]); + tmp[3] = interpolate_2_1(center, tmp[2]); + } else { + if (bptr[4] > _chosenGreyscale[tmp[2]]) + tmp[2] = center; } - if (interpolate_2x) - tmp[1] = interpolate_2_1(center, tmp[1]); - else - tmp[1] = center; + break; } - break; - - case 15: /* v */ - tmp[0] = tmp[1] = tmp[2] = tmp[3] = center; - - tmp[2] = interpolate_1_1_1(pixels[3], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[2]]; -#if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[3]); - diff2 = labs(bptr[4] - bptr[7]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) + if (interpolate_2x) + tmp[2] = interpolate_2_1(center, tmp[2]); + else tmp[2] = center; - else /* choose nearest pixel */ -#endif - { - diff1 = calcPixelDiffNosqrt(tmp[2], pixels[3]); - diff2 = calcPixelDiffNosqrt(tmp[2], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[2], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[2] = pixels[3]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[2] = pixels[7]; - else - tmp[2] = pixels[4]; + } - /* check for half-arrow */ - if (_simSum == 2 && sim[1] && sim[0]) - { - if (interpolate_2x) - { - tmp[2] = interpolate_1_1(center, tmp[2]); - tmp[3] = interpolate_2_1(center, tmp[2]); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[2]]) - tmp[2] = center; - } - - break; - } - - if (interpolate_2x) - tmp[2] = interpolate_2_1(center, tmp[2]); - else - tmp[2] = center; - } - - tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); - tmp_grey = _chosenGreyscale[tmp[3]]; + tmp[3] = interpolate_1_1_1(pixels[5], pixels[7], center); + tmp_grey = _chosenGreyscale[tmp[3]]; #if PARANOID_ARROWS - diff1 = labs(bptr[4] - bptr[7]); - diff2 = labs(bptr[4] - bptr[5]); - diff3 = labs(bptr[4] - tmp_grey); - if (diff1 < diff3 || diff2 < diff3) - tmp[3] = center; - else /* choose nearest pixel */ + diff1 = labs(bptr[4] - bptr[7]); + diff2 = labs(bptr[4] - bptr[5]); + diff3 = labs(bptr[4] - tmp_grey); + if (diff1 < diff3 || diff2 < diff3) + tmp[3] = center; + else /* choose nearest pixel */ #endif - { - diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); - diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); - diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); - if (diff1 <= diff2 && diff1 <= diff3) - tmp[3] = pixels[5]; - else if (diff2 <= diff1 && diff2 <= diff3) - tmp[3] = pixels[7]; - else - tmp[3] = pixels[4]; + { + diff1 = calcPixelDiffNosqrt(tmp[3], pixels[5]); + diff2 = calcPixelDiffNosqrt(tmp[3], pixels[7]); + diff3 = calcPixelDiffNosqrt(tmp[3], pixels[4]); + if (diff1 <= diff2 && diff1 <= diff3) + tmp[3] = pixels[5]; + else if (diff2 <= diff1 && diff2 <= diff3) + tmp[3] = pixels[7]; + else + tmp[3] = pixels[4]; - /* check for half-arrow */ - if (_simSum == 2 && sim[1] && sim[2]) - { - if (interpolate_2x) - { - tmp[3] = interpolate_1_1(center, tmp[3]); - tmp[2] = interpolate_2_1(center, tmp[3]); - } - else - { - if (bptr[4] > _chosenGreyscale[tmp[3]]) - tmp[3] = center; - } - - break; + /* check for half-arrow */ + if (_simSum == 2 && sim[1] && sim[2]) { + if (interpolate_2x) { + tmp[3] = interpolate_1_1(center, tmp[3]); + tmp[2] = interpolate_2_1(center, tmp[3]); + } else { + if (bptr[4] > _chosenGreyscale[tmp[3]]) + tmp[3] = center; } - if (interpolate_2x) - tmp[3] = interpolate_2_1(center, tmp[3]); - else - tmp[3] = center; + break; } - break; + if (interpolate_2x) + tmp[3] = interpolate_2_1(center, tmp[3]); + else + tmp[3] = center; + } - case -1: /* no edge */ - case 0: /* - */ - case 6: /* | */ - case 127: /* * */ - default: /* no edge */ - dptr2 = (uint16 *) dptr; - *dptr2++ = center; + break; + + case -1: /* no edge */ + case 0: /* - */ + case 6: /* | */ + case 127: /* * */ + default: /* no edge */ + dptr2 = (uint16 *) dptr; + *dptr2++ = center; #if DEBUG_REFRESH_RANDOM_XOR - *dptr2 = center ^ (uint16) (dxorshift_128() * (1L<<16)); + *dptr2 = center ^ (uint16)(dxorshift_128() * (1L << 16)); #else - *dptr2 = center; + *dptr2 = center; #endif - dptr2 = (uint16 *) (dptr + dstPitch); - *dptr2++ = center; - *dptr2 = center; + dptr2 = (uint16 *)(dptr + dstPitch); + *dptr2++ = center; + *dptr2 = center; - return; + return; - break; + break; } ptmp = tmp; dptr2 = (uint16 *) dptr; *dptr2++ = *ptmp++; #if DEBUG_REFRESH_RANDOM_XOR - *dptr2 = *ptmp++ ^ (uint16) (dxorshift_128() * (1L<<16)); + *dptr2 = *ptmp++ ^ (uint16)(dxorshift_128() * (1L << 16)); #else *dptr2 = *ptmp++; #endif - dptr2 = (uint16 *) (dptr + dstPitch); + dptr2 = (uint16 *)(dptr + dstPitch); *dptr2++ = *ptmp++; *dptr2 = *ptmp; } @@ -3466,17 +3271,15 @@ void EdgePlugin::anti_alias_grid_2x(uint8 *dptr, int dstPitch, #if HANDLE_TRANSPARENT_OVERLAYS /* Deal with transparent pixels */ void handle_transparent_overlay(uint16 transp, uint16 *pixels, - int16 *bplane, int16 *diffs) -{ + int16 *bplane, int16 *diffs) { int16 tmp_grey; int16 max_diff; - int16 min_grey = ((int16)1< max_grey) max_grey = bplane[i]; } @@ -3486,8 +3289,7 @@ void handle_transparent_overlay(uint16 transp, uint16 *pixels, tmp_grey = (min_grey + max_grey + 1) >> 1; max_diff = max_grey - min_grey; - if (pixels[4] == transp) /* center pixel is transparent */ - { + if (pixels[4] == transp) { /* center pixel is transparent */ /* set all transparent pixels to middle grey */ if (pixels[0] == transp) bplane[0] = tmp_grey; if (pixels[1] == transp) bplane[1] = tmp_grey; @@ -3508,50 +3310,40 @@ void handle_transparent_overlay(uint16 transp, uint16 *pixels, if (pixels[6] != transp) diffs[5] = max_diff; if (pixels[7] != transp) diffs[6] = max_diff; if (pixels[8] != transp) diffs[7] = max_diff; - } - else /* center pixel is non-transparent */ - { + } else { /* center pixel is non-transparent */ /* choose transparent grey value to give largest contrast */ tmp_grey = (bplane[4] >= tmp_grey) ? min_grey : max_grey; /* set new transparent pixel values and diffs */ - if (pixels[0] == transp) - { + if (pixels[0] == transp) { bplane[0] = tmp_grey; diffs[0] = max_diff; } - if (pixels[1] == transp) - { + if (pixels[1] == transp) { bplane[1] = tmp_grey; diffs[1] = max_diff; } - if (pixels[2] == transp) - { + if (pixels[2] == transp) { bplane[2] = tmp_grey; diffs[2] = max_diff; } - if (pixels[3] == transp) - { + if (pixels[3] == transp) { bplane[3] = tmp_grey; diffs[3] = max_diff; } - if (pixels[5] == transp) - { + if (pixels[5] == transp) { bplane[5] = tmp_grey; diffs[4] = max_diff; } - if (pixels[6] == transp) - { + if (pixels[6] == transp) { bplane[6] = tmp_grey; diffs[5] = max_diff; } - if (pixels[7] == transp) - { + if (pixels[7] == transp) { bplane[7] = tmp_grey; diffs[6] = max_diff; } - if (pixels[8] == transp) - { + if (pixels[8] == transp) { bplane[8] = tmp_grey; diffs[7] = max_diff; } @@ -3562,8 +3354,7 @@ void handle_transparent_overlay(uint16 transp, uint16 *pixels, /* Check for changed pixel grid, return 1 if unchanged. */ -int check_unchanged_pixels(uint16 *old_src_ptr, uint16 *pixels, int w) -{ +int check_unchanged_pixels(uint16 *old_src_ptr, uint16 *pixels, int w) { uint16 *dptr16; dptr16 = old_src_ptr - w - 1; @@ -3588,14 +3379,13 @@ int check_unchanged_pixels(uint16 *old_src_ptr, uint16 *pixels, int w) /* Draw unchanged pixel grid, 3x */ /* old_dptr16 starts in top left of grid, dptr16 in center */ void draw_unchanged_grid_3x(uint16 *dptr16, int dstPitch, - uint16 *old_dptr16, int old_dst_inc) -{ + uint16 *old_dptr16, int old_dst_inc) { uint16 *sptr; uint16 *dptr; uint8 *dptr8 = (uint8 *) dptr16; sptr = old_dptr16; - dptr = (uint16 *) (dptr8 - dstPitch) - 1; + dptr = (uint16 *)(dptr8 - dstPitch) - 1; *dptr++ = *sptr++; *dptr++ = *sptr++; *dptr = *sptr; @@ -3607,7 +3397,7 @@ void draw_unchanged_grid_3x(uint16 *dptr16, int dstPitch, *dptr = *sptr; sptr = old_dptr16 + old_dst_inc + old_dst_inc; - dptr = (uint16 *) (dptr8 + dstPitch) - 1; + dptr = (uint16 *)(dptr8 + dstPitch) - 1; *dptr++ = *sptr++; *dptr++ = *sptr++; *dptr = *sptr; @@ -3617,8 +3407,7 @@ void draw_unchanged_grid_3x(uint16 *dptr16, int dstPitch, /* Draw unchanged pixel grid, 2x */ void draw_unchanged_grid_2x(uint16 *dptr16, int dstPitch, - uint16 *old_dptr16, int old_dst_inc) -{ + uint16 *old_dptr16, int old_dst_inc) { uint16 *sptr; uint16 *dptr; uint8 *dptr8 = (uint8 *) dptr16; @@ -3629,7 +3418,7 @@ void draw_unchanged_grid_2x(uint16 *dptr16, int dstPitch, *dptr = *sptr; sptr = old_dptr16 + old_dst_inc; - dptr = (uint16 *) (dptr8 + dstPitch); + dptr = (uint16 *)(dptr8 + dstPitch); *dptr++ = *sptr++; *dptr = *sptr; } @@ -3638,9 +3427,9 @@ void draw_unchanged_grid_2x(uint16 *dptr16, int dstPitch, /* Perform edge detection, draw the new 3x pixels */ template void EdgePlugin::antiAliasPass3x(const uint8 *src, uint8 *dst, - int w, int h, int w_new, int h_new, - int srcPitch, int dstPitch, - int overlay_flag) { + int w, int h, int w_new, int h_new, + int srcPitch, int dstPitch, + int overlay_flag) { int x, y; int w2 = w + 2; const uint8 *sptr8 = src; @@ -3656,7 +3445,7 @@ void EdgePlugin::antiAliasPass3x(const uint8 *src, uint8 *dst, #if 0 #if HANDLE_TRANSPARENT_OVERLAYS - uint16 transp = 0; /* transparent color */ + uint16 transp = 0; /* transparent color */ /* assume bitmap is padded by a transparent border, take src-1 pixel */ if (overlay_flag) transp = *((const uint16 *) src - 1); @@ -3673,31 +3462,30 @@ void EdgePlugin::antiAliasPass3x(const uint8 *src, uint8 *dst, for (y = 0; y < h; y++, sptr8 += srcPitch, dptr8 += dstPitch3) { for (x = 0, - sptr16 = (const uint16 *) sptr8, - dptr16 = (uint16 *) dptr8; - x < w; x++, sptr16++, dptr16 += 3) { + sptr16 = (const uint16 *) sptr8, + dptr16 = (uint16 *) dptr8; + x < w; x++, sptr16++, dptr16 += 3) { const uint16 *sptr2, *addr3; uint16 pixels[9]; char edge_type; - sptr2 = ((const uint16 *) ((const uint8 *) sptr16 - srcPitch)) - 1; - addr3 = ((const uint16 *) ((const uint8 *) sptr16 + srcPitch)) + 1; + sptr2 = ((const uint16 *)((const uint8 *) sptr16 - srcPitch)) - 1; + addr3 = ((const uint16 *)((const uint8 *) sptr16 + srcPitch)) + 1; /* fill the 3x3 grid */ - memcpy(pixels, sptr2, 3*sizeof(uint16)); - memcpy(pixels+3, sptr16 - 1, 3*sizeof(uint16)); - memcpy(pixels+6, addr3 - 2, 3*sizeof(uint16)); + memcpy(pixels, sptr2, 3 * sizeof(uint16)); + memcpy(pixels + 3, sptr16 - 1, 3 * sizeof(uint16)); + memcpy(pixels + 6, addr3 - 2, 3 * sizeof(uint16)); #if 0 /* skip interior unchanged 3x3 blocks */ if (*sptr16 == *old_sptr16 && #if DEBUG_DRAW_REFRESH_BORDERS - x > 0 && x < w - 1 && y > 0 && y < h - 1 && + x > 0 && x < w - 1 && y > 0 && y < h - 1 && #endif - check_unchanged_pixels(old_sptr16, pixels, old_src_inc)) - { + check_unchanged_pixels(old_sptr16, pixels, old_src_inc)) { draw_unchanged_grid_3x(dptr16, dstPitch, old_dptr16, - old_dst_inc); + old_dst_inc); #if DEBUG_REFRESH_RANDOM_XOR *(dptr16 + 1) = 0; @@ -3709,10 +3497,9 @@ void EdgePlugin::antiAliasPass3x(const uint8 *src, uint8 *dst, diffs = chooseGreyscale(pixels); /* block of solid color */ - if (!diffs) - { + if (!diffs) { anti_alias_grid_clean_3x((uint8 *) dptr16, dstPitch, pixels, - 0, NULL); + 0, NULL); continue; } @@ -3726,14 +3513,14 @@ void EdgePlugin::antiAliasPass3x(const uint8 *src, uint8 *dst, bplane = _bptr; edge_type = findPrincipleAxis(pixels, diffs, bplane, - sim, &angle); + sim, &angle); sub_type = refineDirection(edge_type, pixels, bplane, - sim, angle); + sim, angle); if (sub_type >= 0) sub_type = fixKnights(sub_type, pixels, sim); anti_alias_grid_clean_3x((uint8 *) dptr16, dstPitch, pixels, - sub_type, bplane); + sub_type, bplane); } } } @@ -3743,10 +3530,10 @@ void EdgePlugin::antiAliasPass3x(const uint8 *src, uint8 *dst, /* Perform edge detection, draw the new 2x pixels */ template void EdgePlugin::antiAliasPass2x(const uint8 *src, uint8 *dst, - int w, int h, int w_new, int h_new, - int srcPitch, int dstPitch, - int overlay_flag, - int interpolate_2x) { + int w, int h, int w_new, int h_new, + int srcPitch, int dstPitch, + int overlay_flag, + int interpolate_2x) { int x, y; int w2 = w + 2; const uint8 *sptr8 = src; @@ -3760,9 +3547,9 @@ void EdgePlugin::antiAliasPass2x(const uint8 *src, uint8 *dst, int16 *diffs; int dstPitch2 = dstPitch << 1; -#if 0 +#if 0 #if HANDLE_TRANSPARENT_OVERLAYS - uint16 transp = 0; /* transparent color */ + uint16 transp = 0; /* transparent color */ /* assume bitmap is padded by a transparent border, take src-1 pixel */ if (overlay_flag) transp = *((const uint16 *) src - 1); @@ -3780,31 +3567,30 @@ void EdgePlugin::antiAliasPass2x(const uint8 *src, uint8 *dst, for (y = 0; y < h; y++, sptr8 += srcPitch, dptr8 += dstPitch2) { for (x = 0, - sptr16 = (const uint16 *) sptr8, - dptr16 = (uint16 *) dptr8; - x < w; x++, sptr16++, dptr16 += 2) { + sptr16 = (const uint16 *) sptr8, + dptr16 = (uint16 *) dptr8; + x < w; x++, sptr16++, dptr16 += 2) { const uint16 *sptr2, *addr3; uint16 pixels[9]; char edge_type; - sptr2 = ((const uint16 *) ((const uint8 *) sptr16 - srcPitch)) - 1; - addr3 = ((const uint16 *) ((const uint8 *) sptr16 + srcPitch)) + 1; + sptr2 = ((const uint16 *)((const uint8 *) sptr16 - srcPitch)) - 1; + addr3 = ((const uint16 *)((const uint8 *) sptr16 + srcPitch)) + 1; /* fill the 3x3 grid */ - memcpy(pixels, sptr2, 3*sizeof(uint16)); - memcpy(pixels+3, sptr16 - 1, 3*sizeof(uint16)); - memcpy(pixels+6, addr3 - 2, 3*sizeof(uint16)); + memcpy(pixels, sptr2, 3 * sizeof(uint16)); + memcpy(pixels + 3, sptr16 - 1, 3 * sizeof(uint16)); + memcpy(pixels + 6, addr3 - 2, 3 * sizeof(uint16)); #if 0 /* skip interior unchanged 3x3 blocks */ if (*sptr16 == *old_sptr16 && #if DEBUG_DRAW_REFRESH_BORDERS - x > 0 && x < w - 1 && y > 0 && y < h - 1 && + x > 0 && x < w - 1 && y > 0 && y < h - 1 && #endif - check_unchanged_pixels(old_sptr16, pixels, old_src_inc)) - { + check_unchanged_pixels(old_sptr16, pixels, old_src_inc)) { draw_unchanged_grid_2x(dptr16, dstPitch, old_dptr16, - old_dst_inc); + old_dst_inc); #if DEBUG_REFRESH_RANDOM_XOR *(dptr16 + 1) = 0; @@ -3816,10 +3602,9 @@ void EdgePlugin::antiAliasPass2x(const uint8 *src, uint8 *dst, diffs = chooseGreyscale(pixels); /* block of solid color */ - if (!diffs) - { + if (!diffs) { anti_alias_grid_2x((uint8 *) dptr16, dstPitch, pixels, - 0, NULL, NULL, 0); + 0, NULL, NULL, 0); continue; } @@ -3833,15 +3618,15 @@ void EdgePlugin::antiAliasPass2x(const uint8 *src, uint8 *dst, bplane = _bptr; edge_type = findPrincipleAxis(pixels, diffs, bplane, - sim, &angle); + sim, &angle); sub_type = refineDirection(edge_type, pixels, bplane, - sim, angle); + sim, angle); if (sub_type >= 0) sub_type = fixKnights(sub_type, pixels, sim); anti_alias_grid_2x((uint8 *) dptr16, dstPitch, pixels, - sub_type, bplane, sim, - interpolate_2x); + sub_type, bplane, sim, + interpolate_2x); } } } @@ -3850,7 +3635,7 @@ void EdgePlugin::antiAliasPass2x(const uint8 *src, uint8 *dst, /* Initialize various lookup tables */ void EdgePlugin::initTables(const uint8 *srcPtr, uint32 srcPitch, - int width, int height) { + int width, int height) { double r_float, g_float, b_float; int r, g, b; uint16 i; @@ -3883,20 +3668,20 @@ void EdgePlugin::initTables(const uint8 *srcPtr, uint32 srcPitch, val[2] = 0.143 * r_float + 0.286 * g_float + 0.571 * b_float; /* factor in a little intensity too, it helps */ - val[0] = (intensity + 9*val[0]) / 10; - val[1] = (intensity + 9*val[1]) / 10; - val[2] = (intensity + 9*val[2]) / 10; + val[0] = (intensity + 9 * val[0]) / 10; + val[1] = (intensity + 9 * val[1]) / 10; + val[2] = (intensity + 9 * val[2]) / 10; /* store the greyscale tables */ - _greyscaleTable[0][i] = (int16) (val[0] * ((int16)1< max_scale) max_scale = scale; /* Deal with overlays */ - if (overlay_flag) - { + if (overlay_flag) { skip_unchanged_pixels_flag = 1; w2 = w + 2; h2 = h + 2; size = w2 * h2; - if (size > max_overlay_size) - { + if (size > max_overlay_size) { max_overlay_size = size; old_overlay = (uint16 *) realloc(old_overlay, - size * sizeof(uint16)); + size * sizeof(uint16)); skip_unchanged_pixels_flag = 0; } max_scaled_size = max_scale * max_scale * max_overlay_size; - if (max_scaled_size > max_dst_overlay_size) - { + if (max_scaled_size > max_dst_overlay_size) { max_dst_overlay_size = max_scaled_size; old_dst_overlay = (uint16 *) realloc(old_dst_overlay, - max_scaled_size * sizeof(uint16)); + max_scaled_size * sizeof(uint16)); skip_unchanged_pixels_flag = 0; } @@ -3998,10 +3779,9 @@ void resize_old_arrays(const uint8 *src, uint8 *dst, cur_dst_overlay_width = w * scale; cur_dst_overlay_height = h * scale; if (cur_overlay_width != old_overlay_width || - cur_overlay_height != old_overlay_height || - cur_dst_overlay_width != old_dst_overlay_width || - cur_dst_overlay_height != old_dst_overlay_height) - { + cur_overlay_height != old_overlay_height || + cur_dst_overlay_width != old_dst_overlay_width || + cur_dst_overlay_height != old_dst_overlay_height) { skip_unchanged_pixels_flag = 0; } old_overlay_width = cur_overlay_width; @@ -4009,14 +3789,11 @@ void resize_old_arrays(const uint8 *src, uint8 *dst, old_dst_overlay_width = cur_dst_overlay_width; old_dst_overlay_height = cur_dst_overlay_height; - if (skip_unchanged_pixels_flag == 0) - { + if (skip_unchanged_pixels_flag == 0) { memset(old_overlay, 0, max_overlay_size * sizeof(uint16)); memset(old_dst_overlay, 0, max_dst_overlay_size * sizeof(uint16)); } - } - else - { + } else { w2 = cur_screen_width + 2; h2 = cur_screen_height + 2; size = w2 * h2; @@ -4024,8 +3801,7 @@ void resize_old_arrays(const uint8 *src, uint8 *dst, skip_unchanged_pixels_flag = 1; - if (overlay_flag == 0 && size > max_old_src_size) - { + if (overlay_flag == 0 && size > max_old_src_size) { max_old_src_size = size; old_src = (uint16 *) realloc(old_src, size * sizeof(uint16)); @@ -4034,19 +3810,17 @@ void resize_old_arrays(const uint8 *src, uint8 *dst, max_scaled_size = max_scale * max_scale * max_old_src_size; - if (overlay_flag == 0 && max_scaled_size > max_old_dst_size) - { + if (overlay_flag == 0 && max_scaled_size > max_old_dst_size) { max_old_dst_size = max_scaled_size; old_dst = (uint16 *) realloc(old_dst, - max_scaled_size * sizeof(uint16)); + max_scaled_size * sizeof(uint16)); skip_unchanged_pixels_flag = 0; } /* screen dimensions have changed */ if (cur_screen_width != old_screen_width || - cur_screen_height != old_screen_height) - { + cur_screen_height != old_screen_height) { skip_unchanged_pixels_flag = 0; } old_screen_width = cur_screen_width; @@ -4055,16 +3829,14 @@ void resize_old_arrays(const uint8 *src, uint8 *dst, cur_dst_screen_width = cur_screen_width * scale; cur_dst_screen_height = cur_screen_height * scale; if (cur_dst_screen_width != old_dst_screen_width || - cur_dst_screen_height != old_dst_screen_height) - { + cur_dst_screen_height != old_dst_screen_height) { skip_unchanged_pixels_flag = 0; } old_dst_screen_width = cur_dst_screen_width; old_dst_screen_height = cur_dst_screen_height; /* set all the buffers to 0, so that everything gets redrawn */ - if (skip_unchanged_pixels_flag == 0) - { + if (skip_unchanged_pixels_flag == 0) { memset(old_src, 0, max_old_src_size * sizeof(uint16)); memset(old_dst, 0, max_old_dst_size * sizeof(uint16)); memset(old_overlay, 0, max_overlay_size * sizeof(uint16)); @@ -4075,8 +3847,7 @@ void resize_old_arrays(const uint8 *src, uint8 *dst, /* Fill old src array, which is used in checking for unchanged pixels */ -void fill_old_src(const uint8 *src, int srcPitch, int w, int h) -{ +void fill_old_src(const uint8 *src, int srcPitch, int w, int h) { int x, y; int x2, y2; const uint16 *sptr16 = (const uint16 *) src; @@ -4088,19 +3859,16 @@ void fill_old_src(const uint8 *src, int srcPitch, int w, int h) int32 src_fudge; /* Deal with overlays */ - if (sptr16 < src_addr_min || sptr16 > src_addr_max) - { + if (sptr16 < src_addr_min || sptr16 > src_addr_max) { w += 2; h += 2; optr16 = old_overlay; - sptr2 = (const uint16 *) (src - srcPitch) - 1; + sptr2 = (const uint16 *)(src - srcPitch) - 1; x_fudge = 0; src_fudge = srcPitch - w - w; - } - else - { + } else { y = dist / srcPitch; x = (dist - y * srcPitch) >> 1; @@ -4111,13 +3879,12 @@ void fill_old_src(const uint8 *src, int srcPitch, int w, int h) src_fudge = srcPitch - w - w; } - for (y2 = 0; y2 < h; y2++) - { + for (y2 = 0; y2 < h; y2++) { for (x2 = 0; x2 < w; x2++) *optr16++ = *sptr2++; optr16 += x_fudge; - sptr2 = (const uint16 *) ((const uint8 *) sptr2 + src_fudge); + sptr2 = (const uint16 *)((const uint8 *) sptr2 + src_fudge); } } @@ -4125,8 +3892,7 @@ void fill_old_src(const uint8 *src, int srcPitch, int w, int h) /* Fill old dst array, which is used in drawing unchanged pixels */ void fill_old_dst(const uint8 *src, uint8 *dst, int srcPitch, int dstPitch, - int w, int h, int scale) -{ + int w, int h, int scale) { int x, y; int x2, y2; @@ -4141,15 +3907,12 @@ void fill_old_dst(const uint8 *src, uint8 *dst, int srcPitch, int dstPitch, int32 dst_fudge; /* Deal with overlays */ - if (sptr16 < src_addr_min || sptr16 > src_addr_max) - { + if (sptr16 < src_addr_min || sptr16 > src_addr_max) { optr16 = old_dst_overlay; dptr2 = (uint16 *) dst; x_fudge = 0; dst_fudge = dstPitch - w_new - w_new; - } - else - { + } else { dist = src - (const uint8 *) src_addr_min; y = dist / srcPitch; x = (dist - y * srcPitch) >> 1; @@ -4161,13 +3924,12 @@ void fill_old_dst(const uint8 *src, uint8 *dst, int srcPitch, int dstPitch, dst_fudge = dstPitch - w_new - w_new; } - for (y2 = 0; y2 < h_new; y2++) - { + for (y2 = 0; y2 < h_new; y2++) { for (x2 = 0; x2 < w_new; x2++) *optr16++ = *dptr2++; optr16 += x_fudge; - dptr2 = (uint16 *) ((uint8 *) dptr2 + dst_fudge); + dptr2 = (uint16 *)((uint8 *) dptr2 + dst_fudge); } } #endif @@ -4176,19 +3938,17 @@ void fill_old_dst(const uint8 *src, uint8 *dst, int srcPitch, int dstPitch, /* 3x anti-aliased resize filter, nearest-neighbor anti-aliasing */ #if 0 void Edge3x(const uint8 *srcPtr, uint32 srcPitch, - uint8 *dstPtr, uint32 dstPitch, int width, int height) -{ + uint8 *dstPtr, uint32 dstPitch, int width, int height) { /* Initialize stuff */ - if (!init_flag) - { + if (!init_flag) { cur_screen_width = g_system->getWidth(); cur_screen_height = g_system->getHeight(); /* set initial best guess on min/max screen addresses */ /* indent by 1 in case only the mouse is ever drawn */ src_addr_min = (const uint16 *) srcPtr + 1; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * - srcPitch)) + (width - 1) - 1; + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * + srcPitch)) + (width - 1) - 1; initTables(srcPtr, srcPitch, width, height); init_flag = 1; @@ -4196,23 +3956,21 @@ void Edge3x(const uint8 *srcPtr, uint32 srcPitch, /* Uh oh, the screen size has changed */ if (cur_screen_width != g_system->getWidth() || - cur_screen_height != g_system->getHeight()) - { + cur_screen_height != g_system->getHeight()) { cur_screen_width = g_system->getWidth(); cur_screen_height = g_system->getHeight(); src_addr_min = (const uint16 *) srcPtr; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * srcPitch)) + - (width - 1); + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * srcPitch)) + + (width - 1); } /* Ah ha, we're doing the whole screen, so we can save the bounds of the src array for later bounds checking */ if (width == g_system->getWidth() && - height == g_system->getHeight()) - { + height == g_system->getHeight()) { src_addr_min = (const uint16 *) srcPtr; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * srcPitch)) + - (width - 1); + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * srcPitch)) + + (width - 1); } /* resize and/or blank the old src and dst array */ @@ -4222,15 +3980,12 @@ void Edge3x(const uint8 *srcPtr, uint32 srcPitch, * We're probably drawing an overlay now. */ if ((const uint16 *) srcPtr < src_addr_min || - (const uint16 *) srcPtr > src_addr_max) - { + (const uint16 *) srcPtr > src_addr_max) { antiAliasPass3x(srcPtr, dstPtr, width, height, - 3*width, 3*height, srcPitch, dstPitch, 1); - } - else /* Draw the regular screen, this isn't an overlay. */ - { + 3 * width, 3 * height, srcPitch, dstPitch, 1); + } else { /* Draw the regular screen, this isn't an overlay. */ antiAliasPass3x(srcPtr, dstPtr, width, height, - 3*width, 3*height, srcPitch, dstPitch, 0); + 3 * width, 3 * height, srcPitch, dstPitch, 0); } /* fill old src array */ @@ -4244,19 +3999,17 @@ void Edge3x(const uint8 *srcPtr, uint32 srcPitch, /* 2x anti-aliased resize filter, nearest-neighbor anti-aliasing */ #if 0 void Edge2x(const uint8 *srcPtr, uint32 srcPitch, - uint8 *dstPtr, uint32 dstPitch, int width, int height) -{ + uint8 *dstPtr, uint32 dstPitch, int width, int height) { /* Initialize stuff */ - if (!init_flag) - { + if (!init_flag) { cur_screen_width = g_system->getWidth(); cur_screen_height = g_system->getHeight(); /* set initial best guess on min/max screen addresses */ /* indent by 1 in case only the mouse is ever drawn */ src_addr_min = (const uint16 *) srcPtr + 1; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * - srcPitch)) + (width - 1) - 1; + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * + srcPitch)) + (width - 1) - 1; initTables(srcPtr, srcPitch, width, height); init_flag = 1; @@ -4264,23 +4017,21 @@ void Edge2x(const uint8 *srcPtr, uint32 srcPitch, /* Uh oh, the screen size has changed */ if (cur_screen_width != g_system->getWidth() || - cur_screen_height != g_system->getHeight()) - { + cur_screen_height != g_system->getHeight()) { cur_screen_width = g_system->getWidth(); cur_screen_height = g_system->getHeight(); src_addr_min = (const uint16 *) srcPtr; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * srcPitch)) + - (width - 1); + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * srcPitch)) + + (width - 1); } /* Ah ha, we're doing the whole screen, so we can save the bounds of the src array for later bounds checking */ if (width == g_system->getWidth() && - height == g_system->getHeight()) - { + height == g_system->getHeight()) { src_addr_min = (const uint16 *) srcPtr; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * srcPitch)) + - (width - 1); + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * srcPitch)) + + (width - 1); } /* resize and/or blank the old src and dst array */ @@ -4290,15 +4041,12 @@ void Edge2x(const uint8 *srcPtr, uint32 srcPitch, * We're probably drawing an overlay now. */ if ((const uint16 *) srcPtr < src_addr_min || - (const uint16 *) srcPtr > src_addr_max) - { + (const uint16 *) srcPtr > src_addr_max) { antiAliasPass2x(srcPtr, dstPtr, width, height, - 2*width, 2*height, srcPitch, dstPitch, 1, 0); - } - else /* Draw the regular screen, this isn't an overlay. */ - { + 2 * width, 2 * height, srcPitch, dstPitch, 1, 0); + } else { /* Draw the regular screen, this isn't an overlay. */ antiAliasPass2x(srcPtr, dstPtr, width, height, - 2*width, 2*height, srcPitch, dstPitch, 0, 0); + 2 * width, 2 * height, srcPitch, dstPitch, 0, 0); } /* fill old src array */ @@ -4318,19 +4066,17 @@ void Edge2x(const uint8 *srcPtr, uint32 srcPitch, */ #if 0 void Edge2x_Interp(const uint8 *srcPtr, uint32 srcPitch, - uint8 *dstPtr, uint32 dstPitch, int width, int height) -{ + uint8 *dstPtr, uint32 dstPitch, int width, int height) { /* Initialize stuff */ - if (!init_flag) - { + if (!init_flag) { cur_screen_width = g_system->getWidth(); cur_screen_height = g_system->getHeight(); /* set initial best guess on min/max screen addresses */ /* indent by 1 in case only the mouse is ever drawn */ src_addr_min = (const uint16 *) srcPtr + 1; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * - srcPitch)) + (width - 1) - 1; + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * + srcPitch)) + (width - 1) - 1; initTables(srcPtr, srcPitch, width, height); init_flag = 1; @@ -4338,23 +4084,21 @@ void Edge2x_Interp(const uint8 *srcPtr, uint32 srcPitch, /* Uh oh, the screen size has changed */ if (cur_screen_width != g_system->getWidth() || - cur_screen_height != g_system->getHeight()) - { + cur_screen_height != g_system->getHeight()) { cur_screen_width = g_system->getWidth(); cur_screen_height = g_system->getHeight(); src_addr_min = (const uint16 *) srcPtr; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * srcPitch)) + - (width - 1); + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * srcPitch)) + + (width - 1); } /* Ah ha, we're doing the whole screen, so we can save the bounds of the src array for later bounds checking */ if (width == g_system->getWidth() && - height == g_system->getHeight()) - { + height == g_system->getHeight()) { src_addr_min = (const uint16 *) srcPtr; - src_addr_max = ((const uint16 *) (srcPtr + (height - 1) * srcPitch)) + - (width - 1); + src_addr_max = ((const uint16 *)(srcPtr + (height - 1) * srcPitch)) + + (width - 1); } /* resize and/or blank the old src and dst array */ @@ -4364,15 +4108,12 @@ void Edge2x_Interp(const uint8 *srcPtr, uint32 srcPitch, * We're probably drawing an overlay now. */ if ((const uint16 *) srcPtr < src_addr_min || - (const uint16 *) srcPtr > src_addr_max) - { + (const uint16 *) srcPtr > src_addr_max) { antiAliasPass2x(srcPtr, dstPtr, width, height, - 2*width, 2*height, srcPitch, dstPitch, 1, 0); - } - else /* Draw the regular screen, this isn't an overlay. */ - { + 2 * width, 2 * height, srcPitch, dstPitch, 1, 0); + } else { /* Draw the regular screen, this isn't an overlay. */ antiAliasPass2x(srcPtr, dstPtr, width, height, - 2*width, 2*height, srcPitch, dstPitch, 0, 1); + 2 * width, 2 * height, srcPitch, dstPitch, 0, 1); } /* fill old src array */ @@ -4396,18 +4137,18 @@ void EdgePlugin::deinitialize() { } void EdgePlugin::scale(const uint8 *srcPtr, uint32 srcPitch, - uint8 *dstPtr, uint32 dstPitch, int width, int height, int x, int y) { + uint8 *dstPtr, uint32 dstPitch, int width, int height, int x, int y) { if (_format.bytesPerPixel == 2) { if (_factor == 2) { if (_format.gLoss == 2) - antiAliasPass2x >(srcPtr, dstPtr, width, height, 2*width, 2*height, srcPitch, dstPitch, 0, 1); + antiAliasPass2x >(srcPtr, dstPtr, width, height, 2 * width, 2 * height, srcPitch, dstPitch, 0, 1); else - antiAliasPass2x >(srcPtr, dstPtr, width, height, 2*width, 2*height, srcPitch, dstPitch, 0, 1); + antiAliasPass2x >(srcPtr, dstPtr, width, height, 2 * width, 2 * height, srcPitch, dstPitch, 0, 1); } else { if (_format.gLoss == 2) - antiAliasPass3x >(srcPtr, dstPtr, width, height, 3*width, 3*height, srcPitch, dstPitch, 0); + antiAliasPass3x >(srcPtr, dstPtr, width, height, 3 * width, 3 * height, srcPitch, dstPitch, 0); else - antiAliasPass3x >(srcPtr, dstPtr, width, height, 3*width, 3*height, srcPitch, dstPitch, 0); + antiAliasPass3x >(srcPtr, dstPtr, width, height, 3 * width, 3 * height, srcPitch, dstPitch, 0); } } else { warning("FIXME: EdgePlugin 32bpp format");