1/*
2 * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26
27/*
28 * DESCRIPTION:
29 *
30 *   mlib_u16 mlib_div6_tab[x] = 0xff00/6/x;
31 *   mlib_u16 mlib_div1_tab[x] = 0xff00/x;
32 *   mlib_d64 mlib_U82D64[x] = (mlib_d64)x;
33 *   mlib_f32 mlib_U82F32[x] = (mlib_f32)x;
34 *   mlib_f32 mlib_HSL2RGB_L2[x] = x/255.0 for x<128, and (255-x)/255.0 for x >= 128;
35 *   mlib_f32 mlib_HSL2RGB_F[x] = 1.0 - fabs(fraction(x*3/256.) * 4.0f - 2.0)
36 *
37 * REFERENCING:
38 *   mlib_div* tables are used to exclude dividing in functions
39 *     mlib_ImageColorRGB2HSV
40 *     mlib_ImageColorRGB2HSL
41 *     mlib_ImageDivAlpha
42 *
43 *   table mlib_U82D64 is used to exclude conversion unsigned
44 *   byte to double in functions
45 *     mlib_ImageColorConvert...
46 *     mlib_ImageDataTypeConvert
47 *     mlib_ImageAffine
48 *     mlib_ImageAffineTable
49 *     mlib_ImageZoomTranslate
50 *     mlib_ImageZoomTranslateTable
51 *     mlib_ImageGridWarp
52 *     mlib_ImagePolynomialWarp
53 *     mlib_ImageCrossCorrel
54 *     mlib_ImageMoment2
55 *     mlib_ImageStdDev
56 *     mlib_ImageFourierTransform
57 *
58 *   table mlib_U82F32 is used to exclude conversion unsigned
59 *   byte to float in functions
60 *     mlib_ImageBlend
61 *     mlib_ImageDivShift
62 *     mlib_ImageMulAlpha
63 *     mlib_ImageMulAlpha_Inp
64 *     mlib_ImageMulShift
65 *     mlib_ImageBlend_BDST_BSRC
66 *     mlib_ImageColorHSL2RGB
67 *     mlib_ImageColorHSV2RGB
68 *     mlib_ImageDataTypeConvert
69 *     mlib_ImageAffine
70 *     mlib_ImageAffineTable
71 *     mlib_ImageZoomTranslate
72 *     mlib_ImageZoomTranslateTable
73 *     mlib_ImageConvMxN
74 *     mlib_ImageSobel
75 *     mlib_ImageGradient3x3
76 *     mlib_ImageGradientMxN
77 *
78 *   tables mlib_HSL2RGB_* are used to exclude conversion unsigned
79 *   byte to float in functions with some computations
80 *     mlib_ImageColorHSL2RGB
81 */
82
83#include "mlib_image.h"
84#define __DIV_TABLE_DEFINED
85#include "mlib_ImageDivTables.h"
86
87/***************************************************************/
88/* *INDENT-OFF* */
89
90const mlib_u16 mlib_div6_tab[] = {
91 32767, 10880,  5440,  3627,  2720,  2176,  1813,  1554,
92  1360,  1209,  1088,   989,   907,   837,   777,   725,
93   680,   640,   604,   573,   544,   518,   495,   473,
94   453,   435,   418,   403,   389,   375,   363,   351,
95   340,   330,   320,   311,   302,   294,   286,   279,
96   272,   265,   259,   253,   247,   242,   237,   231,
97   227,   222,   218,   213,   209,   205,   201,   198,
98   194,   191,   188,   184,   181,   178,   175,   173,
99   170,   167,   165,   162,   160,   158,   155,   153,
100   151,   149,   147,   145,   143,   141,   139,   138,
101   136,   134,   133,   131,   130,   128,   127,   125,
102   124,   122,   121,   120,   118,   117,   116,   115,
103   113,   112,   111,   110,   109,   108,   107,   106,
104   105,   104,   103,   102,   101,   100,    99,    98,
105    97,    96,    95,    95,    94,    93,    92,    91,
106    91,    90,    89,    88,    88,    87,    86,    86,
107    85,    84,    84,    83,    82,    82,    81,    81,
108    80,    79,    79,    78,    78,    77,    77,    76,
109    76,    75,    75,    74,    74,    73,    73,    72,
110    72,    71,    71,    70,    70,    69,    69,    68,
111    68,    68,    67,    67,    66,    66,    66,    65,
112    65,    64,    64,    64,    63,    63,    63,    62,
113    62,    61,    61,    61,    60,    60,    60,    59,
114    59,    59,    58,    58,    58,    58,    57,    57,
115    57,    56,    56,    56,    56,    55,    55,    55,
116    54,    54,    54,    54,    53,    53,    53,    53,
117    52,    52,    52,    52,    51,    51,    51,    51,
118    50,    50,    50,    50,    49,    49,    49,    49,
119    49,    48,    48,    48,    48,    48,    47,    47,
120    47,    47,    46,    46,    46,    46,    46,    46,
121    45,    45,    45,    45,    45,    44,    44,    44,
122    44,    44,    44,    43,    43,    43,    43,    43
123};
124
125/***************************************************************/
126
127const mlib_u16 mlib_div1_tab[] = {
128 65280, 65280, 32640, 21760, 16320, 13056, 10880,  9326,
129  8160,  7253,  6528,  5935,  5440,  5022,  4663,  4352,
130  4080,  3840,  3627,  3436,  3264,  3109,  2967,  2838,
131  2720,  2611,  2511,  2418,  2331,  2251,  2176,  2106,
132  2040,  1978,  1920,  1865,  1813,  1764,  1718,  1674,
133  1632,  1592,  1554,  1518,  1484,  1451,  1419,  1389,
134  1360,  1332,  1306,  1280,  1255,  1232,  1209,  1187,
135  1166,  1145,  1126,  1106,  1088,  1070,  1053,  1036,
136  1020,  1004,   989,   974,   960,   946,   933,   919,
137   907,   894,   882,   870,   859,   848,   837,   826,
138   816,   806,   796,   787,   777,   768,   759,   750,
139   742,   733,   725,   717,   710,   702,   694,   687,
140   680,   673,   666,   659,   653,   646,   640,   634,
141   628,   622,   616,   610,   604,   599,   593,   588,
142   583,   578,   573,   568,   563,   558,   553,   549,
143   544,   540,   535,   531,   526,   522,   518,   514,
144   510,   506,   502,   498,   495,   491,   487,   484,
145   480,   476,   473,   470,   466,   463,   460,   457,
146   453,   450,   447,   444,   441,   438,   435,   432,
147   429,   427,   424,   421,   418,   416,   413,   411,
148   408,   405,   403,   400,   398,   396,   393,   391,
149   389,   386,   384,   382,   380,   377,   375,   373,
150   371,   369,   367,   365,   363,   361,   359,   357,
151   355,   353,   351,   349,   347,   345,   344,   342,
152   340,   338,   336,   335,   333,   331,   330,   328,
153   326,   325,   323,   322,   320,   318,   317,   315,
154   314,   312,   311,   309,   308,   306,   305,   304,
155   302,   301,   299,   298,   297,   295,   294,   293,
156   291,   290,   289,   288,   286,   285,   284,   283,
157   281,   280,   279,   278,   277,   275,   274,   273,
158   272,   271,   270,   269,   268,   266,   265,   264,
159   263,   262,   261,   260,   259,   258,   257,   256
160};
161
162/***************************************************************/
163
164const mlib_f32 mlib_HSL2RGB_L2[] = {
165 0.000000f, 0.003922f, 0.007843f, 0.011765f, 0.015686f, 0.019608f, 0.023529f, 0.027451f,
166 0.031373f, 0.035294f, 0.039216f, 0.043137f, 0.047059f, 0.050980f, 0.054902f, 0.058824f,
167 0.062745f, 0.066667f, 0.070588f, 0.074510f, 0.078431f, 0.082353f, 0.086275f, 0.090196f,
168 0.094118f, 0.098039f, 0.101961f, 0.105882f, 0.109804f, 0.113725f, 0.117647f, 0.121569f,
169 0.125490f, 0.129412f, 0.133333f, 0.137255f, 0.141176f, 0.145098f, 0.149020f, 0.152941f,
170 0.156863f, 0.160784f, 0.164706f, 0.168627f, 0.172549f, 0.176471f, 0.180392f, 0.184314f,
171 0.188235f, 0.192157f, 0.196078f, 0.200000f, 0.203922f, 0.207843f, 0.211765f, 0.215686f,
172 0.219608f, 0.223529f, 0.227451f, 0.231373f, 0.235294f, 0.239216f, 0.243137f, 0.247059f,
173 0.250980f, 0.254902f, 0.258824f, 0.262745f, 0.266667f, 0.270588f, 0.274510f, 0.278431f,
174 0.282353f, 0.286275f, 0.290196f, 0.294118f, 0.298039f, 0.301961f, 0.305882f, 0.309804f,
175 0.313725f, 0.317647f, 0.321569f, 0.325490f, 0.329412f, 0.333333f, 0.337255f, 0.341176f,
176 0.345098f, 0.349020f, 0.352941f, 0.356863f, 0.360784f, 0.364706f, 0.368627f, 0.372549f,
177 0.376471f, 0.380392f, 0.384314f, 0.388235f, 0.392157f, 0.396078f, 0.400000f, 0.403922f,
178 0.407843f, 0.411765f, 0.415686f, 0.419608f, 0.423529f, 0.427451f, 0.431373f, 0.435294f,
179 0.439216f, 0.443137f, 0.447059f, 0.450980f, 0.454902f, 0.458824f, 0.462745f, 0.466667f,
180 0.470588f, 0.474510f, 0.478431f, 0.482353f, 0.486275f, 0.490196f, 0.494118f, 0.498039f,
181 0.498039f, 0.494118f, 0.490196f, 0.486275f, 0.482353f, 0.478431f, 0.474510f, 0.470588f,
182 0.466667f, 0.462745f, 0.458824f, 0.454902f, 0.450980f, 0.447059f, 0.443137f, 0.439216f,
183 0.435294f, 0.431373f, 0.427451f, 0.423529f, 0.419608f, 0.415686f, 0.411765f, 0.407843f,
184 0.403922f, 0.400000f, 0.396078f, 0.392157f, 0.388235f, 0.384314f, 0.380392f, 0.376471f,
185 0.372549f, 0.368627f, 0.364706f, 0.360784f, 0.356863f, 0.352941f, 0.349020f, 0.345098f,
186 0.341176f, 0.337255f, 0.333333f, 0.329412f, 0.325490f, 0.321569f, 0.317647f, 0.313725f,
187 0.309804f, 0.305882f, 0.301961f, 0.298039f, 0.294118f, 0.290196f, 0.286275f, 0.282353f,
188 0.278431f, 0.274510f, 0.270588f, 0.266667f, 0.262745f, 0.258824f, 0.254902f, 0.250980f,
189 0.247059f, 0.243137f, 0.239216f, 0.235294f, 0.231373f, 0.227451f, 0.223529f, 0.219608f,
190 0.215686f, 0.211765f, 0.207843f, 0.203922f, 0.200000f, 0.196078f, 0.192157f, 0.188235f,
191 0.184314f, 0.180392f, 0.176471f, 0.172549f, 0.168627f, 0.164706f, 0.160784f, 0.156863f,
192 0.152941f, 0.149020f, 0.145098f, 0.141176f, 0.137255f, 0.133333f, 0.129412f, 0.125490f,
193 0.121569f, 0.117647f, 0.113725f, 0.109804f, 0.105882f, 0.101961f, 0.098039f, 0.094118f,
194 0.090196f, 0.086275f, 0.082353f, 0.078431f, 0.074510f, 0.070588f, 0.066667f, 0.062745f,
195 0.058824f, 0.054902f, 0.050980f, 0.047059f, 0.043137f, 0.039216f, 0.035294f, 0.031373f,
196 0.027451f, 0.023529f, 0.019608f, 0.015686f, 0.011765f, 0.007843f, 0.003922f, 0.000000f
197};
198
199/***************************************************************/
200
201const mlib_f32 mlib_HSL2RGB_F[] = {
202 -1.000000f, -0.953125f, -0.906250f, -0.859375f, -0.812500f, -0.765625f, -0.718750f, -0.671875f,
203 -0.625000f, -0.578125f, -0.531250f, -0.484375f, -0.437500f, -0.390625f, -0.343750f, -0.296875f,
204 -0.250000f, -0.203125f, -0.156250f, -0.109375f, -0.062500f, -0.015625f,  0.031250f,  0.078125f,
205  0.125000f,  0.171875f,  0.218750f,  0.265625f,  0.312500f,  0.359375f,  0.406250f,  0.453125f,
206  0.500000f,  0.546875f,  0.593750f,  0.640625f,  0.687500f,  0.734375f,  0.781250f,  0.828125f,
207  0.875000f,  0.921875f,  0.968750f,  0.984375f,  0.937500f,  0.890625f,  0.843750f,  0.796875f,
208  0.750000f,  0.703125f,  0.656250f,  0.609375f,  0.562500f,  0.515625f,  0.468750f,  0.421875f,
209  0.375000f,  0.328125f,  0.281250f,  0.234375f,  0.187500f,  0.140625f,  0.093750f,  0.046875f,
210  0.000000f, -0.046875f, -0.093750f, -0.140625f, -0.187500f, -0.234375f, -0.281250f, -0.328125f,
211 -0.375000f, -0.421875f, -0.468750f, -0.515625f, -0.562500f, -0.609375f, -0.656250f, -0.703125f,
212 -0.750000f, -0.796875f, -0.843750f, -0.890625f, -0.937500f, -0.984375f, -0.968750f, -0.921875f,
213 -0.875000f, -0.828125f, -0.781250f, -0.734375f, -0.687500f, -0.640625f, -0.593750f, -0.546875f,
214 -0.500000f, -0.453125f, -0.406250f, -0.359375f, -0.312500f, -0.265625f, -0.218750f, -0.171875f,
215 -0.125000f, -0.078125f, -0.031250f,  0.015625f,  0.062500f,  0.109375f,  0.156250f,  0.203125f,
216  0.250000f,  0.296875f,  0.343750f,  0.390625f,  0.437500f,  0.484375f,  0.531250f,  0.578125f,
217  0.625000f,  0.671875f,  0.718750f,  0.765625f,  0.812500f,  0.859375f,  0.906250f,  0.953125f,
218  1.000000f,  0.953125f,  0.906250f,  0.859375f,  0.812500f,  0.765625f,  0.718750f,  0.671875f,
219  0.625000f,  0.578125f,  0.531250f,  0.484375f,  0.437500f,  0.390625f,  0.343750f,  0.296875f,
220  0.250000f,  0.203125f,  0.156250f,  0.109375f,  0.062500f,  0.015625f, -0.031250f, -0.078125f,
221 -0.125000f, -0.171875f, -0.218750f, -0.265625f, -0.312500f, -0.359375f, -0.406250f, -0.453125f,
222 -0.500000f, -0.546875f, -0.593750f, -0.640625f, -0.687500f, -0.734375f, -0.781250f, -0.828125f,
223 -0.875000f, -0.921875f, -0.968750f, -0.984375f, -0.937500f, -0.890625f, -0.843750f, -0.796875f,
224 -0.750000f, -0.703125f, -0.656250f, -0.609375f, -0.562500f, -0.515625f, -0.468750f, -0.421875f,
225 -0.375000f, -0.328125f, -0.281250f, -0.234375f, -0.187500f, -0.140625f, -0.093750f, -0.046875f,
226  0.000000f,  0.046875f,  0.093750f,  0.140625f,  0.187500f,  0.234375f,  0.281250f,  0.328125f,
227  0.375000f,  0.421875f,  0.468750f,  0.515625f,  0.562500f,  0.609375f,  0.656250f,  0.703125f,
228  0.750000f,  0.796875f,  0.843750f,  0.890625f,  0.937500f,  0.984375f,  0.968750f,  0.921875f,
229  0.875000f,  0.828125f,  0.781250f,  0.734375f,  0.687500f,  0.640625f,  0.593750f,  0.546875f,
230  0.500000f,  0.453125f,  0.406250f,  0.359375f,  0.312500f,  0.265625f,  0.218750f,  0.171875f,
231  0.125000f,  0.078125f,  0.031250f, -0.015625f, -0.062500f, -0.109375f, -0.156250f, -0.203125f,
232 -0.250000f, -0.296875f, -0.343750f, -0.390625f, -0.437500f, -0.484375f, -0.531250f, -0.578125f,
233 -0.625000f, -0.671875f, -0.718750f, -0.765625f, -0.812500f, -0.859375f, -0.906250f, -0.953125f
234};
235
236/***************************************************************/
237
238const mlib_f32 mlib_U82F32[] = {
239    0.0f,   1.0f,   2.0f,   3.0f,   4.0f,   5.0f,   6.0f,   7.0f,
240    8.0f,   9.0f,  10.0f,  11.0f,  12.0f,  13.0f,  14.0f,  15.0f,
241   16.0f,  17.0f,  18.0f,  19.0f,  20.0f,  21.0f,  22.0f,  23.0f,
242   24.0f,  25.0f,  26.0f,  27.0f,  28.0f,  29.0f,  30.0f,  31.0f,
243   32.0f,  33.0f,  34.0f,  35.0f,  36.0f,  37.0f,  38.0f,  39.0f,
244   40.0f,  41.0f,  42.0f,  43.0f,  44.0f,  45.0f,  46.0f,  47.0f,
245   48.0f,  49.0f,  50.0f,  51.0f,  52.0f,  53.0f,  54.0f,  55.0f,
246   56.0f,  57.0f,  58.0f,  59.0f,  60.0f,  61.0f,  62.0f,  63.0f,
247   64.0f,  65.0f,  66.0f,  67.0f,  68.0f,  69.0f,  70.0f,  71.0f,
248   72.0f,  73.0f,  74.0f,  75.0f,  76.0f,  77.0f,  78.0f,  79.0f,
249   80.0f,  81.0f,  82.0f,  83.0f,  84.0f,  85.0f,  86.0f,  87.0f,
250   88.0f,  89.0f,  90.0f,  91.0f,  92.0f,  93.0f,  94.0f,  95.0f,
251   96.0f,  97.0f,  98.0f,  99.0f, 100.0f, 101.0f, 102.0f, 103.0f,
252  104.0f, 105.0f, 106.0f, 107.0f, 108.0f, 109.0f, 110.0f, 111.0f,
253  112.0f, 113.0f, 114.0f, 115.0f, 116.0f, 117.0f, 118.0f, 119.0f,
254  120.0f, 121.0f, 122.0f, 123.0f, 124.0f, 125.0f, 126.0f, 127.0f,
255  128.0f, 129.0f, 130.0f, 131.0f, 132.0f, 133.0f, 134.0f, 135.0f,
256  136.0f, 137.0f, 138.0f, 139.0f, 140.0f, 141.0f, 142.0f, 143.0f,
257  144.0f, 145.0f, 146.0f, 147.0f, 148.0f, 149.0f, 150.0f, 151.0f,
258  152.0f, 153.0f, 154.0f, 155.0f, 156.0f, 157.0f, 158.0f, 159.0f,
259  160.0f, 161.0f, 162.0f, 163.0f, 164.0f, 165.0f, 166.0f, 167.0f,
260  168.0f, 169.0f, 170.0f, 171.0f, 172.0f, 173.0f, 174.0f, 175.0f,
261  176.0f, 177.0f, 178.0f, 179.0f, 180.0f, 181.0f, 182.0f, 183.0f,
262  184.0f, 185.0f, 186.0f, 187.0f, 188.0f, 189.0f, 190.0f, 191.0f,
263  192.0f, 193.0f, 194.0f, 195.0f, 196.0f, 197.0f, 198.0f, 199.0f,
264  200.0f, 201.0f, 202.0f, 203.0f, 204.0f, 205.0f, 206.0f, 207.0f,
265  208.0f, 209.0f, 210.0f, 211.0f, 212.0f, 213.0f, 214.0f, 215.0f,
266  216.0f, 217.0f, 218.0f, 219.0f, 220.0f, 221.0f, 222.0f, 223.0f,
267  224.0f, 225.0f, 226.0f, 227.0f, 228.0f, 229.0f, 230.0f, 231.0f,
268  232.0f, 233.0f, 234.0f, 235.0f, 236.0f, 237.0f, 238.0f, 239.0f,
269  240.0f, 241.0f, 242.0f, 243.0f, 244.0f, 245.0f, 246.0f, 247.0f,
270  248.0f, 249.0f, 250.0f, 251.0f, 252.0f, 253.0f, 254.0f, 255.0f,
271  256.0f
272};
273
274/***************************************************************/
275
276const mlib_d64 mlib_U82D64[] = {
277    0.0,   1.0,   2.0,   3.0,   4.0,   5.0,   6.0,   7.0,
278    8.0,   9.0,  10.0,  11.0,  12.0,  13.0,  14.0,  15.0,
279   16.0,  17.0,  18.0,  19.0,  20.0,  21.0,  22.0,  23.0,
280   24.0,  25.0,  26.0,  27.0,  28.0,  29.0,  30.0,  31.0,
281   32.0,  33.0,  34.0,  35.0,  36.0,  37.0,  38.0,  39.0,
282   40.0,  41.0,  42.0,  43.0,  44.0,  45.0,  46.0,  47.0,
283   48.0,  49.0,  50.0,  51.0,  52.0,  53.0,  54.0,  55.0,
284   56.0,  57.0,  58.0,  59.0,  60.0,  61.0,  62.0,  63.0,
285   64.0,  65.0,  66.0,  67.0,  68.0,  69.0,  70.0,  71.0,
286   72.0,  73.0,  74.0,  75.0,  76.0,  77.0,  78.0,  79.0,
287   80.0,  81.0,  82.0,  83.0,  84.0,  85.0,  86.0,  87.0,
288   88.0,  89.0,  90.0,  91.0,  92.0,  93.0,  94.0,  95.0,
289   96.0,  97.0,  98.0,  99.0, 100.0, 101.0, 102.0, 103.0,
290  104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0,
291  112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0,
292  120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0,
293  128.0, 129.0, 130.0, 131.0, 132.0, 133.0, 134.0, 135.0,
294  136.0, 137.0, 138.0, 139.0, 140.0, 141.0, 142.0, 143.0,
295  144.0, 145.0, 146.0, 147.0, 148.0, 149.0, 150.0, 151.0,
296  152.0, 153.0, 154.0, 155.0, 156.0, 157.0, 158.0, 159.0,
297  160.0, 161.0, 162.0, 163.0, 164.0, 165.0, 166.0, 167.0,
298  168.0, 169.0, 170.0, 171.0, 172.0, 173.0, 174.0, 175.0,
299  176.0, 177.0, 178.0, 179.0, 180.0, 181.0, 182.0, 183.0,
300  184.0, 185.0, 186.0, 187.0, 188.0, 189.0, 190.0, 191.0,
301  192.0, 193.0, 194.0, 195.0, 196.0, 197.0, 198.0, 199.0,
302  200.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0, 207.0,
303  208.0, 209.0, 210.0, 211.0, 212.0, 213.0, 214.0, 215.0,
304  216.0, 217.0, 218.0, 219.0, 220.0, 221.0, 222.0, 223.0,
305  224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0,
306  232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0,
307  240.0, 241.0, 242.0, 243.0, 244.0, 245.0, 246.0, 247.0,
308  248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 254.0, 255.0,
309  256.0
310};
311
312/***************************************************************/
313
314const mlib_u32 mlib_FlipAndFixRotateTable[] = {
315  0x00000000, 0x00000000, 0x00000000, 0x00000080,
316  0x00000000, 0x00008000, 0x00000000, 0x00008080,
317  0x00000000, 0x00800000, 0x00000000, 0x00800080,
318  0x00000000, 0x00808000, 0x00000000, 0x00808080,
319  0x00000000, 0x80000000, 0x00000000, 0x80000080,
320  0x00000000, 0x80008000, 0x00000000, 0x80008080,
321  0x00000000, 0x80800000, 0x00000000, 0x80800080,
322  0x00000000, 0x80808000, 0x00000000, 0x80808080,
323  0x00000080, 0x00000000, 0x00000080, 0x00000080,
324  0x00000080, 0x00008000, 0x00000080, 0x00008080,
325  0x00000080, 0x00800000, 0x00000080, 0x00800080,
326  0x00000080, 0x00808000, 0x00000080, 0x00808080,
327  0x00000080, 0x80000000, 0x00000080, 0x80000080,
328  0x00000080, 0x80008000, 0x00000080, 0x80008080,
329  0x00000080, 0x80800000, 0x00000080, 0x80800080,
330  0x00000080, 0x80808000, 0x00000080, 0x80808080,
331  0x00008000, 0x00000000, 0x00008000, 0x00000080,
332  0x00008000, 0x00008000, 0x00008000, 0x00008080,
333  0x00008000, 0x00800000, 0x00008000, 0x00800080,
334  0x00008000, 0x00808000, 0x00008000, 0x00808080,
335  0x00008000, 0x80000000, 0x00008000, 0x80000080,
336  0x00008000, 0x80008000, 0x00008000, 0x80008080,
337  0x00008000, 0x80800000, 0x00008000, 0x80800080,
338  0x00008000, 0x80808000, 0x00008000, 0x80808080,
339  0x00008080, 0x00000000, 0x00008080, 0x00000080,
340  0x00008080, 0x00008000, 0x00008080, 0x00008080,
341  0x00008080, 0x00800000, 0x00008080, 0x00800080,
342  0x00008080, 0x00808000, 0x00008080, 0x00808080,
343  0x00008080, 0x80000000, 0x00008080, 0x80000080,
344  0x00008080, 0x80008000, 0x00008080, 0x80008080,
345  0x00008080, 0x80800000, 0x00008080, 0x80800080,
346  0x00008080, 0x80808000, 0x00008080, 0x80808080,
347  0x00800000, 0x00000000, 0x00800000, 0x00000080,
348  0x00800000, 0x00008000, 0x00800000, 0x00008080,
349  0x00800000, 0x00800000, 0x00800000, 0x00800080,
350  0x00800000, 0x00808000, 0x00800000, 0x00808080,
351  0x00800000, 0x80000000, 0x00800000, 0x80000080,
352  0x00800000, 0x80008000, 0x00800000, 0x80008080,
353  0x00800000, 0x80800000, 0x00800000, 0x80800080,
354  0x00800000, 0x80808000, 0x00800000, 0x80808080,
355  0x00800080, 0x00000000, 0x00800080, 0x00000080,
356  0x00800080, 0x00008000, 0x00800080, 0x00008080,
357  0x00800080, 0x00800000, 0x00800080, 0x00800080,
358  0x00800080, 0x00808000, 0x00800080, 0x00808080,
359  0x00800080, 0x80000000, 0x00800080, 0x80000080,
360  0x00800080, 0x80008000, 0x00800080, 0x80008080,
361  0x00800080, 0x80800000, 0x00800080, 0x80800080,
362  0x00800080, 0x80808000, 0x00800080, 0x80808080,
363  0x00808000, 0x00000000, 0x00808000, 0x00000080,
364  0x00808000, 0x00008000, 0x00808000, 0x00008080,
365  0x00808000, 0x00800000, 0x00808000, 0x00800080,
366  0x00808000, 0x00808000, 0x00808000, 0x00808080,
367  0x00808000, 0x80000000, 0x00808000, 0x80000080,
368  0x00808000, 0x80008000, 0x00808000, 0x80008080,
369  0x00808000, 0x80800000, 0x00808000, 0x80800080,
370  0x00808000, 0x80808000, 0x00808000, 0x80808080,
371  0x00808080, 0x00000000, 0x00808080, 0x00000080,
372  0x00808080, 0x00008000, 0x00808080, 0x00008080,
373  0x00808080, 0x00800000, 0x00808080, 0x00800080,
374  0x00808080, 0x00808000, 0x00808080, 0x00808080,
375  0x00808080, 0x80000000, 0x00808080, 0x80000080,
376  0x00808080, 0x80008000, 0x00808080, 0x80008080,
377  0x00808080, 0x80800000, 0x00808080, 0x80800080,
378  0x00808080, 0x80808000, 0x00808080, 0x80808080,
379  0x80000000, 0x00000000, 0x80000000, 0x00000080,
380  0x80000000, 0x00008000, 0x80000000, 0x00008080,
381  0x80000000, 0x00800000, 0x80000000, 0x00800080,
382  0x80000000, 0x00808000, 0x80000000, 0x00808080,
383  0x80000000, 0x80000000, 0x80000000, 0x80000080,
384  0x80000000, 0x80008000, 0x80000000, 0x80008080,
385  0x80000000, 0x80800000, 0x80000000, 0x80800080,
386  0x80000000, 0x80808000, 0x80000000, 0x80808080,
387  0x80000080, 0x00000000, 0x80000080, 0x00000080,
388  0x80000080, 0x00008000, 0x80000080, 0x00008080,
389  0x80000080, 0x00800000, 0x80000080, 0x00800080,
390  0x80000080, 0x00808000, 0x80000080, 0x00808080,
391  0x80000080, 0x80000000, 0x80000080, 0x80000080,
392  0x80000080, 0x80008000, 0x80000080, 0x80008080,
393  0x80000080, 0x80800000, 0x80000080, 0x80800080,
394  0x80000080, 0x80808000, 0x80000080, 0x80808080,
395  0x80008000, 0x00000000, 0x80008000, 0x00000080,
396  0x80008000, 0x00008000, 0x80008000, 0x00008080,
397  0x80008000, 0x00800000, 0x80008000, 0x00800080,
398  0x80008000, 0x00808000, 0x80008000, 0x00808080,
399  0x80008000, 0x80000000, 0x80008000, 0x80000080,
400  0x80008000, 0x80008000, 0x80008000, 0x80008080,
401  0x80008000, 0x80800000, 0x80008000, 0x80800080,
402  0x80008000, 0x80808000, 0x80008000, 0x80808080,
403  0x80008080, 0x00000000, 0x80008080, 0x00000080,
404  0x80008080, 0x00008000, 0x80008080, 0x00008080,
405  0x80008080, 0x00800000, 0x80008080, 0x00800080,
406  0x80008080, 0x00808000, 0x80008080, 0x00808080,
407  0x80008080, 0x80000000, 0x80008080, 0x80000080,
408  0x80008080, 0x80008000, 0x80008080, 0x80008080,
409  0x80008080, 0x80800000, 0x80008080, 0x80800080,
410  0x80008080, 0x80808000, 0x80008080, 0x80808080,
411  0x80800000, 0x00000000, 0x80800000, 0x00000080,
412  0x80800000, 0x00008000, 0x80800000, 0x00008080,
413  0x80800000, 0x00800000, 0x80800000, 0x00800080,
414  0x80800000, 0x00808000, 0x80800000, 0x00808080,
415  0x80800000, 0x80000000, 0x80800000, 0x80000080,
416  0x80800000, 0x80008000, 0x80800000, 0x80008080,
417  0x80800000, 0x80800000, 0x80800000, 0x80800080,
418  0x80800000, 0x80808000, 0x80800000, 0x80808080,
419  0x80800080, 0x00000000, 0x80800080, 0x00000080,
420  0x80800080, 0x00008000, 0x80800080, 0x00008080,
421  0x80800080, 0x00800000, 0x80800080, 0x00800080,
422  0x80800080, 0x00808000, 0x80800080, 0x00808080,
423  0x80800080, 0x80000000, 0x80800080, 0x80000080,
424  0x80800080, 0x80008000, 0x80800080, 0x80008080,
425  0x80800080, 0x80800000, 0x80800080, 0x80800080,
426  0x80800080, 0x80808000, 0x80800080, 0x80808080,
427  0x80808000, 0x00000000, 0x80808000, 0x00000080,
428  0x80808000, 0x00008000, 0x80808000, 0x00008080,
429  0x80808000, 0x00800000, 0x80808000, 0x00800080,
430  0x80808000, 0x00808000, 0x80808000, 0x00808080,
431  0x80808000, 0x80000000, 0x80808000, 0x80000080,
432  0x80808000, 0x80008000, 0x80808000, 0x80008080,
433  0x80808000, 0x80800000, 0x80808000, 0x80800080,
434  0x80808000, 0x80808000, 0x80808000, 0x80808080,
435  0x80808080, 0x00000000, 0x80808080, 0x00000080,
436  0x80808080, 0x00008000, 0x80808080, 0x00008080,
437  0x80808080, 0x00800000, 0x80808080, 0x00800080,
438  0x80808080, 0x00808000, 0x80808080, 0x00808080,
439  0x80808080, 0x80000000, 0x80808080, 0x80000080,
440  0x80808080, 0x80008000, 0x80808080, 0x80008080,
441  0x80808080, 0x80800000, 0x80808080, 0x80800080,
442  0x80808080, 0x80808000, 0x80808080, 0x80808080,
443};
444
445/* *INDENT-ON* */
446/***************************************************************/
447