5 * Copyright (C) 2007 Hiroshi Morii All Rights Reserved.
6 * Email koolsmoky(at)users.sourceforge.net
7 * Web http://www.3dfxzone.it/koolsmoky
9 * this is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2, or (at your option)
14 * this is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with GNU Make; see the file COPYING. If not, write to
21 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 /* Based on Derek Liauw Kie Fa and Rice1964 Super2xSaI code */
26 int row0, row1, row2, row3;
27 int col0, col1, col2, col3;
32 for (y = 0; y < height; y++) {
33 if ((y > 0) && (y < height - 1)) {
38 row3 = (y == height - 2 ? width : width << 1);
46 for (x = 0; x < width; x++) {
47 //--------------------------------------- B0 B1 B2 B3
51 if ((x > 0) && (x < width - 1)) {
55 col3 = (x == width - 2 ? 1 : 2);
63 colorB0 = *(srcPtr + col0 + row0);
64 colorB1 = *(srcPtr + col1 + row0);
65 colorB2 = *(srcPtr + col2 + row0);
66 colorB3 = *(srcPtr + col3 + row0);
68 color4 = *(srcPtr + col0 + row1);
69 color5 = *(srcPtr + col1 + row1);
70 color6 = *(srcPtr + col2 + row1);
71 colorS2 = *(srcPtr + col3 + row1);
73 color1 = *(srcPtr + col0 + row2);
74 color2 = *(srcPtr + col1 + row2);
75 color3 = *(srcPtr + col2 + row2);
76 colorS1 = *(srcPtr + col3 + row2);
78 colorA0 = *(srcPtr + col0 + row3);
79 colorA1 = *(srcPtr + col1 + row3);
80 colorA2 = *(srcPtr + col2 + row3);
81 colorA3 = *(srcPtr + col3 + row3);
83 //--------------------------------------
84 if (color2 == color6 && color5 != color3)
85 product2b = product1b = color2;
86 else if (color5 == color3 && color2 != color6)
87 product2b = product1b = color5;
88 else if (color5 == color3 && color2 == color6) {
91 r += GET_RESULT(color6, color5, color1, colorA1);
92 r += GET_RESULT(color6, color5, color4, colorB1);
93 r += GET_RESULT(color6, color5, colorA2, colorS1);
94 r += GET_RESULT(color6, color5, colorB2, colorS2);
97 product2b = product1b = color6;
99 product2b = product1b = color5;
101 product2b = product1b = SAI_INTERPOLATE(color5, color6);
105 if (color6 == color3 && color3 == colorA1 && color2 != colorA2 && color3 != colorA0)
106 product2b = SAI_Q_INTERPOLATE(color3, color3, color3, color2);
107 else if (color5 == color2 && color2 == colorA2 && colorA1 != color3 && color2 != colorA3)
108 product2b = SAI_Q_INTERPOLATE(color2, color2, color2, color3);
110 product2b = SAI_INTERPOLATE(color2, color3);
112 if (color6 == color3 && color6 == colorB1 && color5 != colorB2 && color6 != colorB0)
113 product1b = SAI_Q_INTERPOLATE(color6, color6, color6, color5);
114 else if (color5 == color2 && color5 == colorB2 && colorB1 != color6 && color5 != colorB3)
115 product1b = SAI_Q_INTERPOLATE(color6, color5, color5, color5);
117 product1b = SAI_INTERPOLATE(color5, color6);
120 if (color5 == color3 && color2 != color6 && color4 == color5 && color5 != colorA2)
121 product2a = SAI_INTERPOLATE(color2, color5);
122 else if (color5 == color1 && color6 == color5 && color4 != color2 && color5 != colorA0)
123 product2a = SAI_INTERPOLATE(color2, color5);
127 if (color2 == color6 && color5 != color3 && color1 == color2 && color2 != colorB2)
128 product1a = SAI_INTERPOLATE(color2, color5);
129 else if (color4 == color2 && color3 == color2 && color1 != color5 && color2 != colorB0)
130 product1a = SAI_INTERPOLATE(color2, color5);
135 destPtr[0] = product1a;
136 destPtr[1] = product1b;
137 destPtr[destWidth] = product2a;
138 destPtr[destWidth + 1] = product2b;
143 srcPtr += (pitch-width);
144 destPtr += (((pitch-width)<<1)+(pitch<<1));