diff options
author | Joshua Bakita <bakitajoshua@gmail.com> | 2019-10-07 19:13:39 -0400 |
---|---|---|
committer | Joshua Bakita <bakitajoshua@gmail.com> | 2019-10-07 19:13:39 -0400 |
commit | 386b7d3366f1359a265da207a9cafa3edf553b64 (patch) | |
tree | c76120c2c138faed822e4ae386be6ef22a738a78 /baseline/source/epic/epic.c | |
parent | 54a3f7091a2146b29c73a6fdc4b62a5c4ad7a3d8 (diff) |
Reorganize and commit all the modified TACLeBench code and run scripts
Diffstat (limited to 'baseline/source/epic/epic.c')
-rw-r--r-- | baseline/source/epic/epic.c | 1141 |
1 files changed, 1141 insertions, 0 deletions
diff --git a/baseline/source/epic/epic.c b/baseline/source/epic/epic.c new file mode 100644 index 0000000..13ba442 --- /dev/null +++ b/baseline/source/epic/epic.c | |||
@@ -0,0 +1,1141 @@ | |||
1 | /* | ||
2 | |||
3 | This program is part of the TACLeBench benchmark suite. | ||
4 | Version V 2.0 | ||
5 | |||
6 | Name: epic | ||
7 | |||
8 | Author: Designed by Eero P. Simoncelli and Edward H. Adelson | ||
9 | Written by Eero P. Simoncelli | ||
10 | Developed at the Vision Science Group, The Media Laboratory | ||
11 | Copyright 1989, Massachusetts Institute of Technology | ||
12 | All rights reserved. | ||
13 | |||
14 | Function: Efficient Pyramid Image Coder | ||
15 | |||
16 | Source: MediaBench | ||
17 | |||
18 | |||
19 | Original name: epic | ||
20 | |||
21 | Changes: no major functional changes | ||
22 | |||
23 | License: | ||
24 | Permission to use, copy, or modify this software and its documentation | ||
25 | for educational and research purposes only and without fee is hereby | ||
26 | granted, provided that this copyright notice appear on all copies and | ||
27 | supporting documentation. For any other uses of this software, in | ||
28 | original or modified form, including but not limited to distribution | ||
29 | in whole or in part, specific prior permission must be obtained from | ||
30 | M.I.T. and the authors. These programs shall not be used, rewritten, | ||
31 | or adapted as the basis of a commercial software or hardware product | ||
32 | without first obtaining appropriate licenses from M.I.T. M.I.T. makes | ||
33 | no representations about the suitability of this software for any | ||
34 | purpose. It is provided "as is" without express or implied warranty. | ||
35 | */ | ||
36 | |||
37 | |||
38 | #include "../extra.h" | ||
39 | #include "epic.h" | ||
40 | |||
41 | #define X_SIZE 64 | ||
42 | #define Y_SIZE 64 | ||
43 | |||
44 | float epic_image[] = { | ||
45 | 0x89, 0x88, 0x87, 0x86, 0x89, 0x87, 0x84, 0x86, | ||
46 | 0x83, 0x89, 0x82, 0x83, 0x84, 0x81, 0x80, 0x80, | ||
47 | 0x81, 0x83, 0x88, 0x8A, 0x8E, 0x90, 0x96, 0x98, | ||
48 | 0x95, 0x92, 0x93, 0x88, 0x78, 0x7B, 0x60, 0x52, | ||
49 | 0x41, 0x3F, 0x3A, 0x46, 0x46, 0x48, 0x49, 0x48, | ||
50 | 0x4F, 0x4A, 0x49, 0x50, 0x4C, 0x4B, 0x4D, 0x4C, | ||
51 | 0x4E, 0x4E, 0x4A, 0x49, 0x4D, 0x54, 0x50, 0x59, | ||
52 | 0x51, 0x5A, 0x5E, 0x5A, 0x5D, 0x61, 0x59, 0x65, | ||
53 | 0x63, 0x65, 0x60, 0x62, 0x68, 0x67, 0x64, 0x61, | ||
54 | 0x64, 0x5E, 0x66, 0x63, 0x63, 0x61, 0x67, 0x68, | ||
55 | 0x62, 0x64, 0x66, 0x67, 0x64, 0x63, 0x66, 0x64, | ||
56 | 0x67, 0x66, 0x65, 0x64, 0x64, 0x6A, 0x66, 0x65, | ||
57 | 0x68, 0x66, 0x69, 0x67, 0x6A, 0x66, 0x68, 0x66, | ||
58 | 0x6C, 0x65, 0x69, 0x64, 0x65, 0x64, 0x66, 0x62, | ||
59 | 0x63, 0x68, 0x68, 0x65, 0x64, 0x64, 0x62, 0x63, | ||
60 | 0x68, 0x65, 0x66, 0x69, 0x66, 0x65, 0x61, 0x66, | ||
61 | 0x6E, 0x69, 0x64, 0x61, 0x63, 0x63, 0x66, 0x63, | ||
62 | 0x62, 0x64, 0x60, 0x68, 0x63, 0x61, 0x62, 0x65, | ||
63 | 0x60, 0x63, 0x60, 0x62, 0x60, 0x5E, 0x61, 0x62, | ||
64 | 0x5D, 0x5C, 0x57, 0x5B, 0x58, 0x53, 0x54, 0x47, | ||
65 | 0x49, 0x54, 0x5C, 0x6B, 0x6F, 0x77, 0x7F, 0x80, | ||
66 | 0x88, 0x8A, 0x8C, 0x85, 0x7A, 0x7D, 0x7F, 0x7D, | ||
67 | 0x80, 0x80, 0x81, 0x80, 0x85, 0x82, 0x81, 0x7E, | ||
68 | 0x80, 0x7F, 0x7F, 0x7E, 0x7D, 0x7E, 0x83, 0x7F, | ||
69 | 0x81, 0x83, 0x87, 0x82, 0x83, 0x88, 0x84, 0x82, | ||
70 | 0x82, 0x8A, 0xB3, 0xC5, 0xCD, 0xCF, 0xD4, 0xD3, | ||
71 | 0xD6, 0xCC, 0xB5, 0x80, 0x4E, 0x48, 0x4D, 0x4D, | ||
72 | 0x57, 0x5A, 0x59, 0x5C, 0x62, 0x58, 0x5C, 0x5B, | ||
73 | 0x5B, 0x62, 0x5D, 0x5C, 0x59, 0x5C, 0x5A, 0x59, | ||
74 | 0x5D, 0x5F, 0x5B, 0x5F, 0x60, 0x5E, 0x5E, 0x57, | ||
75 | 0x5F, 0x5F, 0x60, 0x61, 0x5C, 0x61, 0x60, 0x5B, | ||
76 | 0x56, 0x56, 0x57, 0x58, 0x6E, 0x91, 0x96, 0x7E, | ||
77 | 0x89, 0x88, 0x87, 0x86, 0x8A, 0x87, 0x84, 0x87, | ||
78 | 0x83, 0x89, 0x82, 0x83, 0x84, 0x81, 0x80, 0x80, | ||
79 | 0x81, 0x83, 0x88, 0x8A, 0x8E, 0x90, 0x96, 0x98, | ||
80 | 0x94, 0x93, 0x93, 0x88, 0x78, 0x7B, 0x60, 0x52, | ||
81 | 0x41, 0x3F, 0x39, 0x46, 0x46, 0x48, 0x49, 0x47, | ||
82 | 0x50, 0x4A, 0x49, 0x50, 0x4D, 0x4B, 0x4D, 0x4C, | ||
83 | 0x4E, 0x4E, 0x4A, 0x49, 0x4E, 0x54, 0x4F, 0x59, | ||
84 | 0x51, 0x5A, 0x5E, 0x5A, 0x5D, 0x61, 0x59, 0x65, | ||
85 | 0x63, 0x65, 0x5F, 0x62, 0x68, 0x67, 0x64, 0x61, | ||
86 | 0x64, 0x5E, 0x66, 0x63, 0x63, 0x61, 0x67, 0x69, | ||
87 | 0x61, 0x63, 0x66, 0x67, 0x65, 0x63, 0x66, 0x64, | ||
88 | 0x67, 0x67, 0x65, 0x64, 0x64, 0x6A, 0x66, 0x65, | ||
89 | 0x68, 0x66, 0x69, 0x67, 0x6A, 0x67, 0x69, 0x66, | ||
90 | 0x6C, 0x65, 0x69, 0x64, 0x65, 0x64, 0x66, 0x62, | ||
91 | 0x63, 0x68, 0x68, 0x66, 0x64, 0x64, 0x62, 0x63, | ||
92 | 0x68, 0x65, 0x66, 0x6A, 0x67, 0x65, 0x60, 0x66, | ||
93 | 0x6F, 0x6A, 0x64, 0x61, 0x64, 0x63, 0x66, 0x63, | ||
94 | 0x62, 0x64, 0x60, 0x69, 0x64, 0x61, 0x62, 0x65, | ||
95 | 0x60, 0x63, 0x60, 0x62, 0x60, 0x5E, 0x61, 0x62, | ||
96 | 0x5D, 0x5C, 0x57, 0x5B, 0x59, 0x53, 0x54, 0x47, | ||
97 | 0x49, 0x54, 0x5C, 0x6B, 0x6F, 0x77, 0x7F, 0x80, | ||
98 | 0x88, 0x8A, 0x8C, 0x85, 0x7A, 0x7D, 0x7F, 0x7C, | ||
99 | 0x80, 0x80, 0x81, 0x80, 0x85, 0x82, 0x81, 0x7E, | ||
100 | 0x80, 0x7F, 0x7F, 0x7E, 0x7D, 0x7E, 0x83, 0x7F, | ||
101 | 0x81, 0x83, 0x87, 0x81, 0x83, 0x88, 0x84, 0x82, | ||
102 | 0x82, 0x8A, 0xB5, 0xC5, 0xCD, 0xCF, 0xD4, 0xD3, | ||
103 | 0xD6, 0xCC, 0xB4, 0x7E, 0x4D, 0x48, 0x4E, 0x4D, | ||
104 | 0x57, 0x5A, 0x59, 0x5C, 0x62, 0x58, 0x5C, 0x5B, | ||
105 | 0x5B, 0x62, 0x5D, 0x5C, 0x59, 0x5C, 0x5A, 0x59, | ||
106 | 0x5D, 0x5F, 0x5B, 0x5F, 0x60, 0x5E, 0x5E, 0x57, | ||
107 | 0x5F, 0x5F, 0x60, 0x61, 0x5C, 0x61, 0x60, 0x5B, | ||
108 | 0x56, 0x56, 0x57, 0x58, 0x6F, 0x94, 0x9A, 0x82, | ||
109 | 0x88, 0x89, 0x87, 0x86, 0x88, 0x86, 0x84, 0x85, | ||
110 | 0x82, 0x87, 0x82, 0x81, 0x83, 0x81, 0x7F, 0x80, | ||
111 | 0x82, 0x82, 0x87, 0x8A, 0x8F, 0x90, 0x95, 0x98, | ||
112 | 0x95, 0x92, 0x92, 0x88, 0x79, 0x77, 0x5F, 0x51, | ||
113 | 0x41, 0x3E, 0x3B, 0x44, 0x44, 0x46, 0x49, 0x4A, | ||
114 | 0x4C, 0x49, 0x49, 0x4E, 0x4A, 0x4A, 0x4E, 0x4A, | ||
115 | 0x4D, 0x4D, 0x48, 0x4A, 0x4C, 0x52, 0x52, 0x58, | ||
116 | 0x52, 0x59, 0x5E, 0x5A, 0x5D, 0x5F, 0x59, 0x64, | ||
117 | 0x64, 0x64, 0x62, 0x61, 0x66, 0x66, 0x64, 0x60, | ||
118 | 0x62, 0x5F, 0x65, 0x63, 0x62, 0x62, 0x65, 0x66, | ||
119 | 0x62, 0x65, 0x67, 0x66, 0x64, 0x64, 0x65, 0x65, | ||
120 | 0x66, 0x65, 0x65, 0x63, 0x63, 0x67, 0x65, 0x64, | ||
121 | 0x67, 0x67, 0x68, 0x66, 0x6A, 0x66, 0x67, 0x66, | ||
122 | 0x6C, 0x65, 0x6A, 0x64, 0x64, 0x63, 0x66, 0x62, | ||
123 | 0x63, 0x67, 0x69, 0x65, 0x64, 0x63, 0x62, 0x63, | ||
124 | 0x68, 0x65, 0x66, 0x69, 0x66, 0x65, 0x61, 0x65, | ||
125 | 0x6C, 0x69, 0x64, 0x61, 0x62, 0x62, 0x64, 0x63, | ||
126 | 0x61, 0x63, 0x60, 0x66, 0x63, 0x61, 0x62, 0x65, | ||
127 | 0x60, 0x62, 0x60, 0x62, 0x60, 0x5E, 0x60, 0x61, | ||
128 | 0x5C, 0x5C, 0x59, 0x5B, 0x57, 0x53, 0x52, 0x47, | ||
129 | 0x48, 0x54, 0x5C, 0x69, 0x6E, 0x77, 0x7D, 0x80, | ||
130 | 0x88, 0x89, 0x8C, 0x84, 0x7B, 0x7D, 0x7E, 0x7D, | ||
131 | 0x7F, 0x80, 0x81, 0x7F, 0x85, 0x82, 0x80, 0x7E, | ||
132 | 0x7F, 0x7E, 0x7F, 0x7F, 0x7E, 0x7F, 0x82, 0x7F, | ||
133 | 0x81, 0x83, 0x86, 0x82, 0x83, 0x87, 0x84, 0x82, | ||
134 | 0x81, 0x88, 0xB0, 0xC5, 0xCD, 0xCF, 0xD4, 0xD4, | ||
135 | 0xD6, 0xCD, 0xB8, 0x86, 0x51, 0x47, 0x4B, 0x4D, | ||
136 | 0x56, 0x59, 0x59, 0x5B, 0x5F, 0x59, 0x5C, 0x5D, | ||
137 | 0x5B, 0x62, 0x5D, 0x5B, 0x5B, 0x5C, 0x5B, 0x5A, | ||
138 | 0x5E, 0x5F, 0x5D, 0x5F, 0x60, 0x5D, 0x5F, 0x58, | ||
139 | 0x5E, 0x5F, 0x5F, 0x5F, 0x5B, 0x60, 0x60, 0x5C, | ||
140 | 0x57, 0x56, 0x59, 0x5B, 0x6E, 0x8A, 0x87, 0x6C, | ||
141 | 0x84, 0x88, 0x86, 0x84, 0x87, 0x85, 0x84, 0x82, | ||
142 | 0x80, 0x84, 0x82, 0x7E, 0x82, 0x7F, 0x7C, 0x80, | ||
143 | 0x84, 0x80, 0x84, 0x8B, 0x90, 0x92, 0x93, 0x95, | ||
144 | 0x97, 0x91, 0x8E, 0x86, 0x79, 0x6F, 0x5B, 0x4F, | ||
145 | 0x41, 0x3A, 0x3D, 0x3F, 0x40, 0x42, 0x48, 0x4B, | ||
146 | 0x46, 0x48, 0x47, 0x4A, 0x46, 0x49, 0x4D, 0x48, | ||
147 | 0x48, 0x4D, 0x46, 0x4C, 0x4B, 0x4F, 0x55, 0x55, | ||
148 | 0x54, 0x58, 0x5D, 0x5B, 0x5D, 0x5C, 0x5A, 0x61, | ||
149 | 0x62, 0x60, 0x65, 0x61, 0x63, 0x65, 0x64, 0x5F, | ||
150 | 0x60, 0x61, 0x63, 0x63, 0x61, 0x63, 0x61, 0x63, | ||
151 | 0x64, 0x66, 0x67, 0x66, 0x64, 0x65, 0x65, 0x67, | ||
152 | 0x64, 0x64, 0x66, 0x63, 0x62, 0x64, 0x63, 0x62, | ||
153 | 0x65, 0x67, 0x66, 0x65, 0x68, 0x65, 0x64, 0x64, | ||
154 | 0x69, 0x63, 0x69, 0x65, 0x63, 0x61, 0x63, 0x61, | ||
155 | 0x63, 0x68, 0x6B, 0x65, 0x63, 0x61, 0x62, 0x64, | ||
156 | 0x66, 0x64, 0x65, 0x66, 0x63, 0x63, 0x63, 0x65, | ||
157 | 0x65, 0x67, 0x65, 0x60, 0x60, 0x5E, 0x60, 0x64, | ||
158 | 0x5E, 0x63, 0x60, 0x61, 0x5F, 0x60, 0x61, 0x63, | ||
159 | 0x62, 0x62, 0x5E, 0x60, 0x61, 0x60, 0x5E, 0x5D, | ||
160 | 0x5C, 0x5D, 0x5C, 0x5A, 0x54, 0x51, 0x4E, 0x4A, | ||
161 | 0x46, 0x50, 0x59, 0x62, 0x6A, 0x75, 0x79, 0x80, | ||
162 | 0x86, 0x86, 0x8B, 0x83, 0x7F, 0x7E, 0x7E, 0x7E, | ||
163 | 0x7E, 0x81, 0x81, 0x7E, 0x83, 0x82, 0x80, 0x80, | ||
164 | 0x7F, 0x7F, 0x7F, 0x81, 0x81, 0x81, 0x7F, 0x7E, | ||
165 | 0x80, 0x82, 0x84, 0x83, 0x81, 0x84, 0x83, 0x82, | ||
166 | 0x7F, 0x82, 0x9D, 0xBD, 0xC9, 0xCE, 0xD2, 0xD4, | ||
167 | 0xD6, 0xD2, 0xC4, 0xA1, 0x68, 0x49, 0x48, 0x4D, | ||
168 | 0x54, 0x56, 0x59, 0x5A, 0x5A, 0x5B, 0x5B, 0x60, | ||
169 | 0x5B, 0x60, 0x5B, 0x5B, 0x5C, 0x5C, 0x5D, 0x5D, | ||
170 | 0x60, 0x5C, 0x5E, 0x5E, 0x5E, 0x5B, 0x5E, 0x5C, | ||
171 | 0x5D, 0x5E, 0x5F, 0x5C, 0x5C, 0x60, 0x61, 0x5E, | ||
172 | 0x5A, 0x58, 0x5F, 0x62, 0x5F, 0x5D, 0x48, 0x32, | ||
173 | 0x81, 0x85, 0x85, 0x81, 0x86, 0x83, 0x84, 0x80, | ||
174 | 0x7F, 0x84, 0x83, 0x7E, 0x80, 0x7E, 0x7D, 0x80, | ||
175 | 0x82, 0x7F, 0x85, 0x8D, 0x91, 0x93, 0x92, 0x95, | ||
176 | 0x95, 0x8F, 0x8C, 0x84, 0x76, 0x6B, 0x5D, 0x50, | ||
177 | 0x41, 0x38, 0x39, 0x3B, 0x41, 0x41, 0x46, 0x47, | ||
178 | 0x45, 0x47, 0x44, 0x47, 0x45, 0x4A, 0x49, 0x48, | ||
179 | 0x45, 0x4C, 0x48, 0x4C, 0x4E, 0x4E, 0x51, 0x56, | ||
180 | 0x56, 0x59, 0x5A, 0x5C, 0x5C, 0x5E, 0x5A, 0x60, | ||
181 | 0x5D, 0x60, 0x62, 0x61, 0x63, 0x64, 0x62, 0x5F, | ||
182 | 0x61, 0x62, 0x64, 0x62, 0x61, 0x64, 0x61, 0x64, | ||
183 | 0x63, 0x65, 0x65, 0x67, 0x63, 0x66, 0x65, 0x64, | ||
184 | 0x63, 0x65, 0x66, 0x61, 0x60, 0x67, 0x64, 0x62, | ||
185 | 0x63, 0x65, 0x64, 0x65, 0x65, 0x63, 0x62, 0x63, | ||
186 | 0x63, 0x61, 0x67, 0x66, 0x63, 0x5F, 0x5E, 0x60, | ||
187 | 0x63, 0x66, 0x6A, 0x64, 0x62, 0x60, 0x64, 0x63, | ||
188 | 0x65, 0x62, 0x62, 0x62, 0x60, 0x62, 0x63, 0x63, | ||
189 | 0x61, 0x64, 0x65, 0x60, 0x60, 0x5D, 0x61, 0x62, | ||
190 | 0x5D, 0x61, 0x5E, 0x60, 0x5C, 0x60, 0x5F, 0x60, | ||
191 | 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x5E, 0x5D, | ||
192 | 0x5D, 0x5B, 0x5A, 0x58, 0x52, 0x51, 0x4E, 0x4D, | ||
193 | 0x47, 0x4A, 0x51, 0x5B, 0x66, 0x70, 0x76, 0x7C, | ||
194 | 0x81, 0x84, 0x8A, 0x85, 0x81, 0x80, 0x7F, 0x7C, | ||
195 | 0x7F, 0x82, 0x82, 0x81, 0x82, 0x82, 0x81, 0x84, | ||
196 | 0x80, 0x82, 0x81, 0x80, 0x81, 0x81, 0x80, 0x80, | ||
197 | 0x81, 0x82, 0x81, 0x82, 0x7F, 0x81, 0x80, 0x81, | ||
198 | 0x7F, 0x7D, 0x86, 0xAB, 0xC1, 0xCB, 0xCF, 0xD2, | ||
199 | 0xD3, 0xD5, 0xCF, 0xBA, 0x8A, 0x57, 0x48, 0x4D, | ||
200 | 0x51, 0x52, 0x55, 0x5A, 0x5A, 0x5B, 0x59, 0x5F, | ||
201 | 0x59, 0x5C, 0x59, 0x5C, 0x5A, 0x5A, 0x5B, 0x5C, | ||
202 | 0x5F, 0x5C, 0x5D, 0x5B, 0x5D, 0x5C, 0x5C, 0x5E, | ||
203 | 0x5C, 0x5D, 0x61, 0x5E, 0x5D, 0x5F, 0x62, 0x61, | ||
204 | 0x61, 0x5F, 0x60, 0x5A, 0x3D, 0x28, 0x19, 0x13, | ||
205 | 0x82, 0x84, 0x83, 0x7F, 0x84, 0x83, 0x83, 0x81, | ||
206 | 0x80, 0x83, 0x84, 0x82, 0x7F, 0x7F, 0x80, 0x7F, | ||
207 | 0x81, 0x83, 0x87, 0x8E, 0x92, 0x91, 0x93, 0x94, | ||
208 | 0x91, 0x8F, 0x8E, 0x83, 0x72, 0x6A, 0x60, 0x4F, | ||
209 | 0x3F, 0x36, 0x37, 0x3D, 0x42, 0x3F, 0x43, 0x47, | ||
210 | 0x45, 0x45, 0x46, 0x46, 0x47, 0x4B, 0x44, 0x46, | ||
211 | 0x44, 0x47, 0x48, 0x4B, 0x51, 0x4D, 0x4F, 0x56, | ||
212 | 0x56, 0x5A, 0x5A, 0x5B, 0x5B, 0x5D, 0x5B, 0x5F, | ||
213 | 0x5C, 0x62, 0x5D, 0x61, 0x62, 0x63, 0x60, 0x63, | ||
214 | 0x62, 0x63, 0x64, 0x60, 0x61, 0x64, 0x60, 0x66, | ||
215 | 0x5F, 0x63, 0x65, 0x67, 0x63, 0x63, 0x63, 0x63, | ||
216 | 0x63, 0x65, 0x63, 0x61, 0x62, 0x66, 0x63, 0x63, | ||
217 | 0x62, 0x63, 0x61, 0x62, 0x64, 0x61, 0x64, 0x63, | ||
218 | 0x61, 0x64, 0x66, 0x63, 0x63, 0x5E, 0x5D, 0x5E, | ||
219 | 0x63, 0x61, 0x64, 0x63, 0x63, 0x60, 0x63, 0x62, | ||
220 | 0x64, 0x62, 0x63, 0x61, 0x62, 0x61, 0x63, 0x60, | ||
221 | 0x61, 0x61, 0x63, 0x63, 0x61, 0x62, 0x62, 0x60, | ||
222 | 0x5E, 0x5F, 0x5F, 0x61, 0x5D, 0x61, 0x5F, 0x5F, | ||
223 | 0x5F, 0x5E, 0x61, 0x60, 0x5F, 0x5F, 0x62, 0x61, | ||
224 | 0x5D, 0x5A, 0x56, 0x58, 0x54, 0x52, 0x51, 0x4F, | ||
225 | 0x4C, 0x47, 0x4B, 0x57, 0x61, 0x6C, 0x72, 0x79, | ||
226 | 0x7E, 0x82, 0x89, 0x87, 0x82, 0x82, 0x7F, 0x7E, | ||
227 | 0x80, 0x82, 0x86, 0x84, 0x85, 0x84, 0x83, 0x85, | ||
228 | 0x82, 0x82, 0x82, 0x80, 0x81, 0x83, 0x82, 0x80, | ||
229 | 0x80, 0x83, 0x80, 0x81, 0x7F, 0x81, 0x7F, 0x81, | ||
230 | 0x83, 0x7A, 0x7D, 0x95, 0xB7, 0xC6, 0xCD, 0xD0, | ||
231 | 0xD3, 0xD5, 0xD4, 0xC9, 0xA9, 0x73, 0x4B, 0x48, | ||
232 | 0x4D, 0x50, 0x53, 0x57, 0x59, 0x5A, 0x57, 0x5C, | ||
233 | 0x5B, 0x5A, 0x59, 0x5B, 0x59, 0x58, 0x58, 0x5A, | ||
234 | 0x5F, 0x5D, 0x5B, 0x58, 0x5D, 0x5A, 0x5C, 0x5D, | ||
235 | 0x5D, 0x5E, 0x5E, 0x5F, 0x5C, 0x5D, 0x62, 0x65, | ||
236 | 0x66, 0x65, 0x55, 0x3D, 0x20, 0x13, 0x12, 0x17, | ||
237 | 0x83, 0x83, 0x80, 0x81, 0x84, 0x82, 0x81, 0x81, | ||
238 | 0x81, 0x83, 0x81, 0x83, 0x7F, 0x80, 0x80, 0x7E, | ||
239 | 0x83, 0x8A, 0x8A, 0x90, 0x93, 0x91, 0x92, 0x92, | ||
240 | 0x8F, 0x90, 0x8D, 0x83, 0x71, 0x69, 0x5D, 0x4D, | ||
241 | 0x41, 0x37, 0x37, 0x3F, 0x3C, 0x3F, 0x42, 0x48, | ||
242 | 0x44, 0x46, 0x49, 0x4B, 0x4A, 0x4A, 0x41, 0x45, | ||
243 | 0x45, 0x44, 0x44, 0x48, 0x50, 0x4C, 0x51, 0x53, | ||
244 | 0x57, 0x57, 0x5A, 0x5A, 0x5D, 0x5B, 0x5D, 0x5D, | ||
245 | 0x5C, 0x5E, 0x5E, 0x62, 0x5E, 0x62, 0x60, 0x65, | ||
246 | 0x63, 0x63, 0x61, 0x5F, 0x61, 0x63, 0x5E, 0x65, | ||
247 | 0x5E, 0x61, 0x66, 0x63, 0x63, 0x61, 0x63, 0x65, | ||
248 | 0x61, 0x62, 0x62, 0x64, 0x64, 0x63, 0x62, 0x62, | ||
249 | 0x60, 0x63, 0x62, 0x61, 0x64, 0x61, 0x64, 0x63, | ||
250 | 0x62, 0x66, 0x66, 0x63, 0x64, 0x5E, 0x60, 0x5F, | ||
251 | 0x63, 0x62, 0x60, 0x63, 0x62, 0x60, 0x62, 0x62, | ||
252 | 0x64, 0x66, 0x66, 0x63, 0x65, 0x61, 0x65, 0x61, | ||
253 | 0x60, 0x61, 0x61, 0x64, 0x61, 0x63, 0x63, 0x61, | ||
254 | 0x61, 0x5F, 0x61, 0x61, 0x5F, 0x62, 0x5E, 0x60, | ||
255 | 0x5F, 0x5B, 0x5F, 0x61, 0x5E, 0x5F, 0x65, 0x60, | ||
256 | 0x5A, 0x5B, 0x58, 0x59, 0x56, 0x53, 0x52, 0x50, | ||
257 | 0x4E, 0x4B, 0x47, 0x51, 0x5A, 0x67, 0x6E, 0x77, | ||
258 | 0x7B, 0x7F, 0x87, 0x87, 0x86, 0x84, 0x82, 0x83, | ||
259 | 0x83, 0x83, 0x86, 0x87, 0x89, 0x88, 0x87, 0x84, | ||
260 | 0x84, 0x83, 0x80, 0x80, 0x81, 0x84, 0x81, 0x81, | ||
261 | 0x80, 0x81, 0x7F, 0x7F, 0x7F, 0x82, 0x80, 0x81, | ||
262 | 0x84, 0x7C, 0x7E, 0x82, 0xA5, 0xC0, 0xCA, 0xCF, | ||
263 | 0xD3, 0xD5, 0xD5, 0xD2, 0xBF, 0x96, 0x5C, 0x47, | ||
264 | 0x4B, 0x4E, 0x50, 0x55, 0x55, 0x58, 0x57, 0x5A, | ||
265 | 0x5D, 0x5A, 0x5C, 0x59, 0x5C, 0x55, 0x57, 0x5B, | ||
266 | 0x60, 0x5B, 0x5B, 0x59, 0x5B, 0x5B, 0x5F, 0x5B, | ||
267 | 0x5D, 0x5E, 0x5B, 0x5D, 0x5D, 0x5D, 0x65, 0x68, | ||
268 | 0x63, 0x5A, 0x3A, 0x23, 0x19, 0x12, 0x17, 0x19, | ||
269 | 0x83, 0x83, 0x81, 0x84, 0x82, 0x80, 0x82, 0x81, | ||
270 | 0x81, 0x81, 0x80, 0x81, 0x80, 0x7F, 0x7E, 0x82, | ||
271 | 0x86, 0x8C, 0x90, 0x91, 0x91, 0x92, 0x91, 0x92, | ||
272 | 0x90, 0x8F, 0x87, 0x82, 0x72, 0x69, 0x5D, 0x4E, | ||
273 | 0x42, 0x39, 0x37, 0x3E, 0x3A, 0x42, 0x44, 0x43, | ||
274 | 0x46, 0x4B, 0x49, 0x4E, 0x4A, 0x49, 0x42, 0x48, | ||
275 | 0x48, 0x44, 0x42, 0x45, 0x4C, 0x4D, 0x51, 0x51, | ||
276 | 0x55, 0x56, 0x5A, 0x5C, 0x5E, 0x5C, 0x5C, 0x5F, | ||
277 | 0x5D, 0x5C, 0x60, 0x60, 0x5C, 0x62, 0x62, 0x64, | ||
278 | 0x63, 0x61, 0x61, 0x60, 0x61, 0x61, 0x60, 0x63, | ||
279 | 0x61, 0x61, 0x65, 0x62, 0x62, 0x65, 0x65, 0x65, | ||
280 | 0x61, 0x62, 0x64, 0x65, 0x66, 0x63, 0x64, 0x5F, | ||
281 | 0x5F, 0x62, 0x65, 0x64, 0x64, 0x63, 0x62, 0x65, | ||
282 | 0x63, 0x64, 0x65, 0x62, 0x65, 0x60, 0x63, 0x60, | ||
283 | 0x61, 0x66, 0x61, 0x64, 0x5F, 0x60, 0x63, 0x62, | ||
284 | 0x64, 0x67, 0x66, 0x67, 0x66, 0x61, 0x65, 0x64, | ||
285 | 0x60, 0x65, 0x61, 0x62, 0x61, 0x60, 0x64, 0x5F, | ||
286 | 0x63, 0x61, 0x60, 0x5F, 0x5F, 0x5E, 0x5D, 0x60, | ||
287 | 0x61, 0x5D, 0x60, 0x61, 0x60, 0x60, 0x62, 0x5F, | ||
288 | 0x59, 0x5D, 0x5B, 0x5A, 0x57, 0x54, 0x51, 0x56, | ||
289 | 0x4E, 0x4E, 0x48, 0x4C, 0x55, 0x60, 0x6E, 0x75, | ||
290 | 0x79, 0x7D, 0x84, 0x87, 0x89, 0x89, 0x87, 0x85, | ||
291 | 0x84, 0x86, 0x87, 0x8A, 0x89, 0x8A, 0x8A, 0x85, | ||
292 | 0x82, 0x84, 0x82, 0x81, 0x83, 0x83, 0x7D, 0x80, | ||
293 | 0x80, 0x7E, 0x7F, 0x7C, 0x7E, 0x7F, 0x80, 0x80, | ||
294 | 0x7F, 0x80, 0x7F, 0x7B, 0x8D, 0xB5, 0xC5, 0xCC, | ||
295 | 0xD2, 0xD4, 0xD5, 0xD6, 0xCC, 0xB4, 0x7F, 0x4E, | ||
296 | 0x4C, 0x4B, 0x4F, 0x51, 0x56, 0x55, 0x54, 0x59, | ||
297 | 0x5C, 0x59, 0x5D, 0x59, 0x5B, 0x57, 0x57, 0x5D, | ||
298 | 0x5D, 0x58, 0x5D, 0x5D, 0x5A, 0x5F, 0x61, 0x5D, | ||
299 | 0x5F, 0x5E, 0x5D, 0x60, 0x60, 0x63, 0x69, 0x62, | ||
300 | 0x50, 0x38, 0x1D, 0x1A, 0x1C, 0x17, 0x19, 0x18, | ||
301 | 0x81, 0x82, 0x83, 0x82, 0x81, 0x7E, 0x83, 0x83, | ||
302 | 0x80, 0x82, 0x82, 0x80, 0x80, 0x7D, 0x80, 0x88, | ||
303 | 0x8A, 0x8D, 0x93, 0x8F, 0x91, 0x91, 0x90, 0x8F, | ||
304 | 0x90, 0x8C, 0x84, 0x81, 0x71, 0x69, 0x5E, 0x4B, | ||
305 | 0x40, 0x3A, 0x38, 0x3B, 0x3B, 0x45, 0x44, 0x3E, | ||
306 | 0x46, 0x4B, 0x4A, 0x4B, 0x45, 0x47, 0x45, 0x49, | ||
307 | 0x44, 0x45, 0x42, 0x47, 0x4A, 0x4F, 0x52, 0x51, | ||
308 | 0x53, 0x57, 0x59, 0x5D, 0x5B, 0x5E, 0x5A, 0x60, | ||
309 | 0x5F, 0x5F, 0x5F, 0x61, 0x5C, 0x61, 0x64, 0x63, | ||
310 | 0x62, 0x60, 0x62, 0x62, 0x63, 0x60, 0x61, 0x60, | ||
311 | 0x64, 0x64, 0x66, 0x63, 0x61, 0x68, 0x65, 0x65, | ||
312 | 0x63, 0x66, 0x65, 0x63, 0x65, 0x63, 0x64, 0x61, | ||
313 | 0x60, 0x60, 0x62, 0x66, 0x64, 0x61, 0x63, 0x65, | ||
314 | 0x64, 0x62, 0x66, 0x60, 0x67, 0x63, 0x61, 0x5E, | ||
315 | 0x5D, 0x66, 0x65, 0x63, 0x60, 0x60, 0x61, 0x62, | ||
316 | 0x66, 0x68, 0x66, 0x6B, 0x65, 0x62, 0x65, 0x63, | ||
317 | 0x63, 0x64, 0x63, 0x62, 0x60, 0x61, 0x62, 0x5D, | ||
318 | 0x62, 0x62, 0x61, 0x5E, 0x5F, 0x5A, 0x5E, 0x5E, | ||
319 | 0x61, 0x60, 0x62, 0x60, 0x62, 0x5E, 0x5F, 0x60, | ||
320 | 0x5E, 0x5F, 0x59, 0x5B, 0x56, 0x54, 0x51, 0x59, | ||
321 | 0x4E, 0x4E, 0x49, 0x47, 0x52, 0x5B, 0x6B, 0x72, | ||
322 | 0x76, 0x7C, 0x82, 0x86, 0x87, 0x8E, 0x89, 0x85, | ||
323 | 0x85, 0x87, 0x88, 0x8D, 0x89, 0x89, 0x8A, 0x89, | ||
324 | 0x82, 0x84, 0x85, 0x86, 0x86, 0x80, 0x7E, 0x7E, | ||
325 | 0x7E, 0x7F, 0x81, 0x7D, 0x7F, 0x7C, 0x7E, 0x7D, | ||
326 | 0x7E, 0x80, 0x7D, 0x7C, 0x7B, 0x9F, 0xBD, 0xC9, | ||
327 | 0xD0, 0xD3, 0xD5, 0xD6, 0xD3, 0xC6, 0xA3, 0x64, | ||
328 | 0x4C, 0x47, 0x50, 0x4D, 0x58, 0x53, 0x52, 0x58, | ||
329 | 0x59, 0x5A, 0x5C, 0x59, 0x5B, 0x5E, 0x58, 0x5E, | ||
330 | 0x5B, 0x5D, 0x5F, 0x5C, 0x5B, 0x60, 0x63, 0x5F, | ||
331 | 0x62, 0x62, 0x60, 0x64, 0x65, 0x68, 0x63, 0x4F, | ||
332 | 0x30, 0x17, 0x14, 0x13, 0x17, 0x1A, 0x15, 0x17, | ||
333 | 0x82, 0x83, 0x83, 0x80, 0x82, 0x7F, 0x83, 0x86, | ||
334 | 0x83, 0x86, 0x81, 0x81, 0x80, 0x7F, 0x85, 0x88, | ||
335 | 0x8C, 0x8F, 0x92, 0x8E, 0x93, 0x8F, 0x8E, 0x8B, | ||
336 | 0x8E, 0x8A, 0x85, 0x7E, 0x71, 0x68, 0x5E, 0x4F, | ||
337 | 0x42, 0x3E, 0x38, 0x39, 0x3D, 0x45, 0x42, 0x42, | ||
338 | 0x44, 0x47, 0x4B, 0x49, 0x45, 0x46, 0x47, 0x46, | ||
339 | 0x42, 0x45, 0x44, 0x48, 0x4A, 0x50, 0x52, 0x51, | ||
340 | 0x55, 0x54, 0x57, 0x5A, 0x5A, 0x5D, 0x57, 0x5F, | ||
341 | 0x5E, 0x60, 0x5D, 0x61, 0x5E, 0x61, 0x64, 0x62, | ||
342 | 0x60, 0x62, 0x62, 0x63, 0x63, 0x62, 0x62, 0x61, | ||
343 | 0x63, 0x62, 0x65, 0x63, 0x60, 0x65, 0x64, 0x63, | ||
344 | 0x64, 0x66, 0x64, 0x61, 0x62, 0x64, 0x63, 0x63, | ||
345 | 0x63, 0x5F, 0x61, 0x67, 0x62, 0x61, 0x64, 0x63, | ||
346 | 0x63, 0x62, 0x65, 0x61, 0x68, 0x61, 0x63, 0x61, | ||
347 | 0x5D, 0x65, 0x68, 0x62, 0x60, 0x5E, 0x5E, 0x63, | ||
348 | 0x67, 0x69, 0x68, 0x69, 0x69, 0x64, 0x65, 0x64, | ||
349 | 0x65, 0x61, 0x64, 0x64, 0x64, 0x62, 0x62, 0x5C, | ||
350 | 0x60, 0x62, 0x63, 0x61, 0x61, 0x5B, 0x5C, 0x5C, | ||
351 | 0x60, 0x60, 0x61, 0x5F, 0x63, 0x5B, 0x5D, 0x60, | ||
352 | 0x61, 0x5F, 0x5B, 0x5C, 0x5A, 0x53, 0x52, 0x56, | ||
353 | 0x4E, 0x4C, 0x48, 0x44, 0x4E, 0x5A, 0x65, 0x6F, | ||
354 | 0x74, 0x7C, 0x81, 0x85, 0x85, 0x8E, 0x88, 0x87, | ||
355 | 0x88, 0x87, 0x88, 0x8E, 0x89, 0x8A, 0x8A, 0x8B, | ||
356 | 0x86, 0x83, 0x84, 0x87, 0x86, 0x83, 0x80, 0x7F, | ||
357 | 0x7F, 0x81, 0x80, 0x7F, 0x7F, 0x7E, 0x7E, 0x7F, | ||
358 | 0x80, 0x7D, 0x7C, 0x7C, 0x78, 0x84, 0xAD, 0xC3, | ||
359 | 0xCC, 0xD2, 0xD4, 0xD6, 0xD6, 0xCF, 0xB9, 0x87, | ||
360 | 0x54, 0x47, 0x51, 0x4D, 0x56, 0x53, 0x54, 0x59, | ||
361 | 0x57, 0x5B, 0x5E, 0x5B, 0x5E, 0x61, 0x5A, 0x5E, | ||
362 | 0x5A, 0x63, 0x5D, 0x5D, 0x5F, 0x5E, 0x62, 0x5F, | ||
363 | 0x62, 0x65, 0x63, 0x68, 0x6A, 0x63, 0x4D, 0x33, | ||
364 | 0x17, 0x12, 0x1B, 0x11, 0x16, 0x18, 0x14, 0x16, | ||
365 | 0x84, 0x83, 0x82, 0x7F, 0x83, 0x81, 0x82, 0x86, | ||
366 | 0x86, 0x85, 0x80, 0x83, 0x7E, 0x80, 0x85, 0x86, | ||
367 | 0x8C, 0x90, 0x8F, 0x8E, 0x93, 0x8C, 0x8C, 0x8B, | ||
368 | 0x88, 0x88, 0x84, 0x7C, 0x74, 0x68, 0x62, 0x5B, | ||
369 | 0x45, 0x3F, 0x38, 0x3A, 0x3F, 0x42, 0x41, 0x45, | ||
370 | 0x4D, 0x46, 0x49, 0x48, 0x44, 0x47, 0x45, 0x43, | ||
371 | 0x47, 0x46, 0x45, 0x45, 0x4B, 0x51, 0x50, 0x52, | ||
372 | 0x57, 0x54, 0x55, 0x57, 0x59, 0x5B, 0x57, 0x5E, | ||
373 | 0x5B, 0x5E, 0x5E, 0x60, 0x61, 0x60, 0x63, 0x61, | ||
374 | 0x5E, 0x63, 0x61, 0x63, 0x62, 0x63, 0x63, 0x62, | ||
375 | 0x61, 0x61, 0x63, 0x64, 0x60, 0x60, 0x64, 0x61, | ||
376 | 0x63, 0x61, 0x63, 0x61, 0x61, 0x61, 0x63, 0x62, | ||
377 | 0x64, 0x60, 0x61, 0x64, 0x60, 0x61, 0x61, 0x62, | ||
378 | 0x63, 0x60, 0x61, 0x62, 0x65, 0x5F, 0x66, 0x63, | ||
379 | 0x61, 0x63, 0x65, 0x62, 0x5E, 0x5E, 0x5F, 0x62, | ||
380 | 0x65, 0x66, 0x67, 0x67, 0x6D, 0x64, 0x62, 0x63, | ||
381 | 0x65, 0x61, 0x62, 0x62, 0x69, 0x61, 0x64, 0x5C, | ||
382 | 0x5F, 0x61, 0x61, 0x60, 0x61, 0x5C, 0x5B, 0x5E, | ||
383 | 0x60, 0x5F, 0x60, 0x60, 0x60, 0x5B, 0x5E, 0x5E, | ||
384 | 0x60, 0x5C, 0x5D, 0x5C, 0x60, 0x57, 0x53, 0x53, | ||
385 | 0x4E, 0x4D, 0x49, 0x44, 0x4C, 0x55, 0x61, 0x6C, | ||
386 | 0x74, 0x7B, 0x80, 0x84, 0x86, 0x8B, 0x89, 0x89, | ||
387 | 0x89, 0x87, 0x87, 0x8D, 0x89, 0x8C, 0x89, 0x8A, | ||
388 | 0x89, 0x83, 0x83, 0x83, 0x85, 0x86, 0x7F, 0x81, | ||
389 | 0x80, 0x82, 0x7E, 0x7F, 0x7D, 0x80, 0x7F, 0x81, | ||
390 | 0x7F, 0x7C, 0x7D, 0x7B, 0x7B, 0x76, 0x95, 0xBA, | ||
391 | 0xC7, 0xD0, 0xD2, 0xD5, 0xD7, 0xD4, 0xC8, 0xAA, | ||
392 | 0x70, 0x48, 0x4F, 0x4D, 0x54, 0x52, 0x55, 0x58, | ||
393 | 0x56, 0x59, 0x5A, 0x5C, 0x5F, 0x5E, 0x59, 0x5D, | ||
394 | 0x5A, 0x5D, 0x5D, 0x62, 0x63, 0x61, 0x61, 0x62, | ||
395 | 0x63, 0x66, 0x68, 0x6D, 0x65, 0x4A, 0x31, 0x1C, | ||
396 | 0x12, 0x1B, 0x22, 0x16, 0x1B, 0x16, 0x16, 0x18, | ||
397 | 0x84, 0x83, 0x7E, 0x82, 0x83, 0x81, 0x82, 0x85, | ||
398 | 0x87, 0x84, 0x83, 0x84, 0x7D, 0x80, 0x83, 0x88, | ||
399 | 0x8E, 0x90, 0x90, 0x8C, 0x8F, 0x8D, 0x8C, 0x88, | ||
400 | 0x85, 0x86, 0x83, 0x7C, 0x78, 0x6A, 0x63, 0x5A, | ||
401 | 0x43, 0x3A, 0x39, 0x3D, 0x3F, 0x3E, 0x42, 0x43, | ||
402 | 0x57, 0x45, 0x48, 0x44, 0x43, 0x4B, 0x43, 0x44, | ||
403 | 0x48, 0x46, 0x46, 0x46, 0x4C, 0x52, 0x4D, 0x52, | ||
404 | 0x56, 0x59, 0x55, 0x58, 0x57, 0x5A, 0x5B, 0x5B, | ||
405 | 0x5D, 0x5C, 0x5D, 0x60, 0x63, 0x62, 0x60, 0x61, | ||
406 | 0x60, 0x5F, 0x62, 0x63, 0x5F, 0x60, 0x62, 0x62, | ||
407 | 0x61, 0x61, 0x63, 0x64, 0x61, 0x60, 0x64, 0x63, | ||
408 | 0x62, 0x60, 0x64, 0x63, 0x60, 0x5F, 0x63, 0x62, | ||
409 | 0x61, 0x64, 0x5E, 0x61, 0x60, 0x60, 0x5E, 0x62, | ||
410 | 0x60, 0x5F, 0x60, 0x60, 0x61, 0x5F, 0x61, 0x61, | ||
411 | 0x61, 0x61, 0x61, 0x61, 0x5D, 0x60, 0x5E, 0x5F, | ||
412 | 0x63, 0x62, 0x66, 0x66, 0x69, 0x64, 0x61, 0x62, | ||
413 | 0x64, 0x62, 0x63, 0x61, 0x65, 0x61, 0x60, 0x5F, | ||
414 | 0x5E, 0x63, 0x5E, 0x5D, 0x5D, 0x5D, 0x5B, 0x60, | ||
415 | 0x5F, 0x5F, 0x5D, 0x5F, 0x5B, 0x5B, 0x5F, 0x5E, | ||
416 | 0x5D, 0x5A, 0x5C, 0x5B, 0x5C, 0x58, 0x52, 0x51, | ||
417 | 0x4E, 0x51, 0x4A, 0x47, 0x4D, 0x51, 0x5E, 0x69, | ||
418 | 0x74, 0x7B, 0x7E, 0x82, 0x86, 0x89, 0x8B, 0x89, | ||
419 | 0x88, 0x8A, 0x86, 0x88, 0x88, 0x8C, 0x88, 0x89, | ||
420 | 0x89, 0x88, 0x85, 0x7F, 0x83, 0x84, 0x80, 0x80, | ||
421 | 0x80, 0x81, 0x7C, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, | ||
422 | 0x7E, 0x7B, 0x7D, 0x7C, 0x78, 0x74, 0x7F, 0xA8, | ||
423 | 0xC1, 0xCB, 0xD1, 0xD4, 0xD6, 0xD6, 0xD2, 0xC1, | ||
424 | 0x94, 0x57, 0x49, 0x4C, 0x52, 0x53, 0x57, 0x5A, | ||
425 | 0x57, 0x59, 0x53, 0x5A, 0x5E, 0x5C, 0x5A, 0x5A, | ||
426 | 0x5A, 0x57, 0x60, 0x63, 0x65, 0x64, 0x63, 0x64, | ||
427 | 0x66, 0x69, 0x6A, 0x67, 0x4E, 0x30, 0x1C, 0x12, | ||
428 | 0x15, 0x19, 0x1F, 0x1A, 0x1A, 0x16, 0x1A, 0x1B, | ||
429 | 0x81, 0x81, 0x7D, 0x83, 0x85, 0x81, 0x84, 0x84, | ||
430 | 0x86, 0x83, 0x84, 0x83, 0x7E, 0x84, 0x86, 0x8B, | ||
431 | 0x8F, 0x8F, 0x94, 0x8D, 0x8D, 0x8B, 0x8C, 0x85, | ||
432 | 0x85, 0x85, 0x84, 0x7D, 0x79, 0x6B, 0x5C, 0x4F, | ||
433 | 0x3F, 0x36, 0x36, 0x3A, 0x3E, 0x3B, 0x43, 0x44, | ||
434 | 0x4E, 0x45, 0x47, 0x42, 0x45, 0x4B, 0x44, 0x44, | ||
435 | 0x48, 0x44, 0x46, 0x4A, 0x4B, 0x4F, 0x4D, 0x50, | ||
436 | 0x56, 0x5A, 0x57, 0x59, 0x56, 0x58, 0x5E, 0x5C, | ||
437 | 0x5F, 0x5F, 0x5C, 0x5F, 0x5D, 0x65, 0x5D, 0x62, | ||
438 | 0x5F, 0x5C, 0x61, 0x60, 0x5F, 0x5E, 0x61, 0x62, | ||
439 | 0x61, 0x61, 0x63, 0x60, 0x5F, 0x61, 0x63, 0x63, | ||
440 | 0x61, 0x61, 0x64, 0x62, 0x60, 0x61, 0x66, 0x63, | ||
441 | 0x62, 0x64, 0x5E, 0x61, 0x60, 0x5F, 0x5C, 0x5F, | ||
442 | 0x5C, 0x60, 0x5E, 0x5D, 0x5E, 0x5E, 0x5B, 0x5F, | ||
443 | 0x60, 0x5D, 0x5E, 0x60, 0x5E, 0x60, 0x5B, 0x5E, | ||
444 | 0x61, 0x60, 0x63, 0x64, 0x64, 0x65, 0x63, 0x61, | ||
445 | 0x63, 0x61, 0x64, 0x64, 0x60, 0x62, 0x5C, 0x5F, | ||
446 | 0x5D, 0x63, 0x5E, 0x5C, 0x5D, 0x5D, 0x5B, 0x5F, | ||
447 | 0x5E, 0x60, 0x5D, 0x5D, 0x5B, 0x5D, 0x5E, 0x5E, | ||
448 | 0x5C, 0x5B, 0x5D, 0x59, 0x5A, 0x58, 0x52, 0x4D, | ||
449 | 0x4F, 0x4F, 0x4A, 0x4B, 0x50, 0x54, 0x5C, 0x66, | ||
450 | 0x71, 0x79, 0x7C, 0x83, 0x85, 0x89, 0x8B, 0x8A, | ||
451 | 0x87, 0x8D, 0x86, 0x84, 0x87, 0x89, 0x88, 0x88, | ||
452 | 0x87, 0x89, 0x86, 0x81, 0x83, 0x84, 0x82, 0x80, | ||
453 | 0x82, 0x80, 0x7C, 0x7D, 0x7F, 0x7D, 0x7D, 0x7C, | ||
454 | 0x7F, 0x7C, 0x7C, 0x7D, 0x78, 0x75, 0x75, 0x91, | ||
455 | 0xB7, 0xC7, 0xCF, 0xD4, 0xD5, 0xD6, 0xD7, 0xCE, | ||
456 | 0xB2, 0x7C, 0x4A, 0x4A, 0x4F, 0x53, 0x58, 0x5B, | ||
457 | 0x5B, 0x5C, 0x57, 0x59, 0x5E, 0x5C, 0x5A, 0x58, | ||
458 | 0x59, 0x5B, 0x5E, 0x60, 0x61, 0x62, 0x63, 0x64, | ||
459 | 0x69, 0x6B, 0x63, 0x50, 0x2B, 0x27, 0x19, 0x11, | ||
460 | 0x13, 0x15, 0x15, 0x17, 0x14, 0x18, 0x1E, 0x1A, | ||
461 | 0x7F, 0x7F, 0x81, 0x82, 0x84, 0x82, 0x85, 0x83, | ||
462 | 0x83, 0x83, 0x85, 0x82, 0x81, 0x89, 0x8A, 0x8D, | ||
463 | 0x8F, 0x90, 0x92, 0x8E, 0x8A, 0x87, 0x89, 0x85, | ||
464 | 0x87, 0x87, 0x85, 0x7D, 0x78, 0x6C, 0x58, 0x4B, | ||
465 | 0x3B, 0x33, 0x30, 0x36, 0x3E, 0x3D, 0x43, 0x46, | ||
466 | 0x43, 0x46, 0x46, 0x45, 0x48, 0x47, 0x46, 0x44, | ||
467 | 0x49, 0x42, 0x46, 0x4A, 0x4B, 0x4B, 0x4F, 0x4F, | ||
468 | 0x56, 0x5B, 0x57, 0x58, 0x57, 0x5A, 0x5B, 0x5E, | ||
469 | 0x5F, 0x61, 0x5C, 0x5E, 0x5D, 0x61, 0x5E, 0x62, | ||
470 | 0x5D, 0x5E, 0x5F, 0x5E, 0x61, 0x61, 0x60, 0x62, | ||
471 | 0x61, 0x61, 0x60, 0x5F, 0x5D, 0x60, 0x5F, 0x61, | ||
472 | 0x61, 0x60, 0x62, 0x5E, 0x60, 0x64, 0x65, 0x63, | ||
473 | 0x66, 0x65, 0x65, 0x60, 0x5F, 0x5C, 0x59, 0x5B, | ||
474 | 0x5B, 0x5D, 0x59, 0x5C, 0x5B, 0x5D, 0x5E, 0x5F, | ||
475 | 0x5F, 0x5A, 0x5C, 0x5E, 0x5E, 0x5F, 0x5A, 0x60, | ||
476 | 0x5D, 0x5F, 0x5F, 0x63, 0x62, 0x64, 0x63, 0x61, | ||
477 | 0x61, 0x63, 0x64, 0x66, 0x60, 0x61, 0x5E, 0x5D, | ||
478 | 0x5D, 0x5F, 0x5E, 0x5D, 0x60, 0x5C, 0x5D, 0x5F, | ||
479 | 0x5D, 0x5E, 0x5E, 0x5D, 0x5C, 0x60, 0x5E, 0x5D, | ||
480 | 0x5D, 0x5B, 0x5C, 0x59, 0x5C, 0x5B, 0x53, 0x4E, | ||
481 | 0x50, 0x4A, 0x48, 0x4B, 0x50, 0x56, 0x5C, 0x63, | ||
482 | 0x6E, 0x74, 0x7E, 0x83, 0x84, 0x88, 0x8B, 0x89, | ||
483 | 0x89, 0x8B, 0x85, 0x85, 0x87, 0x86, 0x88, 0x85, | ||
484 | 0x86, 0x87, 0x86, 0x85, 0x82, 0x84, 0x82, 0x81, | ||
485 | 0x83, 0x80, 0x7F, 0x7E, 0x7D, 0x7F, 0x7F, 0x7C, | ||
486 | 0x7F, 0x7C, 0x7E, 0x7D, 0x7A, 0x78, 0x75, 0x7C, | ||
487 | 0xA4, 0xC2, 0xCC, 0xD3, 0xD4, 0xD7, 0xD9, 0xD5, | ||
488 | 0xC7, 0xA2, 0x60, 0x46, 0x4E, 0x50, 0x54, 0x57, | ||
489 | 0x5C, 0x5E, 0x5D, 0x5A, 0x5D, 0x5A, 0x5A, 0x59, | ||
490 | 0x59, 0x5E, 0x5E, 0x5D, 0x5E, 0x61, 0x63, 0x67, | ||
491 | 0x69, 0x64, 0x4C, 0x2D, 0x12, 0x1C, 0x1B, 0x10, | ||
492 | 0x0E, 0x14, 0x11, 0x13, 0x12, 0x1B, 0x1D, 0x1A, | ||
493 | 0x82, 0x81, 0x85, 0x82, 0x83, 0x82, 0x85, 0x85, | ||
494 | 0x84, 0x84, 0x87, 0x85, 0x84, 0x8C, 0x8C, 0x90, | ||
495 | 0x91, 0x91, 0x8E, 0x8E, 0x87, 0x84, 0x85, 0x85, | ||
496 | 0x86, 0x89, 0x86, 0x7F, 0x76, 0x69, 0x59, 0x4D, | ||
497 | 0x3A, 0x35, 0x31, 0x36, 0x3F, 0x40, 0x42, 0x45, | ||
498 | 0x45, 0x46, 0x49, 0x44, 0x49, 0x47, 0x48, 0x44, | ||
499 | 0x47, 0x43, 0x46, 0x49, 0x4B, 0x4B, 0x50, 0x52, | ||
500 | 0x54, 0x5A, 0x58, 0x58, 0x59, 0x5E, 0x5B, 0x5C, | ||
501 | 0x5F, 0x5E, 0x5B, 0x5D, 0x62, 0x5F, 0x5F, 0x5F, | ||
502 | 0x5D, 0x5E, 0x60, 0x5F, 0x63, 0x63, 0x5E, 0x62, | ||
503 | 0x61, 0x60, 0x5E, 0x61, 0x60, 0x60, 0x5E, 0x62, | ||
504 | 0x62, 0x5F, 0x5F, 0x5C, 0x60, 0x61, 0x60, 0x65, | ||
505 | 0x67, 0x68, 0x68, 0x61, 0x5F, 0x5A, 0x58, 0x5A, | ||
506 | 0x5A, 0x58, 0x57, 0x59, 0x5A, 0x5D, 0x5F, 0x60, | ||
507 | 0x5D, 0x5C, 0x5C, 0x5C, 0x5B, 0x5D, 0x5C, 0x5F, | ||
508 | 0x5E, 0x5F, 0x60, 0x60, 0x61, 0x62, 0x63, 0x65, | ||
509 | 0x62, 0x64, 0x64, 0x64, 0x61, 0x60, 0x60, 0x5C, | ||
510 | 0x5E, 0x5F, 0x5E, 0x60, 0x5E, 0x5D, 0x5C, 0x5E, | ||
511 | 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x61, 0x5F, 0x5C, | ||
512 | 0x5F, 0x5C, 0x5B, 0x5B, 0x57, 0x59, 0x56, 0x52, | ||
513 | 0x50, 0x4C, 0x49, 0x4B, 0x4E, 0x55, 0x5E, 0x65, | ||
514 | 0x6D, 0x73, 0x7F, 0x81, 0x85, 0x85, 0x8A, 0x89, | ||
515 | 0x8A, 0x88, 0x86, 0x86, 0x88, 0x84, 0x89, 0x83, | ||
516 | 0x88, 0x84, 0x84, 0x84, 0x82, 0x82, 0x82, 0x81, | ||
517 | 0x83, 0x80, 0x80, 0x7F, 0x7F, 0x85, 0x80, 0x7E, | ||
518 | 0x7D, 0x7D, 0x7E, 0x7D, 0x79, 0x79, 0x77, 0x73, | ||
519 | 0x8B, 0xB6, 0xC7, 0xD0, 0xD3, 0xD5, 0xD8, 0xD8, | ||
520 | 0xD2, 0xBC, 0x86, 0x4A, 0x48, 0x50, 0x52, 0x56, | ||
521 | 0x58, 0x5A, 0x58, 0x5C, 0x5C, 0x59, 0x5B, 0x5B, | ||
522 | 0x5A, 0x5E, 0x5E, 0x5E, 0x5F, 0x64, 0x66, 0x69, | ||
523 | 0x62, 0x49, 0x27, 0x13, 0x0D, 0x14, 0x18, 0x10, | ||
524 | 0x12, 0x12, 0x12, 0x14, 0x14, 0x1C, 0x19, 0x21, | ||
525 | 0x82, 0x83, 0x86, 0x83, 0x83, 0x84, 0x84, 0x86, | ||
526 | 0x86, 0x85, 0x85, 0x89, 0x8A, 0x8F, 0x8F, 0x91, | ||
527 | 0x92, 0x8F, 0x8E, 0x8D, 0x86, 0x85, 0x84, 0x84, | ||
528 | 0x85, 0x8A, 0x88, 0x83, 0x76, 0x69, 0x5E, 0x4E, | ||
529 | 0x3D, 0x39, 0x34, 0x38, 0x3F, 0x40, 0x42, 0x45, | ||
530 | 0x48, 0x47, 0x4C, 0x45, 0x4B, 0x49, 0x46, 0x44, | ||
531 | 0x46, 0x43, 0x45, 0x48, 0x4A, 0x4A, 0x4F, 0x51, | ||
532 | 0x53, 0x55, 0x59, 0x59, 0x5A, 0x5D, 0x5B, 0x59, | ||
533 | 0x5F, 0x5C, 0x5D, 0x5C, 0x61, 0x61, 0x5F, 0x5D, | ||
534 | 0x5D, 0x5B, 0x5F, 0x60, 0x61, 0x62, 0x5E, 0x60, | ||
535 | 0x60, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x61, | ||
536 | 0x61, 0x5F, 0x60, 0x5E, 0x61, 0x5C, 0x60, 0x65, | ||
537 | 0x65, 0x64, 0x65, 0x62, 0x60, 0x5F, 0x5B, 0x58, | ||
538 | 0x59, 0x55, 0x59, 0x57, 0x5B, 0x5A, 0x5C, 0x5F, | ||
539 | 0x5E, 0x5C, 0x5C, 0x5D, 0x5D, 0x5A, 0x5C, 0x5D, | ||
540 | 0x5E, 0x5F, 0x64, 0x5E, 0x60, 0x62, 0x61, 0x65, | ||
541 | 0x67, 0x62, 0x64, 0x60, 0x60, 0x5D, 0x5F, 0x5E, | ||
542 | 0x60, 0x61, 0x60, 0x60, 0x61, 0x5E, 0x58, 0x5E, | ||
543 | 0x5C, 0x5A, 0x5D, 0x5B, 0x5B, 0x60, 0x5E, 0x5F, | ||
544 | 0x5F, 0x61, 0x5A, 0x59, 0x55, 0x55, 0x57, 0x54, | ||
545 | 0x4F, 0x4D, 0x4B, 0x4A, 0x4A, 0x55, 0x5F, 0x66, | ||
546 | 0x6A, 0x74, 0x7B, 0x7D, 0x84, 0x84, 0x86, 0x89, | ||
547 | 0x88, 0x87, 0x86, 0x84, 0x88, 0x82, 0x88, 0x84, | ||
548 | 0x88, 0x84, 0x83, 0x83, 0x83, 0x82, 0x81, 0x81, | ||
549 | 0x84, 0x81, 0x7F, 0x7F, 0x82, 0x88, 0x81, 0x83, | ||
550 | 0x7D, 0x7F, 0x7D, 0x7D, 0x7A, 0x7A, 0x77, 0x72, | ||
551 | 0x79, 0x9D, 0xBB, 0xCA, 0xD0, 0xD4, 0xD7, 0xD8, | ||
552 | 0xD8, 0xCD, 0xAE, 0x6D, 0x49, 0x50, 0x50, 0x57, | ||
553 | 0x55, 0x58, 0x54, 0x5B, 0x59, 0x5B, 0x5C, 0x5C, | ||
554 | 0x5E, 0x5D, 0x5C, 0x61, 0x62, 0x66, 0x67, 0x65, | ||
555 | 0x51, 0x27, 0x10, 0x0D, 0x15, 0x14, 0x15, 0x10, | ||
556 | 0x16, 0x13, 0x15, 0x17, 0x17, 0x18, 0x19, 0x23 | ||
557 | }; | ||
558 | |||
559 | |||
560 | |||
561 | /* | ||
562 | Macro definitions | ||
563 | */ | ||
564 | |||
565 | #define abs(x) (x>=0 ? x : -(x)) | ||
566 | #define FILTER 0 | ||
567 | #define EXPAND 1 | ||
568 | #define IS == | ||
569 | #define ISNT != | ||
570 | #define AND && | ||
571 | #define OR || | ||
572 | |||
573 | #define NUM_LEVELS 4 | ||
574 | |||
575 | |||
576 | /* | ||
577 | Forward declaration of functions | ||
578 | */ | ||
579 | |||
580 | void epic_init( void ); | ||
581 | void epic_build_pyr( float *image, int x_size, int y_size, int num_levels, | ||
582 | float *lo_filter, float *hi_filter, int filter_size ); | ||
583 | void epic_build_level( float *image, int level_x_size, int level_y_size, | ||
584 | float *lo_filter, float *hi_filter, | ||
585 | int filter_size, float *result_block ); | ||
586 | void epic_internal_transpose( float *mat, int rows, int cols ); | ||
587 | void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, | ||
588 | float *temp, int x_fdim, int y_fdim, | ||
589 | int xgrid_start, int xgrid_step, int ygrid_start, | ||
590 | int ygrid_step, float *result ); | ||
591 | void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos, | ||
592 | float *result, int f_or_e ); | ||
593 | void epic_main( void ); | ||
594 | //int main( void ); | ||
595 | |||
596 | |||
597 | /* | ||
598 | Declaration of global variables | ||
599 | */ | ||
600 | |||
601 | float epic_filtertemp[FILTER_SIZE]; | ||
602 | float epic_hi_imagetemp[X_SIZE * Y_SIZE / 2]; | ||
603 | float epic_lo_imagetemp[X_SIZE * Y_SIZE / 2]; | ||
604 | |||
605 | static float epic_lo_filter[FILTER_SIZE] = { | ||
606 | -0.0012475221, -0.0024950907, 0.0087309530, 0.0199579580, | ||
607 | -0.0505290000, -0.1205509700, 0.2930455800, | ||
608 | 0.7061761600, | ||
609 | 0.2930455800, -0.1205509700, -0.0505290000, | ||
610 | 0.0199579580, 0.0087309530, -0.0024950907, -0.0012475221 | ||
611 | }; | ||
612 | |||
613 | static float epic_hi_filter[FILTER_SIZE] = { | ||
614 | 0.0012475221, -0.0024950907, -0.0087309530, 0.0199579580, | ||
615 | 0.0505290000, -0.1205509700, -0.2930455800, | ||
616 | 0.7061761600, | ||
617 | -0.2930455800, -0.1205509700, 0.0505290000, | ||
618 | 0.0199579580, -0.0087309530, -0.0024950907, 0.0012475221 | ||
619 | }; | ||
620 | |||
621 | |||
622 | /* | ||
623 | Initialization function | ||
624 | */ | ||
625 | |||
626 | void epic_init( void ) | ||
627 | { | ||
628 | int i; | ||
629 | |||
630 | _Pragma( "loopbound min 4096 max 9801" ) | ||
631 | for ( i = 0; i < X_SIZE * Y_SIZE; ++i ) | ||
632 | epic_image[i] *= SCALE_FACTOR; | ||
633 | } | ||
634 | |||
635 | |||
636 | /* | ||
637 | Algorithm core functions | ||
638 | */ | ||
639 | |||
640 | /* | ||
641 | ====================================================================== | ||
642 | epic_build_pyr() -- builds a separable QMF-style pyramid. The pyramid | ||
643 | is written over the original image. NOTE: the image size must be | ||
644 | divisible by 2^num_levels, but we do not check this here. | ||
645 | ====================================================================== | ||
646 | */ | ||
647 | void epic_build_pyr( float *image, int x_size, int y_size, int num_levels, | ||
648 | float *lo_filter, float *hi_filter, int filter_size ) | ||
649 | { | ||
650 | int x_level, y_level, level; | ||
651 | |||
652 | x_level = x_size; | ||
653 | y_level = y_size; | ||
654 | |||
655 | _Pragma( "loopbound min 4 max 4" ) | ||
656 | for ( level = 0; level < num_levels; ++level ){ | ||
657 | epic_build_level( image, x_level, y_level, lo_filter, hi_filter, | ||
658 | filter_size, image ); | ||
659 | x_level /= 2; | ||
660 | y_level /= 2; | ||
661 | } | ||
662 | } | ||
663 | |||
664 | |||
665 | /* | ||
666 | ====================================================================== | ||
667 | epic_build_level() -- builds a level of the pyramid by computing 4 | ||
668 | filtered and subsampled images. Since the convolution is separable, | ||
669 | image and result-block can point to the same place! Image order is | ||
670 | lowpass, horizontal, vertical (transposed), and diagonal. | ||
671 | ====================================================================== | ||
672 | */ | ||
673 | void epic_build_level( float *image, int level_x_size, int level_y_size, | ||
674 | float *lo_filter, float *hi_filter, | ||
675 | int filter_size, float *result_block ) | ||
676 | { | ||
677 | int total_size = level_x_size * level_y_size; | ||
678 | |||
679 | /* filter and subsample in the X direction */ | ||
680 | epic_internal_filter ( image, level_x_size, level_y_size, | ||
681 | lo_filter, epic_filtertemp, filter_size, 1, | ||
682 | 0, 2, 0, 1, epic_lo_imagetemp ); | ||
683 | epic_internal_filter ( image, level_x_size, level_y_size, | ||
684 | hi_filter, epic_filtertemp, filter_size, 1, | ||
685 | 1, 2, 0, 1, epic_hi_imagetemp ); | ||
686 | |||
687 | level_x_size /= 2; | ||
688 | /* now filter and subsample in the Y direction */ | ||
689 | epic_internal_filter ( epic_lo_imagetemp, level_x_size, | ||
690 | level_y_size, /* lowpass */ | ||
691 | lo_filter, epic_filtertemp, 1, filter_size, | ||
692 | 0, 1, 0, 2, result_block ); | ||
693 | epic_internal_filter ( epic_lo_imagetemp, level_x_size, | ||
694 | level_y_size, /* horizontal */ | ||
695 | hi_filter, epic_filtertemp, 1, filter_size, | ||
696 | 0, 1, 1, 2, ( result_block += ( total_size / 4 ) ) ); | ||
697 | epic_internal_filter ( epic_hi_imagetemp, level_x_size, | ||
698 | level_y_size, /* vertical */ | ||
699 | lo_filter, epic_filtertemp, 1, filter_size, | ||
700 | 0, 1, 0, 2, ( result_block += ( total_size / 4 ) ) ); | ||
701 | /* transpose the vertical band for more efficient scanning */ | ||
702 | epic_internal_transpose( result_block, level_y_size / 2, level_x_size ); | ||
703 | epic_internal_filter ( epic_hi_imagetemp, level_x_size, | ||
704 | level_y_size, /* diagonal */ | ||
705 | hi_filter, epic_filtertemp, 1, filter_size, | ||
706 | 0, 1, 1, 2, ( result_block += ( total_size / 4 ) ) ); | ||
707 | } | ||
708 | |||
709 | |||
710 | /* | ||
711 | ====================================================================== | ||
712 | In-place matrix tranpose algorithm. Handles non-square matrices, | ||
713 | too! Is there a faster algorithm?? | ||
714 | ====================================================================== | ||
715 | */ | ||
716 | void epic_internal_transpose( float *mat, int rows, int cols ) | ||
717 | { | ||
718 | register int swap_pos; | ||
719 | register int modulus = rows * cols - 1; | ||
720 | register int current_pos; | ||
721 | register float swap_val; | ||
722 | |||
723 | /* loop, ignoring first and last elements */ | ||
724 | _Pragma( "loopbound min 1022 max 2399" ) | ||
725 | for ( current_pos = 1; current_pos < modulus; ++current_pos ) { | ||
726 | /* Compute swap position */ | ||
727 | swap_pos = current_pos; | ||
728 | |||
729 | _Pragma( "loopbound min 1 max 2" ) | ||
730 | do { | ||
731 | swap_pos = ( swap_pos * cols ) % modulus; | ||
732 | } while ( swap_pos < current_pos ); | ||
733 | |||
734 | if ( current_pos != swap_pos ) { | ||
735 | swap_val = mat[swap_pos]; | ||
736 | mat[swap_pos] = mat[current_pos]; | ||
737 | mat[current_pos] = swap_val; | ||
738 | } | ||
739 | } | ||
740 | } | ||
741 | |||
742 | |||
743 | /* -------------------------------------------------------------------- | ||
744 | Correlate FILT with IMAGE, subsampling according to GRID parameters, | ||
745 | with values placed into result array. TEMP is a temporary | ||
746 | array the size of the filter. EDGES is a string -- see convolve.h. | ||
747 | The convolution is done in 9 sections, where the border sections use | ||
748 | specially computed edge-handling filters (see edges.c). The origin | ||
749 | of the filter is assumed to be (floor(x_fdim/2), floor(y_fdim/2)). | ||
750 | 10/6/89 - approximately optimized the choice of register vars on SPARCS. | ||
751 | ------------------------------------------------------------------------ */ | ||
752 | void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, | ||
753 | float *temp, int x_fdim, int y_fdim, | ||
754 | int xgrid_start, int xgrid_step, int ygrid_start, | ||
755 | int ygrid_step, float *result ) | ||
756 | { | ||
757 | //register double sum; | ||
758 | register float sum; | ||
759 | register int x_filt, im_pos, y_filt_lin; | ||
760 | register int y_im_lin, x_pos, filt_size = x_fdim * y_fdim; | ||
761 | register int y_pos, res_pos; | ||
762 | register int last_ctr_col = x_dim - x_fdim; | ||
763 | int last_ctr_row = ( y_dim - y_fdim ) * x_dim; | ||
764 | int first_row, first_col ; | ||
765 | int x_fmid = x_fdim / 2; | ||
766 | int y_fmid = y_fdim / 2; | ||
767 | int x_stop = x_fdim - x_fmid + 1; | ||
768 | int y_stop = y_fdim - y_fmid + 1; | ||
769 | int ygrid_step_full = ygrid_step * x_dim; | ||
770 | int prev_res_pos, x_res_dim = ( x_dim - xgrid_start + xgrid_step - 1 ) / | ||
771 | xgrid_step; | ||
772 | int rt_edge_res_pos = x_res_dim; | ||
773 | |||
774 | res_pos = 0; | ||
775 | first_col = xgrid_start - x_fmid + xgrid_step; | ||
776 | |||
777 | _Pragma( "loopbound min 1 max 4" ) | ||
778 | for ( y_pos = ygrid_start - y_fmid - 1; y_pos < 0; y_pos += ygrid_step ) { | ||
779 | _Pragma( "loopbound min 1 max 4" ) | ||
780 | for ( x_pos = xgrid_start - x_fmid; /* top-left corner */ | ||
781 | x_pos < 0; | ||
782 | x_pos += xgrid_step ) { | ||
783 | epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER ); | ||
784 | sum = 0.0f; | ||
785 | x_filt = y_im_lin = 0; | ||
786 | _Pragma( "loopbound min 1 max 15" ) | ||
787 | for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size; | ||
788 | y_filt_lin += x_fdim ) { | ||
789 | im_pos = y_im_lin; | ||
790 | |||
791 | _Pragma( "loopbound min 1 max 15" ) | ||
792 | for ( ; x_filt < y_filt_lin; ++x_filt ) { | ||
793 | sum += image[im_pos] * temp[x_filt]; | ||
794 | ++im_pos; | ||
795 | } | ||
796 | y_im_lin += x_dim; | ||
797 | } | ||
798 | result[res_pos] = sum; | ||
799 | ++res_pos; | ||
800 | } | ||
801 | first_col = x_pos + 1; | ||
802 | epic_reflect1( filt, x_fdim, y_fdim, 0, y_pos, temp, FILTER ); | ||
803 | _Pragma( "loopbound min 41 max 46" ) | ||
804 | for ( x_pos = first_col; /* top edge */ | ||
805 | x_pos < last_ctr_col; | ||
806 | x_pos += xgrid_step ) { | ||
807 | sum = 0.0f; | ||
808 | x_filt = y_im_lin = 0; | ||
809 | _Pragma( "loopbound min 1 max 15" ) | ||
810 | for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size; | ||
811 | y_filt_lin += x_fdim ) { | ||
812 | im_pos = x_pos + y_im_lin; | ||
813 | _Pragma( "loopbound min 1 max 15" ) | ||
814 | for ( ; x_filt < y_filt_lin; ++x_filt ) { | ||
815 | sum += image[im_pos] * temp[x_filt]; | ||
816 | ++im_pos; | ||
817 | } | ||
818 | y_im_lin += x_dim; | ||
819 | } | ||
820 | result[res_pos] = sum; | ||
821 | ++res_pos; | ||
822 | } | ||
823 | rt_edge_res_pos = res_pos + x_res_dim; /* save this for later ... */ | ||
824 | _Pragma( "loopbound min 1 max 4" ) | ||
825 | for ( x_pos += ( 1 - last_ctr_col ); /* top-right corner */ | ||
826 | x_pos < x_stop; | ||
827 | x_pos += xgrid_step ) { | ||
828 | epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER ); | ||
829 | sum = 0.0f; | ||
830 | x_filt = y_im_lin = 0; | ||
831 | _Pragma( "loopbound min 1 max 15" ) | ||
832 | for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size; | ||
833 | y_filt_lin += x_fdim ) { | ||
834 | im_pos = y_im_lin + last_ctr_col; | ||
835 | |||
836 | _Pragma( "loopbound min 1 max 15" ) | ||
837 | for ( ; x_filt < y_filt_lin; ++x_filt ) { | ||
838 | sum += image[im_pos] * temp[x_filt]; | ||
839 | ++im_pos; | ||
840 | } | ||
841 | y_im_lin += x_dim; | ||
842 | } | ||
843 | result[res_pos] = sum; | ||
844 | ++res_pos; | ||
845 | } | ||
846 | } /* end top */ | ||
847 | |||
848 | first_row = x_dim * ( y_pos + 1 ); /* need this to go down the sides */ | ||
849 | prev_res_pos = res_pos; | ||
850 | _Pragma( "loopbound min 1 max 4" ) | ||
851 | for ( x_pos = xgrid_start - x_fmid; /* left edge */ | ||
852 | x_pos < 1; | ||
853 | x_pos += xgrid_step ) { | ||
854 | res_pos = prev_res_pos; | ||
855 | epic_reflect1( filt, x_fdim, y_fdim, x_pos, 0, temp, FILTER ); | ||
856 | _Pragma( "loopbound min 41 max 97" ) | ||
857 | for ( y_pos = first_row; y_pos < last_ctr_row; | ||
858 | y_pos += ygrid_step_full ) { | ||
859 | sum = 0.0f; | ||
860 | x_filt = 0, y_im_lin = y_pos; | ||
861 | _Pragma( "loopbound min 1 max 15" ) | ||
862 | for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size; | ||
863 | y_filt_lin += x_fdim ) { | ||
864 | im_pos = y_im_lin; | ||
865 | _Pragma( "loopbound min 1 max 15" ) | ||
866 | for ( ; x_filt < y_filt_lin; x_filt++ ) { | ||
867 | sum += image[im_pos] * temp[x_filt]; | ||
868 | ++im_pos; | ||
869 | } | ||
870 | y_im_lin += x_dim; | ||
871 | } | ||
872 | result[res_pos] = sum; | ||
873 | res_pos += x_res_dim; | ||
874 | } | ||
875 | prev_res_pos++; | ||
876 | } | ||
877 | epic_reflect1( filt, x_fdim, y_fdim, 0, 0, temp, FILTER ); | ||
878 | _Pragma( "loopbound min 41 max 97" ) | ||
879 | for ( y_pos = first_row; /* center region of image */ | ||
880 | y_pos < last_ctr_row; | ||
881 | y_pos += ygrid_step_full ) { | ||
882 | res_pos = prev_res_pos; | ||
883 | _Pragma( "loopbound min 41 max 46" ) | ||
884 | for ( x_pos = first_col; | ||
885 | x_pos < last_ctr_col; | ||
886 | x_pos += xgrid_step ) { | ||
887 | sum = 0.0f; | ||
888 | x_filt = 0, y_im_lin = y_pos; | ||
889 | _Pragma( "loopbound min 1 max 15" ) | ||
890 | for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size; | ||
891 | y_filt_lin += x_fdim ) { | ||
892 | im_pos = x_pos + y_im_lin; | ||
893 | _Pragma( "loopbound min 1 max 15" ) | ||
894 | for ( ; x_filt < y_filt_lin; ++x_filt ) { | ||
895 | sum += image[im_pos] * temp[x_filt]; | ||
896 | ++im_pos; | ||
897 | } | ||
898 | y_im_lin += x_dim; | ||
899 | } | ||
900 | result[res_pos] = sum; | ||
901 | ++res_pos; | ||
902 | } | ||
903 | prev_res_pos += x_res_dim; | ||
904 | } | ||
905 | prev_res_pos = rt_edge_res_pos; | ||
906 | _Pragma( "loopbound min 1 max 4" ) | ||
907 | for ( x_pos += ( 1 - last_ctr_col ); /* right edge */ | ||
908 | x_pos < x_stop; | ||
909 | x_pos += xgrid_step ) { | ||
910 | res_pos = prev_res_pos; | ||
911 | epic_reflect1( filt, x_fdim, y_fdim, x_pos, 0, temp, FILTER ); | ||
912 | _Pragma( "loopbound min 41 max 97" ) | ||
913 | for ( y_pos = first_row; y_pos < last_ctr_row; | ||
914 | y_pos += ygrid_step_full ) { | ||
915 | sum = 0.0f; | ||
916 | x_filt = 0, y_im_lin = y_pos; | ||
917 | _Pragma( "loopbound min 1 max 15" ) | ||
918 | for ( y_filt_lin = x_fdim; | ||
919 | y_filt_lin <= filt_size; | ||
920 | y_filt_lin += x_fdim ) { | ||
921 | _Pragma( "loopbound min 1 max 15" ) | ||
922 | for ( im_pos = y_im_lin + last_ctr_col; | ||
923 | x_filt < y_filt_lin; | ||
924 | ++x_filt ) { | ||
925 | sum += image[im_pos] * temp[x_filt]; | ||
926 | ++im_pos; | ||
927 | } | ||
928 | y_im_lin += x_dim; | ||
929 | } | ||
930 | result[res_pos] = sum; | ||
931 | res_pos += x_res_dim; | ||
932 | } | ||
933 | prev_res_pos++; | ||
934 | } /* end mid */ | ||
935 | |||
936 | res_pos -= ( x_res_dim - 1 ); /* go to lower left corner */ | ||
937 | _Pragma( "loopbound min 1 max 4" ) | ||
938 | for ( y_pos = ( ( y_pos - last_ctr_row ) / x_dim ) + 1; /* bottom */ | ||
939 | y_pos < y_stop; | ||
940 | y_pos += ygrid_step ) { | ||
941 | _Pragma( "loopbound min 1 max 4" ) | ||
942 | for ( x_pos = xgrid_start - x_fmid; /* bottom-left corner */ | ||
943 | x_pos < 1; | ||
944 | x_pos += xgrid_step ) { | ||
945 | epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER ); | ||
946 | sum = 0.0f; | ||
947 | x_filt = 0, y_im_lin = last_ctr_row; | ||
948 | _Pragma( "loopbound min 1 max 15" ) | ||
949 | for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size; | ||
950 | y_filt_lin += x_fdim ) { | ||
951 | _Pragma( "loopbound min 1 max 15" ) | ||
952 | for ( im_pos = y_im_lin; | ||
953 | x_filt < y_filt_lin; | ||
954 | ++x_filt ) { | ||
955 | sum += image[im_pos] * temp[x_filt]; | ||
956 | ++im_pos; | ||
957 | } | ||
958 | y_im_lin += x_dim; | ||
959 | } | ||
960 | result[res_pos] = sum; | ||
961 | ++res_pos; | ||
962 | } | ||
963 | epic_reflect1( filt, x_fdim, y_fdim, 0, y_pos, temp, FILTER ); | ||
964 | _Pragma( "loopbound min 41 max 46" ) | ||
965 | for ( x_pos = first_col; /* bottom edge */ | ||
966 | x_pos < last_ctr_col; | ||
967 | x_pos += xgrid_step ) { | ||
968 | sum = 0.0f; | ||
969 | x_filt = 0, y_im_lin = last_ctr_row; | ||
970 | _Pragma( "loopbound min 1 max 15" ) | ||
971 | for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size; | ||
972 | y_filt_lin += x_fdim ) { | ||
973 | _Pragma( "loopbound min 1 max 15" ) | ||
974 | for ( im_pos = x_pos + y_im_lin; | ||
975 | x_filt < y_filt_lin; | ||
976 | ++x_filt ) { | ||
977 | sum += image[im_pos] * temp[x_filt]; | ||
978 | ++im_pos; | ||
979 | } | ||
980 | y_im_lin += x_dim; | ||
981 | } | ||
982 | result[res_pos] = sum; | ||
983 | ++res_pos; | ||
984 | } | ||
985 | _Pragma( "loopbound min 1 max 4" ) | ||
986 | for ( x_pos += 1 - last_ctr_col; /* bottom-right corner */ | ||
987 | x_pos < x_stop; | ||
988 | x_pos += xgrid_step ) { | ||
989 | epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER ); | ||
990 | sum = 0.0f; | ||
991 | x_filt = 0, y_im_lin = last_ctr_row; | ||
992 | _Pragma( "loopbound min 1 max 15" ) | ||
993 | for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size; | ||
994 | y_filt_lin += x_fdim ) { | ||
995 | _Pragma( "loopbound min 1 max 15" ) | ||
996 | for ( im_pos = y_im_lin + last_ctr_col; | ||
997 | x_filt < y_filt_lin; | ||
998 | ++x_filt ) { | ||
999 | sum += image[im_pos] * temp[x_filt]; | ||
1000 | ++im_pos; | ||
1001 | } | ||
1002 | y_im_lin += x_dim; | ||
1003 | } | ||
1004 | result[res_pos] = sum; | ||
1005 | ++res_pos; | ||
1006 | } | ||
1007 | } /* end bottom */ | ||
1008 | |||
1009 | } /* end of epic_internal_filter */ | ||
1010 | |||
1011 | |||
1012 | /* | ||
1013 | The following function determine how edges are to be handled | ||
1014 | when performing convolutions of images with linear filters. | ||
1015 | Any edge handling function which is local and linear may be defined, | ||
1016 | except (unfortunately) constants cannot be added. So to treat the | ||
1017 | edges as if the image is surrounded by a gray field, you must paste it | ||
1018 | into a gray image, convolve, and crop it out... | ||
1019 | The main convolution function is called epic_internal_filter. The idea | ||
1020 | is that the convolution function calls the edge handling function which | ||
1021 | computes a new filter based on the old filter and the distance to the | ||
1022 | edge of the image. For example, reflection is done by reflecting the | ||
1023 | filter through the appropriate axis and summing. | ||
1024 | */ | ||
1025 | |||
1026 | /* | ||
1027 | ---------------- EDGE HANDLER ARGUMENTS ------------------------ | ||
1028 | filt - floating point array of filter taps. | ||
1029 | x_dim, y_dim - x and y dimensions of filt. | ||
1030 | x_pos - position of filter relative to the horizontal image edges. Negative | ||
1031 | values indicate left edge, positive indicate right edge. Zero | ||
1032 | indicates that the filter is not touching either edge. An absolute | ||
1033 | value of 1 indicates that the edge tap of the filter is over the | ||
1034 | edge pixel of the image. | ||
1035 | y_pos - analogous to x_pos. | ||
1036 | result - floating point array where the resulting filter will go. The edge | ||
1037 | of this filter will be aligned with the image for application... | ||
1038 | f_or_e - equal to one of the two constants EXPAND or FILTER. | ||
1039 | -------------------------------------------------------------------- | ||
1040 | */ | ||
1041 | |||
1042 | /* -------------------------------------------------------------------- | ||
1043 | epic_reflect1() - Reflection through the edge pixels. This is the right | ||
1044 | thing to do if you are subsampling by 2, since it maintains parity (even | ||
1045 | pixels positions remain even, odd ones remain odd). (note: procedure differs | ||
1046 | depending on f_or_e parameter). */ | ||
1047 | void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos, | ||
1048 | float *result, int f_or_e ) | ||
1049 | { | ||
1050 | int filt_sz = x_dim * y_dim; | ||
1051 | register int x_start = 0, y_start = 0, x_stop = x_dim, y_stop = filt_sz; | ||
1052 | register int y_filt, x_filt, y_edge, x_edge; | ||
1053 | register int x_base = ( x_pos > 0 ) ? ( x_dim - 1 ) : 0; | ||
1054 | register int y_base = ( y_pos > 0 ) ? ( x_dim * ( y_dim - 1 ) ) : 0; | ||
1055 | int x_edge_dist = ( x_pos > 0 ) ? ( x_pos - x_dim ) : ( ( x_pos < -1 ) ? | ||
1056 | ( x_pos + 1 ) : 0 ); | ||
1057 | int y_edge_dist = x_dim * ( ( y_pos > 0 ) ? ( y_pos - y_dim ) : ( ( | ||
1058 | y_pos < -1 ) ? ( y_pos + 1 ) : 0 ) ); | ||
1059 | int i; | ||
1060 | int mx_pos = ( x_dim / 2 ) + 1; | ||
1061 | int my_pos = ( y_dim / 2 ) + 1; | ||
1062 | |||
1063 | _Pragma( "loopbound min 15 max 15" ) | ||
1064 | for ( i = 0; i < filt_sz; ++i ) result[i] = 0.0f; | ||
1065 | |||
1066 | /* if EXPAND and filter is centered on image edge, do not reflect */ | ||
1067 | if ( f_or_e IS EXPAND ) { | ||
1068 | if ( x_pos IS mx_pos ) x_stop = ( x_dim + 1 ) / 2; | ||
1069 | else | ||
1070 | if ( x_pos IS - mx_pos ) { | ||
1071 | x_start = x_dim / 2; | ||
1072 | x_edge_dist = 0; | ||
1073 | } | ||
1074 | |||
1075 | if ( y_pos IS my_pos ) y_stop = x_dim * ( ( y_dim + 1 ) / 2 ); | ||
1076 | else | ||
1077 | if ( y_pos IS - my_pos ) { | ||
1078 | y_start = x_dim * ( y_dim / 2 ); | ||
1079 | y_edge_dist = 0; | ||
1080 | } | ||
1081 | } | ||
1082 | |||
1083 | y_edge = y_edge_dist; | ||
1084 | /* reflect at boundary of image */ | ||
1085 | _Pragma( "loopbound min 1 max 15" ) | ||
1086 | for ( y_filt = y_start; y_filt < y_stop; y_filt += x_dim ) { | ||
1087 | x_edge = x_edge_dist; | ||
1088 | _Pragma( "loopbound min 1 max 15" ) | ||
1089 | for ( x_filt = y_filt + x_start; x_filt < y_filt + x_stop; ++x_filt ) { | ||
1090 | result[abs( y_base - abs( y_edge ) ) + abs( x_base - abs( x_edge ) )] | ||
1091 | += filt[x_filt]; | ||
1092 | ++x_edge; | ||
1093 | } | ||
1094 | y_edge += x_dim; | ||
1095 | } | ||
1096 | |||
1097 | /* if EXPAND and filter is not centered on image edge, mult edge by 2 */ | ||
1098 | if ( f_or_e IS EXPAND ) { | ||
1099 | if ( ( abs( x_pos ) ISNT mx_pos ) AND ( x_pos ISNT 0 ) ) | ||
1100 | _Pragma( "loopbound min 0 max 0" ) | ||
1101 | for ( y_filt = x_base; y_filt < filt_sz; y_filt += x_dim ) | ||
1102 | result[y_filt] += result[y_filt]; | ||
1103 | if ( ( abs( y_pos ) ISNT my_pos ) AND ( y_pos ISNT 0 ) ) | ||
1104 | _Pragma( "loopbound min 0 max 0" ) | ||
1105 | for ( x_filt = y_base; x_filt < y_base + x_dim; ++x_filt ) | ||
1106 | result[x_filt] += result[x_filt]; | ||
1107 | } | ||
1108 | } | ||
1109 | |||
1110 | |||
1111 | /* | ||
1112 | Main functions | ||
1113 | */ | ||
1114 | |||
1115 | void _Pragma( "entrypoint" ) epic_main( void ) | ||
1116 | { | ||
1117 | epic_build_pyr( epic_image, X_SIZE, Y_SIZE, NUM_LEVELS, epic_lo_filter, | ||
1118 | epic_hi_filter, FILTER_SIZE ); | ||
1119 | } | ||
1120 | |||
1121 | int epic_return(){ | ||
1122 | int i; | ||
1123 | int checksum = 0; | ||
1124 | for ( i=0 ; i<X_SIZE*Y_SIZE ; i+=Y_SIZE+1 ){ | ||
1125 | checksum += epic_image[i]; | ||
1126 | } | ||
1127 | return ( checksum == 43968 ? 0 : 1); | ||
1128 | } | ||
1129 | |||
1130 | int main( int argc, char **argv ) | ||
1131 | { | ||
1132 | SET_UP | ||
1133 | for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){ | ||
1134 | START_LOOP | ||
1135 | epic_init(); | ||
1136 | epic_main(); | ||
1137 | STOP_LOOP | ||
1138 | } | ||
1139 | WRITE_TO_FILE | ||
1140 | return epic_return(); | ||
1141 | } | ||