1// Copyright (c) 2018-2022, The rav1e contributors. All rights reserved
2//
3// This source code is subject to the terms of the BSD 2 Clause License and
4// the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
5// was not distributed with this source code in the LICENSE file, you can
6// obtain it at www.aomedia.org/license/software. If the Alliance for Open
7// Media Patent License 1.0 was not distributed with this source code in the
8// PATENTS file, you can obtain it at www.aomedia.org/license/patent.
9
10#![allow(non_upper_case_globals)]
11#![allow(dead_code)]
12#![allow(non_camel_case_types)]
13
14const MAX_NEIGHBORS: usize = 2;
15
16use crate::transform::*;
17
18pub struct SCAN_ORDER {
19 pub scan: &'static [u16],
20 pub iscan: &'static [u16],
21}
22
23// To stop from having to perform an unnecessary transpose in the forward and
24// inverse transforms, the output of the forward transform is transposed in
25// relation to how is in the spec. This means that all of our scan orders are
26// different from what is found the spec.
27
28#[rustfmt::skip]
29static default_scan_4x4 : [u16; 16] = [
30 0, 4, 1, 2, 5, 8, 12, 9, 6, 3, 7, 10, 13, 14, 11, 15,
31];
32
33#[rustfmt::skip]
34static mrow_scan_4x4 : [u16; 16] = [
35 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15,
36];
37
38#[rustfmt::skip]
39static mcol_scan_4x4 : [u16; 16] = [
40 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
41];
42
43#[rustfmt::skip]
44static default_scan_8x4 : [u16; 32] = [
45 0, 1, 4, 2, 5, 8, 3, 6, 9, 12, 7, 10, 13, 16, 11, 14,
46 17, 20, 15, 18, 21, 24, 19, 22, 25, 28, 23, 26, 29, 27, 30, 31,
47];
48
49#[rustfmt::skip]
50static mrow_scan_8x4 : [u16; 32] = [
51 0, 4, 8, 12, 16, 20, 24, 28, 1, 5, 9, 13, 17, 21, 25, 29,
52 2, 6, 10, 14, 18, 22, 26, 30, 3, 7, 11, 15, 19, 23, 27, 31,
53];
54
55#[rustfmt::skip]
56static mcol_scan_8x4 : [u16; 32] = [
57 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
58 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
59];
60
61#[rustfmt::skip]
62static default_scan_4x8 : [u16; 32] = [
63 0, 8, 1, 16, 9, 2, 24, 17, 10, 3, 25, 18, 11, 4, 26, 19,
64 12, 5, 27, 20, 13, 6, 28, 21, 14, 7, 29, 22, 15, 30, 23, 31,
65];
66
67#[rustfmt::skip]
68static mrow_scan_4x8 : [u16; 32] = [
69 0, 8, 16, 24, 1, 9, 17, 25, 2, 10, 18, 26, 3, 11, 19, 27,
70 4, 12, 20, 28, 5, 13, 21, 29, 6, 14, 22, 30, 7, 15, 23, 31,
71];
72
73#[rustfmt::skip]
74static mcol_scan_4x8 : [u16; 32] = [
75 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
76 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
77];
78
79#[rustfmt::skip]
80static default_scan_16x4 : [u16; 64] = [
81 0, 1, 4, 2, 5, 8, 3, 6, 9, 12, 7, 10, 13, 16, 11, 14,
82 17, 20, 15, 18, 21, 24, 19, 22, 25, 28, 23, 26, 29, 32, 27, 30,
83 33, 36, 31, 34, 37, 40, 35, 38, 41, 44, 39, 42, 45, 48, 43, 46,
84 49, 52, 47, 50, 53, 56, 51, 54, 57, 60, 55, 58, 61, 59, 62, 63,
85];
86
87#[rustfmt::skip]
88static default_scan_4x16 : [u16; 64] = [
89 0, 16, 1, 32, 17, 2, 48, 33, 18, 3, 49, 34, 19, 4, 50, 35,
90 20, 5, 51, 36, 21, 6, 52, 37, 22, 7, 53, 38, 23, 8, 54, 39,
91 24, 9, 55, 40, 25, 10, 56, 41, 26, 11, 57, 42, 27, 12, 58, 43,
92 28, 13, 59, 44, 29, 14, 60, 45, 30, 15, 61, 46, 31, 62, 47, 63,
93];
94
95#[rustfmt::skip]
96static mcol_scan_16x4 : [u16; 64] = [
97 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
98 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
99 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
100 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
101];
102
103#[rustfmt::skip]
104static mcol_scan_4x16 : [u16; 64] = [
105 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
106 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
107 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
108 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
109];
110
111#[rustfmt::skip]
112static mrow_scan_16x4 : [u16; 64] = [
113 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60,
114 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61,
115 2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62,
116 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63,
117];
118
119#[rustfmt::skip]
120static mrow_scan_4x16 : [u16; 64] = [
121 0, 16, 32, 48, 1, 17, 33, 49, 2, 18, 34, 50, 3, 19, 35, 51,
122 4, 20, 36, 52, 5, 21, 37, 53, 6, 22, 38, 54, 7, 23, 39, 55,
123 8, 24, 40, 56, 9, 25, 41, 57, 10, 26, 42, 58, 11, 27, 43, 59,
124 12, 28, 44, 60, 13, 29, 45, 61, 14, 30, 46, 62, 15, 31, 47, 63,
125];
126
127#[rustfmt::skip]
128static default_scan_32x8 : [u16; 256] = [
129 0, 1, 8, 2, 9, 16, 3, 10, 17, 24, 4, 11, 18, 25, 32,
130 5, 12, 19, 26, 33, 40, 6, 13, 20, 27, 34, 41, 48, 7, 14,
131 21, 28, 35, 42, 49, 56, 15, 22, 29, 36, 43, 50, 57, 64, 23,
132 30, 37, 44, 51, 58, 65, 72, 31, 38, 45, 52, 59, 66, 73, 80,
133 39, 46, 53, 60, 67, 74, 81, 88, 47, 54, 61, 68, 75, 82, 89,
134 96, 55, 62, 69, 76, 83, 90, 97, 104, 63, 70, 77, 84, 91, 98,
135 105, 112, 71, 78, 85, 92, 99, 106, 113, 120, 79, 86, 93, 100, 107,
136 114, 121, 128, 87, 94, 101, 108, 115, 122, 129, 136, 95, 102, 109, 116,
137 123, 130, 137, 144, 103, 110, 117, 124, 131, 138, 145, 152, 111, 118, 125,
138 132, 139, 146, 153, 160, 119, 126, 133, 140, 147, 154, 161, 168, 127, 134,
139 141, 148, 155, 162, 169, 176, 135, 142, 149, 156, 163, 170, 177, 184, 143,
140 150, 157, 164, 171, 178, 185, 192, 151, 158, 165, 172, 179, 186, 193, 200,
141 159, 166, 173, 180, 187, 194, 201, 208, 167, 174, 181, 188, 195, 202, 209,
142 216, 175, 182, 189, 196, 203, 210, 217, 224, 183, 190, 197, 204, 211, 218,
143 225, 232, 191, 198, 205, 212, 219, 226, 233, 240, 199, 206, 213, 220, 227,
144 234, 241, 248, 207, 214, 221, 228, 235, 242, 249, 215, 222, 229, 236, 243,
145 250, 223, 230, 237, 244, 251, 231, 238, 245, 252, 239, 246, 253, 247, 254,
146 255,
147];
148
149#[rustfmt::skip]
150static default_scan_8x32 : [u16; 256] = [
151 0, 32, 1, 64, 33, 2, 96, 65, 34, 3, 128, 97, 66, 35, 4,
152 160, 129, 98, 67, 36, 5, 192, 161, 130, 99, 68, 37, 6, 224, 193,
153 162, 131, 100, 69, 38, 7, 225, 194, 163, 132, 101, 70, 39, 8, 226,
154 195, 164, 133, 102, 71, 40, 9, 227, 196, 165, 134, 103, 72, 41, 10,
155 228, 197, 166, 135, 104, 73, 42, 11, 229, 198, 167, 136, 105, 74, 43,
156 12, 230, 199, 168, 137, 106, 75, 44, 13, 231, 200, 169, 138, 107, 76,
157 45, 14, 232, 201, 170, 139, 108, 77, 46, 15, 233, 202, 171, 140, 109,
158 78, 47, 16, 234, 203, 172, 141, 110, 79, 48, 17, 235, 204, 173, 142,
159 111, 80, 49, 18, 236, 205, 174, 143, 112, 81, 50, 19, 237, 206, 175,
160 144, 113, 82, 51, 20, 238, 207, 176, 145, 114, 83, 52, 21, 239, 208,
161 177, 146, 115, 84, 53, 22, 240, 209, 178, 147, 116, 85, 54, 23, 241,
162 210, 179, 148, 117, 86, 55, 24, 242, 211, 180, 149, 118, 87, 56, 25,
163 243, 212, 181, 150, 119, 88, 57, 26, 244, 213, 182, 151, 120, 89, 58,
164 27, 245, 214, 183, 152, 121, 90, 59, 28, 246, 215, 184, 153, 122, 91,
165 60, 29, 247, 216, 185, 154, 123, 92, 61, 30, 248, 217, 186, 155, 124,
166 93, 62, 31, 249, 218, 187, 156, 125, 94, 63, 250, 219, 188, 157, 126,
167 95, 251, 220, 189, 158, 127, 252, 221, 190, 159, 253, 222, 191, 254, 223,
168 255,
169];
170
171#[rustfmt::skip]
172static mcol_scan_32x8 : [u16; 256] = [
173 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
174 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
175 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
176 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
177 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
178 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
179 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
180 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
181 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
182 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
183 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
184 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
185 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
186 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
187 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
188 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
189 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
190 255,
191];
192
193#[rustfmt::skip]
194static mcol_scan_8x32 : [u16; 256] = [
195 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
196 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
197 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
198 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
199 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
200 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
201 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
202 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
203 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
204 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
205 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
206 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
207 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
208 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
209 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
210 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
211 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
212 255,
213];
214
215#[rustfmt::skip]
216static mrow_scan_32x8 : [u16; 256] = [
217 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112,
218 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232,
219 240, 248, 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97,
220 105, 113, 121, 129, 137, 145, 153, 161, 169, 177, 185, 193, 201, 209, 217,
221 225, 233, 241, 249, 2, 10, 18, 26, 34, 42, 50, 58, 66, 74, 82,
222 90, 98, 106, 114, 122, 130, 138, 146, 154, 162, 170, 178, 186, 194, 202,
223 210, 218, 226, 234, 242, 250, 3, 11, 19, 27, 35, 43, 51, 59, 67,
224 75, 83, 91, 99, 107, 115, 123, 131, 139, 147, 155, 163, 171, 179, 187,
225 195, 203, 211, 219, 227, 235, 243, 251, 4, 12, 20, 28, 36, 44, 52,
226 60, 68, 76, 84, 92, 100, 108, 116, 124, 132, 140, 148, 156, 164, 172,
227 180, 188, 196, 204, 212, 220, 228, 236, 244, 252, 5, 13, 21, 29, 37,
228 45, 53, 61, 69, 77, 85, 93, 101, 109, 117, 125, 133, 141, 149, 157,
229 165, 173, 181, 189, 197, 205, 213, 221, 229, 237, 245, 253, 6, 14, 22,
230 30, 38, 46, 54, 62, 70, 78, 86, 94, 102, 110, 118, 126, 134, 142,
231 150, 158, 166, 174, 182, 190, 198, 206, 214, 222, 230, 238, 246, 254, 7,
232 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95, 103, 111, 119, 127,
233 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223, 231, 239, 247,
234 255,
235];
236
237#[rustfmt::skip]
238static mrow_scan_8x32 : [u16; 256] = [
239 0, 32, 64, 96, 128, 160, 192, 224, 1, 33, 65, 97, 129, 161, 193, 225,
240 2, 34, 66, 98, 130, 162, 194, 226, 3, 35, 67, 99, 131, 163, 195, 227,
241 4, 36, 68, 100, 132, 164, 196, 228, 5, 37, 69, 101, 133, 165, 197, 229,
242 6, 38, 70, 102, 134, 166, 198, 230, 7, 39, 71, 103, 135, 167, 199, 231,
243 8, 40, 72, 104, 136, 168, 200, 232, 9, 41, 73, 105, 137, 169, 201, 233,
244 10, 42, 74, 106, 138, 170, 202, 234, 11, 43, 75, 107, 139, 171, 203, 235,
245 12, 44, 76, 108, 140, 172, 204, 236, 13, 45, 77, 109, 141, 173, 205, 237,
246 14, 46, 78, 110, 142, 174, 206, 238, 15, 47, 79, 111, 143, 175, 207, 239,
247 16, 48, 80, 112, 144, 176, 208, 240, 17, 49, 81, 113, 145, 177, 209, 241,
248 18, 50, 82, 114, 146, 178, 210, 242, 19, 51, 83, 115, 147, 179, 211, 243,
249 20, 52, 84, 116, 148, 180, 212, 244, 21, 53, 85, 117, 149, 181, 213, 245,
250 22, 54, 86, 118, 150, 182, 214, 246, 23, 55, 87, 119, 151, 183, 215, 247,
251 24, 56, 88, 120, 152, 184, 216, 248, 25, 57, 89, 121, 153, 185, 217, 249,
252 26, 58, 90, 122, 154, 186, 218, 250, 27, 59, 91, 123, 155, 187, 219, 251,
253 28, 60, 92, 124, 156, 188, 220, 252, 29, 61, 93, 125, 157, 189, 221, 253,
254 30, 62, 94, 126, 158, 190, 222, 254, 31, 63, 95, 127, 159, 191, 223, 255,
255];
256
257#[rustfmt::skip]
258static default_scan_8x8 : [u16; 64] = [
259 0, 8, 1, 2, 9, 16, 24, 17, 10, 3, 4, 11, 18, 25, 32, 40,
260 33, 26, 19, 12, 5, 6, 13, 20, 27, 34, 41, 48, 56, 49, 42, 35,
261 28, 21, 14, 7, 15, 22, 29, 36, 43, 50, 57, 58, 51, 44, 37, 30,
262 23, 31, 38, 45, 52, 59, 60, 53, 46, 39, 47, 54, 61, 62, 55, 63,
263];
264
265#[rustfmt::skip]
266static mrow_scan_8x8 : [u16; 64] = [
267 0, 8, 16, 24, 32, 40, 48, 56, 1, 9, 17, 25, 33, 41, 49, 57,
268 2, 10, 18, 26, 34, 42, 50, 58, 3, 11, 19, 27, 35, 43, 51, 59,
269 4, 12, 20, 28, 36, 44, 52, 60, 5, 13, 21, 29, 37, 45, 53, 61,
270 6, 14, 22, 30, 38, 46, 54, 62, 7, 15, 23, 31, 39, 47, 55, 63,
271];
272
273#[rustfmt::skip]
274static mcol_scan_8x8 : [u16; 64] = [
275 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
276 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
277 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
278 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
279];
280
281#[rustfmt::skip]
282static default_scan_16x8 : [u16; 128] = [
283 0, 1, 8, 2, 9, 16, 3, 10, 17, 24, 4, 11, 18, 25, 32,
284 5, 12, 19, 26, 33, 40, 6, 13, 20, 27, 34, 41, 48, 7, 14,
285 21, 28, 35, 42, 49, 56, 15, 22, 29, 36, 43, 50, 57, 64, 23,
286 30, 37, 44, 51, 58, 65, 72, 31, 38, 45, 52, 59, 66, 73, 80,
287 39, 46, 53, 60, 67, 74, 81, 88, 47, 54, 61, 68, 75, 82, 89,
288 96, 55, 62, 69, 76, 83, 90, 97, 104, 63, 70, 77, 84, 91, 98,
289 105, 112, 71, 78, 85, 92, 99, 106, 113, 120, 79, 86, 93, 100, 107,
290 114, 121, 87, 94, 101, 108, 115, 122, 95, 102, 109, 116, 123, 103, 110,
291 117, 124, 111, 118, 125, 119, 126, 127,
292];
293
294#[rustfmt::skip]
295static default_scan_8x16 : [u16; 128] = [
296 0, 16, 1, 32, 17, 2, 48, 33, 18, 3, 64, 49, 34, 19, 4, 80,
297 65, 50, 35, 20, 5, 96, 81, 66, 51, 36, 21, 6, 112, 97, 82, 67,
298 52, 37, 22, 7, 113, 98, 83, 68, 53, 38, 23, 8, 114, 99, 84, 69,
299 54, 39, 24, 9, 115, 100, 85, 70, 55, 40, 25, 10, 116, 101, 86, 71,
300 56, 41, 26, 11, 117, 102, 87, 72, 57, 42, 27, 12, 118, 103, 88, 73,
301 58, 43, 28, 13, 119, 104, 89, 74, 59, 44, 29, 14, 120, 105, 90, 75,
302 60, 45, 30, 15, 121, 106, 91, 76, 61, 46, 31, 122, 107, 92, 77, 62,
303 47, 123, 108, 93, 78, 63, 124, 109, 94, 79, 125, 110, 95, 126, 111, 127,
304];
305
306#[rustfmt::skip]
307static mrow_scan_16x8 : [u16; 128] = [
308 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120,
309 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97, 105, 113, 121,
310 2, 10, 18, 26, 34, 42, 50, 58, 66, 74, 82, 90, 98, 106, 114, 122,
311 3, 11, 19, 27, 35, 43, 51, 59, 67, 75, 83, 91, 99, 107, 115, 123,
312 4, 12, 20, 28, 36, 44, 52, 60, 68, 76, 84, 92, 100, 108, 116, 124,
313 5, 13, 21, 29, 37, 45, 53, 61, 69, 77, 85, 93, 101, 109, 117, 125,
314 6, 14, 22, 30, 38, 46, 54, 62, 70, 78, 86, 94, 102, 110, 118, 126,
315 7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95, 103, 111, 119, 127,
316];
317
318#[rustfmt::skip]
319static mrow_scan_8x16 : [u16; 128] = [
320 0, 16, 32, 48, 64, 80, 96, 112, 1, 17, 33, 49, 65, 81, 97, 113,
321 2, 18, 34, 50, 66, 82, 98, 114, 3, 19, 35, 51, 67, 83, 99, 115,
322 4, 20, 36, 52, 68, 84, 100, 116, 5, 21, 37, 53, 69, 85, 101, 117,
323 6, 22, 38, 54, 70, 86, 102, 118, 7, 23, 39, 55, 71, 87, 103, 119,
324 8, 24, 40, 56, 72, 88, 104, 120, 9, 25, 41, 57, 73, 89, 105, 121,
325 10, 26, 42, 58, 74, 90, 106, 122, 11, 27, 43, 59, 75, 91, 107, 123,
326 12, 28, 44, 60, 76, 92, 108, 124, 13, 29, 45, 61, 77, 93, 109, 125,
327 14, 30, 46, 62, 78, 94, 110, 126, 15, 31, 47, 63, 79, 95, 111, 127,
328];
329
330#[rustfmt::skip]
331static mcol_scan_16x8 : [u16; 128] = [
332 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
333 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
334 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
335 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
336 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
337 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
338 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
339 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
340 120, 121, 122, 123, 124, 125, 126, 127,
341];
342
343#[rustfmt::skip]
344static mcol_scan_8x16 : [u16; 128] = [
345 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
346 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
347 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
348 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
349 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
350 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
351 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
352 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
353 120, 121, 122, 123, 124, 125, 126, 127,
354];
355
356#[rustfmt::skip]
357static default_scan_32x16 : [u16; 512] = [
358 0, 1, 16, 2, 17, 32, 3, 18, 33, 48, 4, 19, 34, 49, 64,
359 5, 20, 35, 50, 65, 80, 6, 21, 36, 51, 66, 81, 96, 7, 22,
360 37, 52, 67, 82, 97, 112, 8, 23, 38, 53, 68, 83, 98, 113, 128,
361 9, 24, 39, 54, 69, 84, 99, 114, 129, 144, 10, 25, 40, 55, 70,
362 85, 100, 115, 130, 145, 160, 11, 26, 41, 56, 71, 86, 101, 116, 131,
363 146, 161, 176, 12, 27, 42, 57, 72, 87, 102, 117, 132, 147, 162, 177,
364 192, 13, 28, 43, 58, 73, 88, 103, 118, 133, 148, 163, 178, 193, 208,
365 14, 29, 44, 59, 74, 89, 104, 119, 134, 149, 164, 179, 194, 209, 224,
366 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225,
367 240, 31, 46, 61, 76, 91, 106, 121, 136, 151, 166, 181, 196, 211, 226,
368 241, 256, 47, 62, 77, 92, 107, 122, 137, 152, 167, 182, 197, 212, 227,
369 242, 257, 272, 63, 78, 93, 108, 123, 138, 153, 168, 183, 198, 213, 228,
370 243, 258, 273, 288, 79, 94, 109, 124, 139, 154, 169, 184, 199, 214, 229,
371 244, 259, 274, 289, 304, 95, 110, 125, 140, 155, 170, 185, 200, 215, 230,
372 245, 260, 275, 290, 305, 320, 111, 126, 141, 156, 171, 186, 201, 216, 231,
373 246, 261, 276, 291, 306, 321, 336, 127, 142, 157, 172, 187, 202, 217, 232,
374 247, 262, 277, 292, 307, 322, 337, 352, 143, 158, 173, 188, 203, 218, 233,
375 248, 263, 278, 293, 308, 323, 338, 353, 368, 159, 174, 189, 204, 219, 234,
376 249, 264, 279, 294, 309, 324, 339, 354, 369, 384, 175, 190, 205, 220, 235,
377 250, 265, 280, 295, 310, 325, 340, 355, 370, 385, 400, 191, 206, 221, 236,
378 251, 266, 281, 296, 311, 326, 341, 356, 371, 386, 401, 416, 207, 222, 237,
379 252, 267, 282, 297, 312, 327, 342, 357, 372, 387, 402, 417, 432, 223, 238,
380 253, 268, 283, 298, 313, 328, 343, 358, 373, 388, 403, 418, 433, 448, 239,
381 254, 269, 284, 299, 314, 329, 344, 359, 374, 389, 404, 419, 434, 449, 464,
382 255, 270, 285, 300, 315, 330, 345, 360, 375, 390, 405, 420, 435, 450, 465,
383 480, 271, 286, 301, 316, 331, 346, 361, 376, 391, 406, 421, 436, 451, 466,
384 481, 496, 287, 302, 317, 332, 347, 362, 377, 392, 407, 422, 437, 452, 467,
385 482, 497, 303, 318, 333, 348, 363, 378, 393, 408, 423, 438, 453, 468, 483,
386 498, 319, 334, 349, 364, 379, 394, 409, 424, 439, 454, 469, 484, 499, 335,
387 350, 365, 380, 395, 410, 425, 440, 455, 470, 485, 500, 351, 366, 381, 396,
388 411, 426, 441, 456, 471, 486, 501, 367, 382, 397, 412, 427, 442, 457, 472,
389 487, 502, 383, 398, 413, 428, 443, 458, 473, 488, 503, 399, 414, 429, 444,
390 459, 474, 489, 504, 415, 430, 445, 460, 475, 490, 505, 431, 446, 461, 476,
391 491, 506, 447, 462, 477, 492, 507, 463, 478, 493, 508, 479, 494, 509, 495,
392 510, 511,
393];
394
395#[rustfmt::skip]
396static default_scan_16x32 : [u16; 512] = [
397 0, 32, 1, 64, 33, 2, 96, 65, 34, 3, 128, 97, 66, 35, 4,
398 160, 129, 98, 67, 36, 5, 192, 161, 130, 99, 68, 37, 6, 224, 193,
399 162, 131, 100, 69, 38, 7, 256, 225, 194, 163, 132, 101, 70, 39, 8,
400 288, 257, 226, 195, 164, 133, 102, 71, 40, 9, 320, 289, 258, 227, 196,
401 165, 134, 103, 72, 41, 10, 352, 321, 290, 259, 228, 197, 166, 135, 104,
402 73, 42, 11, 384, 353, 322, 291, 260, 229, 198, 167, 136, 105, 74, 43,
403 12, 416, 385, 354, 323, 292, 261, 230, 199, 168, 137, 106, 75, 44, 13,
404 448, 417, 386, 355, 324, 293, 262, 231, 200, 169, 138, 107, 76, 45, 14,
405 480, 449, 418, 387, 356, 325, 294, 263, 232, 201, 170, 139, 108, 77, 46,
406 15, 481, 450, 419, 388, 357, 326, 295, 264, 233, 202, 171, 140, 109, 78,
407 47, 16, 482, 451, 420, 389, 358, 327, 296, 265, 234, 203, 172, 141, 110,
408 79, 48, 17, 483, 452, 421, 390, 359, 328, 297, 266, 235, 204, 173, 142,
409 111, 80, 49, 18, 484, 453, 422, 391, 360, 329, 298, 267, 236, 205, 174,
410 143, 112, 81, 50, 19, 485, 454, 423, 392, 361, 330, 299, 268, 237, 206,
411 175, 144, 113, 82, 51, 20, 486, 455, 424, 393, 362, 331, 300, 269, 238,
412 207, 176, 145, 114, 83, 52, 21, 487, 456, 425, 394, 363, 332, 301, 270,
413 239, 208, 177, 146, 115, 84, 53, 22, 488, 457, 426, 395, 364, 333, 302,
414 271, 240, 209, 178, 147, 116, 85, 54, 23, 489, 458, 427, 396, 365, 334,
415 303, 272, 241, 210, 179, 148, 117, 86, 55, 24, 490, 459, 428, 397, 366,
416 335, 304, 273, 242, 211, 180, 149, 118, 87, 56, 25, 491, 460, 429, 398,
417 367, 336, 305, 274, 243, 212, 181, 150, 119, 88, 57, 26, 492, 461, 430,
418 399, 368, 337, 306, 275, 244, 213, 182, 151, 120, 89, 58, 27, 493, 462,
419 431, 400, 369, 338, 307, 276, 245, 214, 183, 152, 121, 90, 59, 28, 494,
420 463, 432, 401, 370, 339, 308, 277, 246, 215, 184, 153, 122, 91, 60, 29,
421 495, 464, 433, 402, 371, 340, 309, 278, 247, 216, 185, 154, 123, 92, 61,
422 30, 496, 465, 434, 403, 372, 341, 310, 279, 248, 217, 186, 155, 124, 93,
423 62, 31, 497, 466, 435, 404, 373, 342, 311, 280, 249, 218, 187, 156, 125,
424 94, 63, 498, 467, 436, 405, 374, 343, 312, 281, 250, 219, 188, 157, 126,
425 95, 499, 468, 437, 406, 375, 344, 313, 282, 251, 220, 189, 158, 127, 500,
426 469, 438, 407, 376, 345, 314, 283, 252, 221, 190, 159, 501, 470, 439, 408,
427 377, 346, 315, 284, 253, 222, 191, 502, 471, 440, 409, 378, 347, 316, 285,
428 254, 223, 503, 472, 441, 410, 379, 348, 317, 286, 255, 504, 473, 442, 411,
429 380, 349, 318, 287, 505, 474, 443, 412, 381, 350, 319, 506, 475, 444, 413,
430 382, 351, 507, 476, 445, 414, 383, 508, 477, 446, 415, 509, 478, 447, 510,
431 479, 511,
432];
433
434#[rustfmt::skip]
435static mrow_scan_32x16 : [u16; 512] = [
436 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224,
437 240, 256, 272, 288, 304, 320, 336, 352, 368, 384, 400, 416, 432, 448, 464,
438 480, 496, 1, 17, 33, 49, 65, 81, 97, 113, 129, 145, 161, 177, 193,
439 209, 225, 241, 257, 273, 289, 305, 321, 337, 353, 369, 385, 401, 417, 433,
440 449, 465, 481, 497, 2, 18, 34, 50, 66, 82, 98, 114, 130, 146, 162,
441 178, 194, 210, 226, 242, 258, 274, 290, 306, 322, 338, 354, 370, 386, 402,
442 418, 434, 450, 466, 482, 498, 3, 19, 35, 51, 67, 83, 99, 115, 131,
443 147, 163, 179, 195, 211, 227, 243, 259, 275, 291, 307, 323, 339, 355, 371,
444 387, 403, 419, 435, 451, 467, 483, 499, 4, 20, 36, 52, 68, 84, 100,
445 116, 132, 148, 164, 180, 196, 212, 228, 244, 260, 276, 292, 308, 324, 340,
446 356, 372, 388, 404, 420, 436, 452, 468, 484, 500, 5, 21, 37, 53, 69,
447 85, 101, 117, 133, 149, 165, 181, 197, 213, 229, 245, 261, 277, 293, 309,
448 325, 341, 357, 373, 389, 405, 421, 437, 453, 469, 485, 501, 6, 22, 38,
449 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214, 230, 246, 262, 278,
450 294, 310, 326, 342, 358, 374, 390, 406, 422, 438, 454, 470, 486, 502, 7,
451 23, 39, 55, 71, 87, 103, 119, 135, 151, 167, 183, 199, 215, 231, 247,
452 263, 279, 295, 311, 327, 343, 359, 375, 391, 407, 423, 439, 455, 471, 487,
453 503, 8, 24, 40, 56, 72, 88, 104, 120, 136, 152, 168, 184, 200, 216,
454 232, 248, 264, 280, 296, 312, 328, 344, 360, 376, 392, 408, 424, 440, 456,
455 472, 488, 504, 9, 25, 41, 57, 73, 89, 105, 121, 137, 153, 169, 185,
456 201, 217, 233, 249, 265, 281, 297, 313, 329, 345, 361, 377, 393, 409, 425,
457 441, 457, 473, 489, 505, 10, 26, 42, 58, 74, 90, 106, 122, 138, 154,
458 170, 186, 202, 218, 234, 250, 266, 282, 298, 314, 330, 346, 362, 378, 394,
459 410, 426, 442, 458, 474, 490, 506, 11, 27, 43, 59, 75, 91, 107, 123,
460 139, 155, 171, 187, 203, 219, 235, 251, 267, 283, 299, 315, 331, 347, 363,
461 379, 395, 411, 427, 443, 459, 475, 491, 507, 12, 28, 44, 60, 76, 92,
462 108, 124, 140, 156, 172, 188, 204, 220, 236, 252, 268, 284, 300, 316, 332,
463 348, 364, 380, 396, 412, 428, 444, 460, 476, 492, 508, 13, 29, 45, 61,
464 77, 93, 109, 125, 141, 157, 173, 189, 205, 221, 237, 253, 269, 285, 301,
465 317, 333, 349, 365, 381, 397, 413, 429, 445, 461, 477, 493, 509, 14, 30,
466 46, 62, 78, 94, 110, 126, 142, 158, 174, 190, 206, 222, 238, 254, 270,
467 286, 302, 318, 334, 350, 366, 382, 398, 414, 430, 446, 462, 478, 494, 510,
468 15, 31, 47, 63, 79, 95, 111, 127, 143, 159, 175, 191, 207, 223, 239,
469 255, 271, 287, 303, 319, 335, 351, 367, 383, 399, 415, 431, 447, 463, 479,
470 495, 511,
471];
472
473#[rustfmt::skip]
474static mrow_scan_16x32 : [u16; 512] = [
475 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 480,
476 1, 33, 65, 97, 129, 161, 193, 225, 257, 289, 321, 353, 385, 417, 449, 481,
477 2, 34, 66, 98, 130, 162, 194, 226, 258, 290, 322, 354, 386, 418, 450, 482,
478 3, 35, 67, 99, 131, 163, 195, 227, 259, 291, 323, 355, 387, 419, 451, 483,
479 4, 36, 68, 100, 132, 164, 196, 228, 260, 292, 324, 356, 388, 420, 452, 484,
480 5, 37, 69, 101, 133, 165, 197, 229, 261, 293, 325, 357, 389, 421, 453, 485,
481 6, 38, 70, 102, 134, 166, 198, 230, 262, 294, 326, 358, 390, 422, 454, 486,
482 7, 39, 71, 103, 135, 167, 199, 231, 263, 295, 327, 359, 391, 423, 455, 487,
483 8, 40, 72, 104, 136, 168, 200, 232, 264, 296, 328, 360, 392, 424, 456, 488,
484 9, 41, 73, 105, 137, 169, 201, 233, 265, 297, 329, 361, 393, 425, 457, 489,
485 10, 42, 74, 106, 138, 170, 202, 234, 266, 298, 330, 362, 394, 426, 458, 490,
486 11, 43, 75, 107, 139, 171, 203, 235, 267, 299, 331, 363, 395, 427, 459, 491,
487 12, 44, 76, 108, 140, 172, 204, 236, 268, 300, 332, 364, 396, 428, 460, 492,
488 13, 45, 77, 109, 141, 173, 205, 237, 269, 301, 333, 365, 397, 429, 461, 493,
489 14, 46, 78, 110, 142, 174, 206, 238, 270, 302, 334, 366, 398, 430, 462, 494,
490 15, 47, 79, 111, 143, 175, 207, 239, 271, 303, 335, 367, 399, 431, 463, 495,
491 16, 48, 80, 112, 144, 176, 208, 240, 272, 304, 336, 368, 400, 432, 464, 496,
492 17, 49, 81, 113, 145, 177, 209, 241, 273, 305, 337, 369, 401, 433, 465, 497,
493 18, 50, 82, 114, 146, 178, 210, 242, 274, 306, 338, 370, 402, 434, 466, 498,
494 19, 51, 83, 115, 147, 179, 211, 243, 275, 307, 339, 371, 403, 435, 467, 499,
495 20, 52, 84, 116, 148, 180, 212, 244, 276, 308, 340, 372, 404, 436, 468, 500,
496 21, 53, 85, 117, 149, 181, 213, 245, 277, 309, 341, 373, 405, 437, 469, 501,
497 22, 54, 86, 118, 150, 182, 214, 246, 278, 310, 342, 374, 406, 438, 470, 502,
498 23, 55, 87, 119, 151, 183, 215, 247, 279, 311, 343, 375, 407, 439, 471, 503,
499 24, 56, 88, 120, 152, 184, 216, 248, 280, 312, 344, 376, 408, 440, 472, 504,
500 25, 57, 89, 121, 153, 185, 217, 249, 281, 313, 345, 377, 409, 441, 473, 505,
501 26, 58, 90, 122, 154, 186, 218, 250, 282, 314, 346, 378, 410, 442, 474, 506,
502 27, 59, 91, 123, 155, 187, 219, 251, 283, 315, 347, 379, 411, 443, 475, 507,
503 28, 60, 92, 124, 156, 188, 220, 252, 284, 316, 348, 380, 412, 444, 476, 508,
504 29, 61, 93, 125, 157, 189, 221, 253, 285, 317, 349, 381, 413, 445, 477, 509,
505 30, 62, 94, 126, 158, 190, 222, 254, 286, 318, 350, 382, 414, 446, 478, 510,
506 31, 63, 95, 127, 159, 191, 223, 255, 287, 319, 351, 383, 415, 447, 479, 511,
507];
508
509#[rustfmt::skip]
510static mcol_scan_32x16 : [u16; 512] = [
511 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
512 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
513 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
514 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
515 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
516 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
517 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
518 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
519 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
520 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
521 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
522 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
523 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
524 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
525 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
526 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
527 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
528 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
529 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
530 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
531 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
532 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
533 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
534 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
535 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
536 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389,
537 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
538 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
539 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
540 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449,
541 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464,
542 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479,
543 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494,
544 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509,
545 510, 511,
546];
547
548#[rustfmt::skip]
549static mcol_scan_16x32 : [u16; 512] = [
550 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
551 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
552 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
553 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
554 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
555 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
556 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
557 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
558 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
559 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
560 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
561 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
562 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
563 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
564 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
565 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
566 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
567 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
568 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
569 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
570 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
571 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
572 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
573 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
574 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
575 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389,
576 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
577 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
578 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
579 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449,
580 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464,
581 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479,
582 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494,
583 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509,
584 510, 511,
585];
586
587#[rustfmt::skip]
588static default_scan_16x16 : [u16; 256] = [
589 0, 16, 1, 2, 17, 32, 48, 33, 18, 3, 4, 19, 34, 49, 64,
590 80, 65, 50, 35, 20, 5, 6, 21, 36, 51, 66, 81, 96, 112, 97,
591 82, 67, 52, 37, 22, 7, 8, 23, 38, 53, 68, 83, 98, 113, 128,
592 144, 129, 114, 99, 84, 69, 54, 39, 24, 9, 10, 25, 40, 55, 70,
593 85, 100, 115, 130, 145, 160, 176, 161, 146, 131, 116, 101, 86, 71, 56,
594 41, 26, 11, 12, 27, 42, 57, 72, 87, 102, 117, 132, 147, 162, 177,
595 192, 208, 193, 178, 163, 148, 133, 118, 103, 88, 73, 58, 43, 28, 13,
596 14, 29, 44, 59, 74, 89, 104, 119, 134, 149, 164, 179, 194, 209, 224,
597 240, 225, 210, 195, 180, 165, 150, 135, 120, 105, 90, 75, 60, 45, 30,
598 15, 31, 46, 61, 76, 91, 106, 121, 136, 151, 166, 181, 196, 211, 226,
599 241, 242, 227, 212, 197, 182, 167, 152, 137, 122, 107, 92, 77, 62, 47,
600 63, 78, 93, 108, 123, 138, 153, 168, 183, 198, 213, 228, 243, 244, 229,
601 214, 199, 184, 169, 154, 139, 124, 109, 94, 79, 95, 110, 125, 140, 155,
602 170, 185, 200, 215, 230, 245, 246, 231, 216, 201, 186, 171, 156, 141, 126,
603 111, 127, 142, 157, 172, 187, 202, 217, 232, 247, 248, 233, 218, 203, 188,
604 173, 158, 143, 159, 174, 189, 204, 219, 234, 249, 250, 235, 220, 205, 190,
605 175, 191, 206, 221, 236, 251, 252, 237, 222, 207, 223, 238, 253, 254, 239,
606 255,
607];
608
609#[rustfmt::skip]
610static mrow_scan_16x16 : [u16; 256] = [
611 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240,
612 1, 17, 33, 49, 65, 81, 97, 113, 129, 145, 161, 177, 193, 209, 225, 241,
613 2, 18, 34, 50, 66, 82, 98, 114, 130, 146, 162, 178, 194, 210, 226, 242,
614 3, 19, 35, 51, 67, 83, 99, 115, 131, 147, 163, 179, 195, 211, 227, 243,
615 4, 20, 36, 52, 68, 84, 100, 116, 132, 148, 164, 180, 196, 212, 228, 244,
616 5, 21, 37, 53, 69, 85, 101, 117, 133, 149, 165, 181, 197, 213, 229, 245,
617 6, 22, 38, 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214, 230, 246,
618 7, 23, 39, 55, 71, 87, 103, 119, 135, 151, 167, 183, 199, 215, 231, 247,
619 8, 24, 40, 56, 72, 88, 104, 120, 136, 152, 168, 184, 200, 216, 232, 248,
620 9, 25, 41, 57, 73, 89, 105, 121, 137, 153, 169, 185, 201, 217, 233, 249,
621 10, 26, 42, 58, 74, 90, 106, 122, 138, 154, 170, 186, 202, 218, 234, 250,
622 11, 27, 43, 59, 75, 91, 107, 123, 139, 155, 171, 187, 203, 219, 235, 251,
623 12, 28, 44, 60, 76, 92, 108, 124, 140, 156, 172, 188, 204, 220, 236, 252,
624 13, 29, 45, 61, 77, 93, 109, 125, 141, 157, 173, 189, 205, 221, 237, 253,
625 14, 30, 46, 62, 78, 94, 110, 126, 142, 158, 174, 190, 206, 222, 238, 254,
626 15, 31, 47, 63, 79, 95, 111, 127, 143, 159, 175, 191, 207, 223, 239, 255,
627];
628
629#[rustfmt::skip]
630static mcol_scan_16x16 : [u16; 256] = [
631 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
632 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
633 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
634 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
635 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
636 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
637 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
638 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
639 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
640 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
641 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
642 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
643 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
644 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
645 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
646 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
647 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
648 255,
649];
650
651#[rustfmt::skip]
652static mrow_scan_32x32 : [u16; 1024] = [
653 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416,
654 448, 480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864,
655 896, 928, 960, 992, 1, 33, 65, 97, 129, 161, 193, 225, 257, 289,
656 321, 353, 385, 417, 449, 481, 513, 545, 577, 609, 641, 673, 705, 737,
657 769, 801, 833, 865, 897, 929, 961, 993, 2, 34, 66, 98, 130, 162,
658 194, 226, 258, 290, 322, 354, 386, 418, 450, 482, 514, 546, 578, 610,
659 642, 674, 706, 738, 770, 802, 834, 866, 898, 930, 962, 994, 3, 35,
660 67, 99, 131, 163, 195, 227, 259, 291, 323, 355, 387, 419, 451, 483,
661 515, 547, 579, 611, 643, 675, 707, 739, 771, 803, 835, 867, 899, 931,
662 963, 995, 4, 36, 68, 100, 132, 164, 196, 228, 260, 292, 324, 356,
663 388, 420, 452, 484, 516, 548, 580, 612, 644, 676, 708, 740, 772, 804,
664 836, 868, 900, 932, 964, 996, 5, 37, 69, 101, 133, 165, 197, 229,
665 261, 293, 325, 357, 389, 421, 453, 485, 517, 549, 581, 613, 645, 677,
666 709, 741, 773, 805, 837, 869, 901, 933, 965, 997, 6, 38, 70, 102,
667 134, 166, 198, 230, 262, 294, 326, 358, 390, 422, 454, 486, 518, 550,
668 582, 614, 646, 678, 710, 742, 774, 806, 838, 870, 902, 934, 966, 998,
669 7, 39, 71, 103, 135, 167, 199, 231, 263, 295, 327, 359, 391, 423,
670 455, 487, 519, 551, 583, 615, 647, 679, 711, 743, 775, 807, 839, 871,
671 903, 935, 967, 999, 8, 40, 72, 104, 136, 168, 200, 232, 264, 296,
672 328, 360, 392, 424, 456, 488, 520, 552, 584, 616, 648, 680, 712, 744,
673 776, 808, 840, 872, 904, 936, 968, 1000, 9, 41, 73, 105, 137, 169,
674 201, 233, 265, 297, 329, 361, 393, 425, 457, 489, 521, 553, 585, 617,
675 649, 681, 713, 745, 777, 809, 841, 873, 905, 937, 969, 1001, 10, 42,
676 74, 106, 138, 170, 202, 234, 266, 298, 330, 362, 394, 426, 458, 490,
677 522, 554, 586, 618, 650, 682, 714, 746, 778, 810, 842, 874, 906, 938,
678 970, 1002, 11, 43, 75, 107, 139, 171, 203, 235, 267, 299, 331, 363,
679 395, 427, 459, 491, 523, 555, 587, 619, 651, 683, 715, 747, 779, 811,
680 843, 875, 907, 939, 971, 1003, 12, 44, 76, 108, 140, 172, 204, 236,
681 268, 300, 332, 364, 396, 428, 460, 492, 524, 556, 588, 620, 652, 684,
682 716, 748, 780, 812, 844, 876, 908, 940, 972, 1004, 13, 45, 77, 109,
683 141, 173, 205, 237, 269, 301, 333, 365, 397, 429, 461, 493, 525, 557,
684 589, 621, 653, 685, 717, 749, 781, 813, 845, 877, 909, 941, 973, 1005,
685 14, 46, 78, 110, 142, 174, 206, 238, 270, 302, 334, 366, 398, 430,
686 462, 494, 526, 558, 590, 622, 654, 686, 718, 750, 782, 814, 846, 878,
687 910, 942, 974, 1006, 15, 47, 79, 111, 143, 175, 207, 239, 271, 303,
688 335, 367, 399, 431, 463, 495, 527, 559, 591, 623, 655, 687, 719, 751,
689 783, 815, 847, 879, 911, 943, 975, 1007, 16, 48, 80, 112, 144, 176,
690 208, 240, 272, 304, 336, 368, 400, 432, 464, 496, 528, 560, 592, 624,
691 656, 688, 720, 752, 784, 816, 848, 880, 912, 944, 976, 1008, 17, 49,
692 81, 113, 145, 177, 209, 241, 273, 305, 337, 369, 401, 433, 465, 497,
693 529, 561, 593, 625, 657, 689, 721, 753, 785, 817, 849, 881, 913, 945,
694 977, 1009, 18, 50, 82, 114, 146, 178, 210, 242, 274, 306, 338, 370,
695 402, 434, 466, 498, 530, 562, 594, 626, 658, 690, 722, 754, 786, 818,
696 850, 882, 914, 946, 978, 1010, 19, 51, 83, 115, 147, 179, 211, 243,
697 275, 307, 339, 371, 403, 435, 467, 499, 531, 563, 595, 627, 659, 691,
698 723, 755, 787, 819, 851, 883, 915, 947, 979, 1011, 20, 52, 84, 116,
699 148, 180, 212, 244, 276, 308, 340, 372, 404, 436, 468, 500, 532, 564,
700 596, 628, 660, 692, 724, 756, 788, 820, 852, 884, 916, 948, 980, 1012,
701 21, 53, 85, 117, 149, 181, 213, 245, 277, 309, 341, 373, 405, 437,
702 469, 501, 533, 565, 597, 629, 661, 693, 725, 757, 789, 821, 853, 885,
703 917, 949, 981, 1013, 22, 54, 86, 118, 150, 182, 214, 246, 278, 310,
704 342, 374, 406, 438, 470, 502, 534, 566, 598, 630, 662, 694, 726, 758,
705 790, 822, 854, 886, 918, 950, 982, 1014, 23, 55, 87, 119, 151, 183,
706 215, 247, 279, 311, 343, 375, 407, 439, 471, 503, 535, 567, 599, 631,
707 663, 695, 727, 759, 791, 823, 855, 887, 919, 951, 983, 1015, 24, 56,
708 88, 120, 152, 184, 216, 248, 280, 312, 344, 376, 408, 440, 472, 504,
709 536, 568, 600, 632, 664, 696, 728, 760, 792, 824, 856, 888, 920, 952,
710 984, 1016, 25, 57, 89, 121, 153, 185, 217, 249, 281, 313, 345, 377,
711 409, 441, 473, 505, 537, 569, 601, 633, 665, 697, 729, 761, 793, 825,
712 857, 889, 921, 953, 985, 1017, 26, 58, 90, 122, 154, 186, 218, 250,
713 282, 314, 346, 378, 410, 442, 474, 506, 538, 570, 602, 634, 666, 698,
714 730, 762, 794, 826, 858, 890, 922, 954, 986, 1018, 27, 59, 91, 123,
715 155, 187, 219, 251, 283, 315, 347, 379, 411, 443, 475, 507, 539, 571,
716 603, 635, 667, 699, 731, 763, 795, 827, 859, 891, 923, 955, 987, 1019,
717 28, 60, 92, 124, 156, 188, 220, 252, 284, 316, 348, 380, 412, 444,
718 476, 508, 540, 572, 604, 636, 668, 700, 732, 764, 796, 828, 860, 892,
719 924, 956, 988, 1020, 29, 61, 93, 125, 157, 189, 221, 253, 285, 317,
720 349, 381, 413, 445, 477, 509, 541, 573, 605, 637, 669, 701, 733, 765,
721 797, 829, 861, 893, 925, 957, 989, 1021, 30, 62, 94, 126, 158, 190,
722 222, 254, 286, 318, 350, 382, 414, 446, 478, 510, 542, 574, 606, 638,
723 670, 702, 734, 766, 798, 830, 862, 894, 926, 958, 990, 1022, 31, 63,
724 95, 127, 159, 191, 223, 255, 287, 319, 351, 383, 415, 447, 479, 511,
725 543, 575, 607, 639, 671, 703, 735, 767, 799, 831, 863, 895, 927, 959,
726 991, 1023,
727];
728
729#[rustfmt::skip]
730static mcol_scan_32x32 : [u16; 1024] = [
731 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
732 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
733 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
734 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
735 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
736 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
737 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
738 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
739 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
740 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
741 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
742 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
743 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
744 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
745 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
746 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
747 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
748 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
749 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
750 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
751 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
752 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
753 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
754 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
755 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
756 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
757 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
758 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
759 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376,
760 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389,
761 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402,
762 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
763 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
764 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441,
765 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
766 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
767 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
768 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493,
769 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506,
770 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519,
771 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532,
772 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
773 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558,
774 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571,
775 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584,
776 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597,
777 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610,
778 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623,
779 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636,
780 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649,
781 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662,
782 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675,
783 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688,
784 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701,
785 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714,
786 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727,
787 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740,
788 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753,
789 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766,
790 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779,
791 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792,
792 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805,
793 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818,
794 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831,
795 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844,
796 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857,
797 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870,
798 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883,
799 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896,
800 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909,
801 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922,
802 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935,
803 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948,
804 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961,
805 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974,
806 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987,
807 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
808 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
809 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
810];
811
812#[rustfmt::skip]
813static default_scan_32x32 : [u16; 1024] = [
814 0, 32, 1, 2, 33, 64, 96, 65, 34, 3, 4, 35, 66,
815 97, 128, 160, 129, 98, 67, 36, 5, 6, 37, 68, 99, 130,
816 161, 192, 224, 193, 162, 131, 100, 69, 38, 7, 8, 39, 70,
817 101, 132, 163, 194, 225, 256, 288, 257, 226, 195, 164, 133, 102,
818 71, 40, 9, 10, 41, 72, 103, 134, 165, 196, 227, 258, 289,
819 320, 352, 321, 290, 259, 228, 197, 166, 135, 104, 73, 42, 11,
820 12, 43, 74, 105, 136, 167, 198, 229, 260, 291, 322, 353, 384,
821 416, 385, 354, 323, 292, 261, 230, 199, 168, 137, 106, 75, 44,
822 13, 14, 45, 76, 107, 138, 169, 200, 231, 262, 293, 324, 355,
823 386, 417, 448, 480, 449, 418, 387, 356, 325, 294, 263, 232, 201,
824 170, 139, 108, 77, 46, 15, 16, 47, 78, 109, 140, 171, 202,
825 233, 264, 295, 326, 357, 388, 419, 450, 481, 512, 544, 513, 482,
826 451, 420, 389, 358, 327, 296, 265, 234, 203, 172, 141, 110, 79,
827 48, 17, 18, 49, 80, 111, 142, 173, 204, 235, 266, 297, 328,
828 359, 390, 421, 452, 483, 514, 545, 576, 608, 577, 546, 515, 484,
829 453, 422, 391, 360, 329, 298, 267, 236, 205, 174, 143, 112, 81,
830 50, 19, 20, 51, 82, 113, 144, 175, 206, 237, 268, 299, 330,
831 361, 392, 423, 454, 485, 516, 547, 578, 609, 640, 672, 641, 610,
832 579, 548, 517, 486, 455, 424, 393, 362, 331, 300, 269, 238, 207,
833 176, 145, 114, 83, 52, 21, 22, 53, 84, 115, 146, 177, 208,
834 239, 270, 301, 332, 363, 394, 425, 456, 487, 518, 549, 580, 611,
835 642, 673, 704, 736, 705, 674, 643, 612, 581, 550, 519, 488, 457,
836 426, 395, 364, 333, 302, 271, 240, 209, 178, 147, 116, 85, 54,
837 23, 24, 55, 86, 117, 148, 179, 210, 241, 272, 303, 334, 365,
838 396, 427, 458, 489, 520, 551, 582, 613, 644, 675, 706, 737, 768,
839 800, 769, 738, 707, 676, 645, 614, 583, 552, 521, 490, 459, 428,
840 397, 366, 335, 304, 273, 242, 211, 180, 149, 118, 87, 56, 25,
841 26, 57, 88, 119, 150, 181, 212, 243, 274, 305, 336, 367, 398,
842 429, 460, 491, 522, 553, 584, 615, 646, 677, 708, 739, 770, 801,
843 832, 864, 833, 802, 771, 740, 709, 678, 647, 616, 585, 554, 523,
844 492, 461, 430, 399, 368, 337, 306, 275, 244, 213, 182, 151, 120,
845 89, 58, 27, 28, 59, 90, 121, 152, 183, 214, 245, 276, 307,
846 338, 369, 400, 431, 462, 493, 524, 555, 586, 617, 648, 679, 710,
847 741, 772, 803, 834, 865, 896, 928, 897, 866, 835, 804, 773, 742,
848 711, 680, 649, 618, 587, 556, 525, 494, 463, 432, 401, 370, 339,
849 308, 277, 246, 215, 184, 153, 122, 91, 60, 29, 30, 61, 92,
850 123, 154, 185, 216, 247, 278, 309, 340, 371, 402, 433, 464, 495,
851 526, 557, 588, 619, 650, 681, 712, 743, 774, 805, 836, 867, 898,
852 929, 960, 992, 961, 930, 899, 868, 837, 806, 775, 744, 713, 682,
853 651, 620, 589, 558, 527, 496, 465, 434, 403, 372, 341, 310, 279,
854 248, 217, 186, 155, 124, 93, 62, 31, 63, 94, 125, 156, 187,
855 218, 249, 280, 311, 342, 373, 404, 435, 466, 497, 528, 559, 590,
856 621, 652, 683, 714, 745, 776, 807, 838, 869, 900, 931, 962, 993,
857 994, 963, 932, 901, 870, 839, 808, 777, 746, 715, 684, 653, 622,
858 591, 560, 529, 498, 467, 436, 405, 374, 343, 312, 281, 250, 219,
859 188, 157, 126, 95, 127, 158, 189, 220, 251, 282, 313, 344, 375,
860 406, 437, 468, 499, 530, 561, 592, 623, 654, 685, 716, 747, 778,
861 809, 840, 871, 902, 933, 964, 995, 996, 965, 934, 903, 872, 841,
862 810, 779, 748, 717, 686, 655, 624, 593, 562, 531, 500, 469, 438,
863 407, 376, 345, 314, 283, 252, 221, 190, 159, 191, 222, 253, 284,
864 315, 346, 377, 408, 439, 470, 501, 532, 563, 594, 625, 656, 687,
865 718, 749, 780, 811, 842, 873, 904, 935, 966, 997, 998, 967, 936,
866 905, 874, 843, 812, 781, 750, 719, 688, 657, 626, 595, 564, 533,
867 502, 471, 440, 409, 378, 347, 316, 285, 254, 223, 255, 286, 317,
868 348, 379, 410, 441, 472, 503, 534, 565, 596, 627, 658, 689, 720,
869 751, 782, 813, 844, 875, 906, 937, 968, 999, 1000, 969, 938, 907,
870 876, 845, 814, 783, 752, 721, 690, 659, 628, 597, 566, 535, 504,
871 473, 442, 411, 380, 349, 318, 287, 319, 350, 381, 412, 443, 474,
872 505, 536, 567, 598, 629, 660, 691, 722, 753, 784, 815, 846, 877,
873 908, 939, 970, 1001, 1002, 971, 940, 909, 878, 847, 816, 785, 754,
874 723, 692, 661, 630, 599, 568, 537, 506, 475, 444, 413, 382, 351,
875 383, 414, 445, 476, 507, 538, 569, 600, 631, 662, 693, 724, 755,
876 786, 817, 848, 879, 910, 941, 972, 1003, 1004, 973, 942, 911, 880,
877 849, 818, 787, 756, 725, 694, 663, 632, 601, 570, 539, 508, 477,
878 446, 415, 447, 478, 509, 540, 571, 602, 633, 664, 695, 726, 757,
879 788, 819, 850, 881, 912, 943, 974, 1005, 1006, 975, 944, 913, 882,
880 851, 820, 789, 758, 727, 696, 665, 634, 603, 572, 541, 510, 479,
881 511, 542, 573, 604, 635, 666, 697, 728, 759, 790, 821, 852, 883,
882 914, 945, 976, 1007, 1008, 977, 946, 915, 884, 853, 822, 791, 760,
883 729, 698, 667, 636, 605, 574, 543, 575, 606, 637, 668, 699, 730,
884 761, 792, 823, 854, 885, 916, 947, 978, 1009, 1010, 979, 948, 917,
885 886, 855, 824, 793, 762, 731, 700, 669, 638, 607, 639, 670, 701,
886 732, 763, 794, 825, 856, 887, 918, 949, 980, 1011, 1012, 981, 950,
887 919, 888, 857, 826, 795, 764, 733, 702, 671, 703, 734, 765, 796,
888 827, 858, 889, 920, 951, 982, 1013, 1014, 983, 952, 921, 890, 859,
889 828, 797, 766, 735, 767, 798, 829, 860, 891, 922, 953, 984, 1015,
890 1016, 985, 954, 923, 892, 861, 830, 799, 831, 862, 893, 924, 955,
891 986, 1017, 1018, 987, 956, 925, 894, 863, 895, 926, 957, 988, 1019,
892 1020, 989, 958, 927, 959, 990, 1021, 1022, 991, 1023,
893];
894
895const fn invert<const N: usize>(scan: [u16; N]) -> [u16; N] {
896 let mut iscan: [u16; N] = scan;
897 let mut i: usize = 0;
898 while i < N {
899 iscan[scan[i] as usize] = i as u16;
900 i += 1;
901 }
902 iscan
903}
904
905static default_iscan_4x4: [u16; 16] = invert(scan:default_scan_4x4);
906static mrow_iscan_4x4: [u16; 16] = invert(scan:mrow_scan_4x4);
907static mcol_iscan_4x4: [u16; 16] = invert(scan:mcol_scan_4x4);
908static default_iscan_8x4: [u16; 32] = invert(scan:default_scan_8x4);
909static mrow_iscan_8x4: [u16; 32] = invert(scan:mrow_scan_8x4);
910static mcol_iscan_8x4: [u16; 32] = invert(scan:mcol_scan_8x4);
911static default_iscan_4x8: [u16; 32] = invert(scan:default_scan_4x8);
912static mrow_iscan_4x8: [u16; 32] = invert(scan:mrow_scan_4x8);
913static mcol_iscan_4x8: [u16; 32] = invert(scan:mcol_scan_4x8);
914static default_iscan_16x4: [u16; 64] = invert(scan:default_scan_16x4);
915static default_iscan_4x16: [u16; 64] = invert(scan:default_scan_4x16);
916static mcol_iscan_16x4: [u16; 64] = invert(scan:mcol_scan_16x4);
917static mcol_iscan_4x16: [u16; 64] = invert(scan:mcol_scan_4x16);
918static mrow_iscan_16x4: [u16; 64] = invert(scan:mrow_scan_16x4);
919static mrow_iscan_4x16: [u16; 64] = invert(scan:mrow_scan_4x16);
920static default_iscan_32x8: [u16; 256] = invert(scan:default_scan_32x8);
921static default_iscan_8x32: [u16; 256] = invert(scan:default_scan_8x32);
922static mcol_iscan_32x8: [u16; 256] = invert(scan:mcol_scan_32x8);
923static mcol_iscan_8x32: [u16; 256] = invert(scan:mcol_scan_8x32);
924static mrow_iscan_32x8: [u16; 256] = invert(scan:mrow_scan_32x8);
925static mrow_iscan_8x32: [u16; 256] = invert(scan:mrow_scan_8x32);
926static default_iscan_8x8: [u16; 64] = invert(scan:default_scan_8x8);
927static mrow_iscan_8x8: [u16; 64] = invert(scan:mrow_scan_8x8);
928static mcol_iscan_8x8: [u16; 64] = invert(scan:mcol_scan_8x8);
929static default_iscan_16x8: [u16; 128] = invert(scan:default_scan_16x8);
930static default_iscan_8x16: [u16; 128] = invert(scan:default_scan_8x16);
931static mrow_iscan_16x8: [u16; 128] = invert(scan:mrow_scan_16x8);
932static mrow_iscan_8x16: [u16; 128] = invert(scan:mrow_scan_8x16);
933static mcol_iscan_16x8: [u16; 128] = invert(scan:mcol_scan_16x8);
934static mcol_iscan_8x16: [u16; 128] = invert(scan:mcol_scan_8x16);
935static default_iscan_32x16: [u16; 512] = invert(scan:default_scan_32x16);
936static default_iscan_16x32: [u16; 512] = invert(scan:default_scan_16x32);
937static mrow_iscan_32x16: [u16; 512] = invert(scan:mrow_scan_32x16);
938static mrow_iscan_16x32: [u16; 512] = invert(scan:mrow_scan_16x32);
939static mcol_iscan_32x16: [u16; 512] = invert(scan:mcol_scan_32x16);
940static mcol_iscan_16x32: [u16; 512] = invert(scan:mcol_scan_16x32);
941static default_iscan_16x16: [u16; 256] = invert(scan:default_scan_16x16);
942static mrow_iscan_16x16: [u16; 256] = invert(scan:mrow_scan_16x16);
943static mcol_iscan_16x16: [u16; 256] = invert(scan:mcol_scan_16x16);
944static mrow_iscan_32x32: [u16; 1024] = invert(scan:mrow_scan_32x32);
945static mcol_iscan_32x32: [u16; 1024] = invert(scan:mcol_scan_32x32);
946static default_iscan_32x32: [u16; 1024] = invert(scan:default_scan_32x32);
947
948#[rustfmt::skip]
949pub static av1_scan_orders: [[SCAN_ORDER; TX_TYPES]; TxSize::TX_SIZES_ALL] = [
950 [
951 // TX_4X4
952 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
953 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
954 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
955 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
956 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
957 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
958 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
959 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
960 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
961 SCAN_ORDER { scan: &default_scan_4x4, iscan: &default_iscan_4x4 },
962 SCAN_ORDER { scan: &mrow_scan_4x4, iscan: &mrow_iscan_4x4 },
963 SCAN_ORDER { scan: &mcol_scan_4x4, iscan: &mcol_iscan_4x4 },
964 SCAN_ORDER { scan: &mrow_scan_4x4, iscan: &mrow_iscan_4x4 },
965 SCAN_ORDER { scan: &mcol_scan_4x4, iscan: &mcol_iscan_4x4 },
966 SCAN_ORDER { scan: &mrow_scan_4x4, iscan: &mrow_iscan_4x4 },
967 SCAN_ORDER { scan: &mcol_scan_4x4, iscan: &mcol_iscan_4x4 },
968 ],
969 [
970 // TX_8X8
971 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
972 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
973 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
974 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
975 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
976 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
977 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
978 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
979 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
980 SCAN_ORDER { scan: &default_scan_8x8, iscan: &default_iscan_8x8 },
981 SCAN_ORDER { scan: &mrow_scan_8x8, iscan: &mrow_iscan_8x8 },
982 SCAN_ORDER { scan: &mcol_scan_8x8, iscan: &mcol_iscan_8x8 },
983 SCAN_ORDER { scan: &mrow_scan_8x8, iscan: &mrow_iscan_8x8 },
984 SCAN_ORDER { scan: &mcol_scan_8x8, iscan: &mcol_iscan_8x8 },
985 SCAN_ORDER { scan: &mrow_scan_8x8, iscan: &mrow_iscan_8x8 },
986 SCAN_ORDER { scan: &mcol_scan_8x8, iscan: &mcol_iscan_8x8 },
987 ],
988 [
989 // TX_16X16
990 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
991 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
992 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
993 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
994 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
995 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
996 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
997 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
998 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
999 SCAN_ORDER { scan: &default_scan_16x16, iscan: &default_iscan_16x16 },
1000 SCAN_ORDER { scan: &mrow_scan_16x16, iscan: &mrow_iscan_16x16 },
1001 SCAN_ORDER { scan: &mcol_scan_16x16, iscan: &mcol_iscan_16x16 },
1002 SCAN_ORDER { scan: &mrow_scan_16x16, iscan: &mrow_iscan_16x16 },
1003 SCAN_ORDER { scan: &mcol_scan_16x16, iscan: &mcol_iscan_16x16 },
1004 SCAN_ORDER { scan: &mrow_scan_16x16, iscan: &mrow_iscan_16x16 },
1005 SCAN_ORDER { scan: &mcol_scan_16x16, iscan: &mcol_iscan_16x16 },
1006 ],
1007 [
1008 // TX_32X32
1009 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1010 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1011 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1012 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1013 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1014 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1015 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1016 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1017 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1018 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1019 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1020 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1021 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1022 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1023 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1024 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1025 ],
1026 [
1027 // TX_64X64
1028 // Half of the coefficients of tx64 at higher frequencies are set to
1029 // zeros. So tx32's scan order is used.
1030 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1031 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1032 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1033 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1034 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1035 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1036 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1037 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1038 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1039 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1040 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1041 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1042 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1043 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1044 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1045 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1046 ],
1047 [
1048 // TX_4X8
1049 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1050 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1051 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1052 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1053 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1054 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1055 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1056 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1057 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1058 SCAN_ORDER { scan: &default_scan_4x8, iscan: &default_iscan_4x8 },
1059 SCAN_ORDER { scan: &mrow_scan_4x8, iscan: &mrow_iscan_4x8 },
1060 SCAN_ORDER { scan: &mcol_scan_4x8, iscan: &mcol_iscan_4x8 },
1061 SCAN_ORDER { scan: &mrow_scan_4x8, iscan: &mrow_iscan_4x8 },
1062 SCAN_ORDER { scan: &mcol_scan_4x8, iscan: &mcol_iscan_4x8 },
1063 SCAN_ORDER { scan: &mrow_scan_4x8, iscan: &mrow_iscan_4x8 },
1064 SCAN_ORDER { scan: &mcol_scan_4x8, iscan: &mcol_iscan_4x8 },
1065 ],
1066 [
1067 // TX_8X4
1068 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1069 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1070 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1071 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1072 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1073 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1074 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1075 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1076 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1077 SCAN_ORDER { scan: &default_scan_8x4, iscan: &default_iscan_8x4 },
1078 SCAN_ORDER { scan: &mrow_scan_8x4, iscan: &mrow_iscan_8x4 },
1079 SCAN_ORDER { scan: &mcol_scan_8x4, iscan: &mcol_iscan_8x4 },
1080 SCAN_ORDER { scan: &mrow_scan_8x4, iscan: &mrow_iscan_8x4 },
1081 SCAN_ORDER { scan: &mcol_scan_8x4, iscan: &mcol_iscan_8x4 },
1082 SCAN_ORDER { scan: &mrow_scan_8x4, iscan: &mrow_iscan_8x4 },
1083 SCAN_ORDER { scan: &mcol_scan_8x4, iscan: &mcol_iscan_8x4 },
1084 ],
1085 [
1086 // TX_8X16
1087 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1088 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1089 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1090 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1091 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1092 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1093 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1094 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1095 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1096 SCAN_ORDER { scan: &default_scan_8x16, iscan: &default_iscan_8x16 },
1097 SCAN_ORDER { scan: &mrow_scan_8x16, iscan: &mrow_iscan_8x16 },
1098 SCAN_ORDER { scan: &mcol_scan_8x16, iscan: &mcol_iscan_8x16 },
1099 SCAN_ORDER { scan: &mrow_scan_8x16, iscan: &mrow_iscan_8x16 },
1100 SCAN_ORDER { scan: &mcol_scan_8x16, iscan: &mcol_iscan_8x16 },
1101 SCAN_ORDER { scan: &mrow_scan_8x16, iscan: &mrow_iscan_8x16 },
1102 SCAN_ORDER { scan: &mcol_scan_8x16, iscan: &mcol_iscan_8x16 },
1103 ],
1104 [
1105 // TX_16X8
1106 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1107 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1108 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1109 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1110 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1111 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1112 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1113 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1114 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1115 SCAN_ORDER { scan: &default_scan_16x8, iscan: &default_iscan_16x8 },
1116 SCAN_ORDER { scan: &mrow_scan_16x8, iscan: &mrow_iscan_16x8 },
1117 SCAN_ORDER { scan: &mcol_scan_16x8, iscan: &mcol_iscan_16x8 },
1118 SCAN_ORDER { scan: &mrow_scan_16x8, iscan: &mrow_iscan_16x8 },
1119 SCAN_ORDER { scan: &mcol_scan_16x8, iscan: &mcol_iscan_16x8 },
1120 SCAN_ORDER { scan: &mrow_scan_16x8, iscan: &mrow_iscan_16x8 },
1121 SCAN_ORDER { scan: &mcol_scan_16x8, iscan: &mcol_iscan_16x8 },
1122 ],
1123 [
1124 // TX_16X32
1125 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1126 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1127 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1128 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1129 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1130 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1131 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1132 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1133 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1134 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1135 SCAN_ORDER { scan: &mrow_scan_16x32, iscan: &mrow_iscan_16x32 },
1136 SCAN_ORDER { scan: &mcol_scan_16x32, iscan: &mcol_iscan_16x32 },
1137 SCAN_ORDER { scan: &mrow_scan_16x32, iscan: &mrow_iscan_16x32 },
1138 SCAN_ORDER { scan: &mcol_scan_16x32, iscan: &mcol_iscan_16x32 },
1139 SCAN_ORDER { scan: &mrow_scan_16x32, iscan: &mrow_iscan_16x32 },
1140 SCAN_ORDER { scan: &mcol_scan_16x32, iscan: &mcol_iscan_16x32 },
1141 ],
1142 [
1143 // TX_32X16
1144 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1145 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1146 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1147 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1148 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1149 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1150 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1151 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1152 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1153 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1154 SCAN_ORDER { scan: &mrow_scan_32x16, iscan: &mrow_iscan_32x16 },
1155 SCAN_ORDER { scan: &mcol_scan_32x16, iscan: &mcol_iscan_32x16 },
1156 SCAN_ORDER { scan: &mrow_scan_32x16, iscan: &mrow_iscan_32x16 },
1157 SCAN_ORDER { scan: &mcol_scan_32x16, iscan: &mcol_iscan_32x16 },
1158 SCAN_ORDER { scan: &mrow_scan_32x16, iscan: &mrow_iscan_32x16 },
1159 SCAN_ORDER { scan: &mcol_scan_32x16, iscan: &mcol_iscan_32x16 },
1160 ],
1161 [
1162 // TX_32X64
1163 // Half of the coefficients of tx64 at higher frequencies are set to
1164 // zeros. So tx32's scan order is used.
1165 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1166 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1167 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1168 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1169 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1170 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1171 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1172 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1173 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1174 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1175 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1176 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1177 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1178 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1179 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1180 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1181 ],
1182 [
1183 // TX_64X32
1184 // Half of the coefficients of tx64 at higher frequencies are set to
1185 // zeros. So tx32's scan order is used.
1186 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1187 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1188 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1189 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1190 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1191 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1192 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1193 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1194 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1195 SCAN_ORDER { scan: &default_scan_32x32, iscan: &default_iscan_32x32 },
1196 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1197 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1198 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1199 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1200 SCAN_ORDER { scan: &mrow_scan_32x32, iscan: &mrow_iscan_32x32 },
1201 SCAN_ORDER { scan: &mcol_scan_32x32, iscan: &mcol_iscan_32x32 },
1202 ],
1203 [
1204 // TX_4X16
1205 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1206 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1207 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1208 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1209 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1210 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1211 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1212 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1213 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1214 SCAN_ORDER { scan: &default_scan_4x16, iscan: &default_iscan_4x16 },
1215 SCAN_ORDER { scan: &mrow_scan_4x16, iscan: &mrow_iscan_4x16 },
1216 SCAN_ORDER { scan: &mcol_scan_4x16, iscan: &mcol_iscan_4x16 },
1217 SCAN_ORDER { scan: &mrow_scan_4x16, iscan: &mrow_iscan_4x16 },
1218 SCAN_ORDER { scan: &mcol_scan_4x16, iscan: &mcol_iscan_4x16 },
1219 SCAN_ORDER { scan: &mrow_scan_4x16, iscan: &mrow_iscan_4x16 },
1220 SCAN_ORDER { scan: &mcol_scan_4x16, iscan: &mcol_iscan_4x16 },
1221 ],
1222 [
1223 // TX_16X4
1224 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1225 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1226 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1227 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1228 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1229 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1230 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1231 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1232 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1233 SCAN_ORDER { scan: &default_scan_16x4, iscan: &default_iscan_16x4 },
1234 SCAN_ORDER { scan: &mrow_scan_16x4, iscan: &mrow_iscan_16x4 },
1235 SCAN_ORDER { scan: &mcol_scan_16x4, iscan: &mcol_iscan_16x4 },
1236 SCAN_ORDER { scan: &mrow_scan_16x4, iscan: &mrow_iscan_16x4 },
1237 SCAN_ORDER { scan: &mcol_scan_16x4, iscan: &mcol_iscan_16x4 },
1238 SCAN_ORDER { scan: &mrow_scan_16x4, iscan: &mrow_iscan_16x4 },
1239 SCAN_ORDER { scan: &mcol_scan_16x4, iscan: &mcol_iscan_16x4 },
1240 ],
1241 [
1242 // TX_8X32
1243 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1244 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1245 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1246 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1247 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1248 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1249 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1250 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1251 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1252 SCAN_ORDER { scan: &default_scan_8x32, iscan: &default_iscan_8x32 },
1253 SCAN_ORDER { scan: &mrow_scan_8x32, iscan: &mrow_iscan_8x32 },
1254 SCAN_ORDER { scan: &mcol_scan_8x32, iscan: &mcol_iscan_8x32 },
1255 SCAN_ORDER { scan: &mrow_scan_8x32, iscan: &mrow_iscan_8x32 },
1256 SCAN_ORDER { scan: &mcol_scan_8x32, iscan: &mcol_iscan_8x32 },
1257 SCAN_ORDER { scan: &mrow_scan_8x32, iscan: &mrow_iscan_8x32 },
1258 SCAN_ORDER { scan: &mcol_scan_8x32, iscan: &mcol_iscan_8x32 },
1259 ],
1260 [
1261 // TX_32X8
1262 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1263 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1264 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1265 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1266 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1267 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1268 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1269 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1270 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1271 SCAN_ORDER { scan: &default_scan_32x8, iscan: &default_iscan_32x8 },
1272 SCAN_ORDER { scan: &mrow_scan_32x8, iscan: &mrow_iscan_32x8 },
1273 SCAN_ORDER { scan: &mcol_scan_32x8, iscan: &mcol_iscan_32x8 },
1274 SCAN_ORDER { scan: &mrow_scan_32x8, iscan: &mrow_iscan_32x8 },
1275 SCAN_ORDER { scan: &mcol_scan_32x8, iscan: &mcol_iscan_32x8 },
1276 SCAN_ORDER { scan: &mrow_scan_32x8, iscan: &mrow_iscan_32x8 },
1277 SCAN_ORDER { scan: &mcol_scan_32x8, iscan: &mcol_iscan_32x8 },
1278 ],
1279 [
1280 // TX_16X64
1281 // Half of the coefficients of tx64 at higher frequencies are set to
1282 // zeros. So tx32's scan order is used.
1283 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1284 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1285 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1286 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1287 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1288 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1289 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1290 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1291 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1292 SCAN_ORDER { scan: &default_scan_16x32, iscan: &default_iscan_16x32 },
1293 SCAN_ORDER { scan: &mrow_scan_16x32, iscan: &mrow_iscan_16x32 },
1294 SCAN_ORDER { scan: &mcol_scan_16x32, iscan: &mcol_iscan_16x32 },
1295 SCAN_ORDER { scan: &mrow_scan_16x32, iscan: &mrow_iscan_16x32 },
1296 SCAN_ORDER { scan: &mcol_scan_16x32, iscan: &mcol_iscan_16x32 },
1297 SCAN_ORDER { scan: &mrow_scan_16x32, iscan: &mrow_iscan_16x32 },
1298 SCAN_ORDER { scan: &mcol_scan_16x32, iscan: &mcol_iscan_16x32 },
1299 ],
1300 [
1301 // TX_64X16
1302 // Half of the coefficients of tx64 at higher frequencies are set to
1303 // zeros. So tx32's scan order is used.
1304 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1305 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1306 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1307 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1308 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1309 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1310 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1311 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1312 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1313 SCAN_ORDER { scan: &default_scan_32x16, iscan: &default_iscan_32x16 },
1314 SCAN_ORDER { scan: &mrow_scan_32x16, iscan: &mrow_iscan_32x16 },
1315 SCAN_ORDER { scan: &mcol_scan_32x16, iscan: &mcol_iscan_32x16 },
1316 SCAN_ORDER { scan: &mrow_scan_32x16, iscan: &mrow_iscan_32x16 },
1317 SCAN_ORDER { scan: &mcol_scan_32x16, iscan: &mcol_iscan_32x16 },
1318 SCAN_ORDER { scan: &mrow_scan_32x16, iscan: &mrow_iscan_32x16 },
1319 SCAN_ORDER { scan: &mcol_scan_32x16, iscan: &mcol_iscan_32x16 },
1320 ],
1321];
1322