1*c0909341SAndroid Build Coastguard Worker /*
2*c0909341SAndroid Build Coastguard Worker * Copyright © 2018, VideoLAN and dav1d authors
3*c0909341SAndroid Build Coastguard Worker * Copyright © 2018, Two Orioles, LLC
4*c0909341SAndroid Build Coastguard Worker * All rights reserved.
5*c0909341SAndroid Build Coastguard Worker *
6*c0909341SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
7*c0909341SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met:
8*c0909341SAndroid Build Coastguard Worker *
9*c0909341SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, this
10*c0909341SAndroid Build Coastguard Worker * list of conditions and the following disclaimer.
11*c0909341SAndroid Build Coastguard Worker *
12*c0909341SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice,
13*c0909341SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation
14*c0909341SAndroid Build Coastguard Worker * and/or other materials provided with the distribution.
15*c0909341SAndroid Build Coastguard Worker *
16*c0909341SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17*c0909341SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18*c0909341SAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19*c0909341SAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20*c0909341SAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21*c0909341SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22*c0909341SAndroid Build Coastguard Worker * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23*c0909341SAndroid Build Coastguard Worker * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24*c0909341SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25*c0909341SAndroid Build Coastguard Worker * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*c0909341SAndroid Build Coastguard Worker */
27*c0909341SAndroid Build Coastguard Worker
28*c0909341SAndroid Build Coastguard Worker #include "config.h"
29*c0909341SAndroid Build Coastguard Worker
30*c0909341SAndroid Build Coastguard Worker #include "common/attributes.h"
31*c0909341SAndroid Build Coastguard Worker #include "common/intops.h"
32*c0909341SAndroid Build Coastguard Worker
33*c0909341SAndroid Build Coastguard Worker #include "src/scan.h"
34*c0909341SAndroid Build Coastguard Worker #include "src/thread.h"
35*c0909341SAndroid Build Coastguard Worker
36*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_4x4[], 32) = {
37*c0909341SAndroid Build Coastguard Worker 0, 4, 1, 2,
38*c0909341SAndroid Build Coastguard Worker 5, 8, 12, 9,
39*c0909341SAndroid Build Coastguard Worker 6, 3, 7, 10,
40*c0909341SAndroid Build Coastguard Worker 13, 14, 11, 15,
41*c0909341SAndroid Build Coastguard Worker };
42*c0909341SAndroid Build Coastguard Worker
43*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_4x8[], 32) = {
44*c0909341SAndroid Build Coastguard Worker 0, 8, 1, 16,
45*c0909341SAndroid Build Coastguard Worker 9, 2, 24, 17,
46*c0909341SAndroid Build Coastguard Worker 10, 3, 25, 18,
47*c0909341SAndroid Build Coastguard Worker 11, 4, 26, 19,
48*c0909341SAndroid Build Coastguard Worker 12, 5, 27, 20,
49*c0909341SAndroid Build Coastguard Worker 13, 6, 28, 21,
50*c0909341SAndroid Build Coastguard Worker 14, 7, 29, 22,
51*c0909341SAndroid Build Coastguard Worker 15, 30, 23, 31,
52*c0909341SAndroid Build Coastguard Worker };
53*c0909341SAndroid Build Coastguard Worker
54*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_4x16[], 32) = {
55*c0909341SAndroid Build Coastguard Worker 0, 16, 1, 32,
56*c0909341SAndroid Build Coastguard Worker 17, 2, 48, 33,
57*c0909341SAndroid Build Coastguard Worker 18, 3, 49, 34,
58*c0909341SAndroid Build Coastguard Worker 19, 4, 50, 35,
59*c0909341SAndroid Build Coastguard Worker 20, 5, 51, 36,
60*c0909341SAndroid Build Coastguard Worker 21, 6, 52, 37,
61*c0909341SAndroid Build Coastguard Worker 22, 7, 53, 38,
62*c0909341SAndroid Build Coastguard Worker 23, 8, 54, 39,
63*c0909341SAndroid Build Coastguard Worker 24, 9, 55, 40,
64*c0909341SAndroid Build Coastguard Worker 25, 10, 56, 41,
65*c0909341SAndroid Build Coastguard Worker 26, 11, 57, 42,
66*c0909341SAndroid Build Coastguard Worker 27, 12, 58, 43,
67*c0909341SAndroid Build Coastguard Worker 28, 13, 59, 44,
68*c0909341SAndroid Build Coastguard Worker 29, 14, 60, 45,
69*c0909341SAndroid Build Coastguard Worker 30, 15, 61, 46,
70*c0909341SAndroid Build Coastguard Worker 31, 62, 47, 63,
71*c0909341SAndroid Build Coastguard Worker };
72*c0909341SAndroid Build Coastguard Worker
73*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_8x4[], 32) = {
74*c0909341SAndroid Build Coastguard Worker 0, 1, 4, 2, 5, 8, 3, 6,
75*c0909341SAndroid Build Coastguard Worker 9, 12, 7, 10, 13, 16, 11, 14,
76*c0909341SAndroid Build Coastguard Worker 17, 20, 15, 18, 21, 24, 19, 22,
77*c0909341SAndroid Build Coastguard Worker 25, 28, 23, 26, 29, 27, 30, 31,
78*c0909341SAndroid Build Coastguard Worker };
79*c0909341SAndroid Build Coastguard Worker
80*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_8x8[], 32) = {
81*c0909341SAndroid Build Coastguard Worker 0, 8, 1, 2, 9, 16, 24, 17,
82*c0909341SAndroid Build Coastguard Worker 10, 3, 4, 11, 18, 25, 32, 40,
83*c0909341SAndroid Build Coastguard Worker 33, 26, 19, 12, 5, 6, 13, 20,
84*c0909341SAndroid Build Coastguard Worker 27, 34, 41, 48, 56, 49, 42, 35,
85*c0909341SAndroid Build Coastguard Worker 28, 21, 14, 7, 15, 22, 29, 36,
86*c0909341SAndroid Build Coastguard Worker 43, 50, 57, 58, 51, 44, 37, 30,
87*c0909341SAndroid Build Coastguard Worker 23, 31, 38, 45, 52, 59, 60, 53,
88*c0909341SAndroid Build Coastguard Worker 46, 39, 47, 54, 61, 62, 55, 63,
89*c0909341SAndroid Build Coastguard Worker };
90*c0909341SAndroid Build Coastguard Worker
91*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_8x16[], 32) = {
92*c0909341SAndroid Build Coastguard Worker 0, 16, 1, 32, 17, 2, 48, 33,
93*c0909341SAndroid Build Coastguard Worker 18, 3, 64, 49, 34, 19, 4, 80,
94*c0909341SAndroid Build Coastguard Worker 65, 50, 35, 20, 5, 96, 81, 66,
95*c0909341SAndroid Build Coastguard Worker 51, 36, 21, 6, 112, 97, 82, 67,
96*c0909341SAndroid Build Coastguard Worker 52, 37, 22, 7, 113, 98, 83, 68,
97*c0909341SAndroid Build Coastguard Worker 53, 38, 23, 8, 114, 99, 84, 69,
98*c0909341SAndroid Build Coastguard Worker 54, 39, 24, 9, 115, 100, 85, 70,
99*c0909341SAndroid Build Coastguard Worker 55, 40, 25, 10, 116, 101, 86, 71,
100*c0909341SAndroid Build Coastguard Worker 56, 41, 26, 11, 117, 102, 87, 72,
101*c0909341SAndroid Build Coastguard Worker 57, 42, 27, 12, 118, 103, 88, 73,
102*c0909341SAndroid Build Coastguard Worker 58, 43, 28, 13, 119, 104, 89, 74,
103*c0909341SAndroid Build Coastguard Worker 59, 44, 29, 14, 120, 105, 90, 75,
104*c0909341SAndroid Build Coastguard Worker 60, 45, 30, 15, 121, 106, 91, 76,
105*c0909341SAndroid Build Coastguard Worker 61, 46, 31, 122, 107, 92, 77, 62,
106*c0909341SAndroid Build Coastguard Worker 47, 123, 108, 93, 78, 63, 124, 109,
107*c0909341SAndroid Build Coastguard Worker 94, 79, 125, 110, 95, 126, 111, 127,
108*c0909341SAndroid Build Coastguard Worker };
109*c0909341SAndroid Build Coastguard Worker
110*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_8x32[], 32) = {
111*c0909341SAndroid Build Coastguard Worker 0, 32, 1, 64, 33, 2, 96, 65,
112*c0909341SAndroid Build Coastguard Worker 34, 3, 128, 97, 66, 35, 4, 160,
113*c0909341SAndroid Build Coastguard Worker 129, 98, 67, 36, 5, 192, 161, 130,
114*c0909341SAndroid Build Coastguard Worker 99, 68, 37, 6, 224, 193, 162, 131,
115*c0909341SAndroid Build Coastguard Worker 100, 69, 38, 7, 225, 194, 163, 132,
116*c0909341SAndroid Build Coastguard Worker 101, 70, 39, 8, 226, 195, 164, 133,
117*c0909341SAndroid Build Coastguard Worker 102, 71, 40, 9, 227, 196, 165, 134,
118*c0909341SAndroid Build Coastguard Worker 103, 72, 41, 10, 228, 197, 166, 135,
119*c0909341SAndroid Build Coastguard Worker 104, 73, 42, 11, 229, 198, 167, 136,
120*c0909341SAndroid Build Coastguard Worker 105, 74, 43, 12, 230, 199, 168, 137,
121*c0909341SAndroid Build Coastguard Worker 106, 75, 44, 13, 231, 200, 169, 138,
122*c0909341SAndroid Build Coastguard Worker 107, 76, 45, 14, 232, 201, 170, 139,
123*c0909341SAndroid Build Coastguard Worker 108, 77, 46, 15, 233, 202, 171, 140,
124*c0909341SAndroid Build Coastguard Worker 109, 78, 47, 16, 234, 203, 172, 141,
125*c0909341SAndroid Build Coastguard Worker 110, 79, 48, 17, 235, 204, 173, 142,
126*c0909341SAndroid Build Coastguard Worker 111, 80, 49, 18, 236, 205, 174, 143,
127*c0909341SAndroid Build Coastguard Worker 112, 81, 50, 19, 237, 206, 175, 144,
128*c0909341SAndroid Build Coastguard Worker 113, 82, 51, 20, 238, 207, 176, 145,
129*c0909341SAndroid Build Coastguard Worker 114, 83, 52, 21, 239, 208, 177, 146,
130*c0909341SAndroid Build Coastguard Worker 115, 84, 53, 22, 240, 209, 178, 147,
131*c0909341SAndroid Build Coastguard Worker 116, 85, 54, 23, 241, 210, 179, 148,
132*c0909341SAndroid Build Coastguard Worker 117, 86, 55, 24, 242, 211, 180, 149,
133*c0909341SAndroid Build Coastguard Worker 118, 87, 56, 25, 243, 212, 181, 150,
134*c0909341SAndroid Build Coastguard Worker 119, 88, 57, 26, 244, 213, 182, 151,
135*c0909341SAndroid Build Coastguard Worker 120, 89, 58, 27, 245, 214, 183, 152,
136*c0909341SAndroid Build Coastguard Worker 121, 90, 59, 28, 246, 215, 184, 153,
137*c0909341SAndroid Build Coastguard Worker 122, 91, 60, 29, 247, 216, 185, 154,
138*c0909341SAndroid Build Coastguard Worker 123, 92, 61, 30, 248, 217, 186, 155,
139*c0909341SAndroid Build Coastguard Worker 124, 93, 62, 31, 249, 218, 187, 156,
140*c0909341SAndroid Build Coastguard Worker 125, 94, 63, 250, 219, 188, 157, 126,
141*c0909341SAndroid Build Coastguard Worker 95, 251, 220, 189, 158, 127, 252, 221,
142*c0909341SAndroid Build Coastguard Worker 190, 159, 253, 222, 191, 254, 223, 255,
143*c0909341SAndroid Build Coastguard Worker };
144*c0909341SAndroid Build Coastguard Worker
145*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_16x4[], 32) = {
146*c0909341SAndroid Build Coastguard Worker 0, 1, 4, 2, 5, 8, 3, 6, 9, 12, 7, 10, 13, 16, 11, 14,
147*c0909341SAndroid Build Coastguard Worker 17, 20, 15, 18, 21, 24, 19, 22, 25, 28, 23, 26, 29, 32, 27, 30,
148*c0909341SAndroid Build Coastguard Worker 33, 36, 31, 34, 37, 40, 35, 38, 41, 44, 39, 42, 45, 48, 43, 46,
149*c0909341SAndroid Build Coastguard Worker 49, 52, 47, 50, 53, 56, 51, 54, 57, 60, 55, 58, 61, 59, 62, 63,
150*c0909341SAndroid Build Coastguard Worker };
151*c0909341SAndroid Build Coastguard Worker
152*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_16x8[], 32) = {
153*c0909341SAndroid Build Coastguard Worker 0, 1, 8, 2, 9, 16, 3, 10, 17, 24, 4, 11, 18, 25, 32, 5,
154*c0909341SAndroid Build Coastguard Worker 12, 19, 26, 33, 40, 6, 13, 20, 27, 34, 41, 48, 7, 14, 21, 28,
155*c0909341SAndroid Build Coastguard Worker 35, 42, 49, 56, 15, 22, 29, 36, 43, 50, 57, 64, 23, 30, 37, 44,
156*c0909341SAndroid Build Coastguard Worker 51, 58, 65, 72, 31, 38, 45, 52, 59, 66, 73, 80, 39, 46, 53, 60,
157*c0909341SAndroid Build Coastguard Worker 67, 74, 81, 88, 47, 54, 61, 68, 75, 82, 89, 96, 55, 62, 69, 76,
158*c0909341SAndroid Build Coastguard Worker 83, 90, 97, 104, 63, 70, 77, 84, 91, 98, 105, 112, 71, 78, 85, 92,
159*c0909341SAndroid Build Coastguard Worker 99, 106, 113, 120, 79, 86, 93, 100, 107, 114, 121, 87, 94, 101, 108, 115,
160*c0909341SAndroid Build Coastguard Worker 122, 95, 102, 109, 116, 123, 103, 110, 117, 124, 111, 118, 125, 119, 126, 127,
161*c0909341SAndroid Build Coastguard Worker };
162*c0909341SAndroid Build Coastguard Worker
163*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_16x16[], 32) = {
164*c0909341SAndroid Build Coastguard Worker 0, 16, 1, 2, 17, 32, 48, 33, 18, 3, 4, 19, 34, 49, 64, 80,
165*c0909341SAndroid Build Coastguard Worker 65, 50, 35, 20, 5, 6, 21, 36, 51, 66, 81, 96, 112, 97, 82, 67,
166*c0909341SAndroid Build Coastguard Worker 52, 37, 22, 7, 8, 23, 38, 53, 68, 83, 98, 113, 128, 144, 129, 114,
167*c0909341SAndroid Build Coastguard Worker 99, 84, 69, 54, 39, 24, 9, 10, 25, 40, 55, 70, 85, 100, 115, 130,
168*c0909341SAndroid Build Coastguard Worker 145, 160, 176, 161, 146, 131, 116, 101, 86, 71, 56, 41, 26, 11, 12, 27,
169*c0909341SAndroid Build Coastguard Worker 42, 57, 72, 87, 102, 117, 132, 147, 162, 177, 192, 208, 193, 178, 163, 148,
170*c0909341SAndroid Build Coastguard Worker 133, 118, 103, 88, 73, 58, 43, 28, 13, 14, 29, 44, 59, 74, 89, 104,
171*c0909341SAndroid Build Coastguard Worker 119, 134, 149, 164, 179, 194, 209, 224, 240, 225, 210, 195, 180, 165, 150, 135,
172*c0909341SAndroid Build Coastguard Worker 120, 105, 90, 75, 60, 45, 30, 15, 31, 46, 61, 76, 91, 106, 121, 136,
173*c0909341SAndroid Build Coastguard Worker 151, 166, 181, 196, 211, 226, 241, 242, 227, 212, 197, 182, 167, 152, 137, 122,
174*c0909341SAndroid Build Coastguard Worker 107, 92, 77, 62, 47, 63, 78, 93, 108, 123, 138, 153, 168, 183, 198, 213,
175*c0909341SAndroid Build Coastguard Worker 228, 243, 244, 229, 214, 199, 184, 169, 154, 139, 124, 109, 94, 79, 95, 110,
176*c0909341SAndroid Build Coastguard Worker 125, 140, 155, 170, 185, 200, 215, 230, 245, 246, 231, 216, 201, 186, 171, 156,
177*c0909341SAndroid Build Coastguard Worker 141, 126, 111, 127, 142, 157, 172, 187, 202, 217, 232, 247, 248, 233, 218, 203,
178*c0909341SAndroid Build Coastguard Worker 188, 173, 158, 143, 159, 174, 189, 204, 219, 234, 249, 250, 235, 220, 205, 190,
179*c0909341SAndroid Build Coastguard Worker 175, 191, 206, 221, 236, 251, 252, 237, 222, 207, 223, 238, 253, 254, 239, 255,
180*c0909341SAndroid Build Coastguard Worker };
181*c0909341SAndroid Build Coastguard Worker
182*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_16x32[], 32) = {
183*c0909341SAndroid Build Coastguard Worker 0, 32, 1, 64, 33, 2, 96, 65, 34, 3, 128, 97, 66, 35, 4, 160,
184*c0909341SAndroid Build Coastguard Worker 129, 98, 67, 36, 5, 192, 161, 130, 99, 68, 37, 6, 224, 193, 162, 131,
185*c0909341SAndroid Build Coastguard Worker 100, 69, 38, 7, 256, 225, 194, 163, 132, 101, 70, 39, 8, 288, 257, 226,
186*c0909341SAndroid Build Coastguard Worker 195, 164, 133, 102, 71, 40, 9, 320, 289, 258, 227, 196, 165, 134, 103, 72,
187*c0909341SAndroid Build Coastguard Worker 41, 10, 352, 321, 290, 259, 228, 197, 166, 135, 104, 73, 42, 11, 384, 353,
188*c0909341SAndroid Build Coastguard Worker 322, 291, 260, 229, 198, 167, 136, 105, 74, 43, 12, 416, 385, 354, 323, 292,
189*c0909341SAndroid Build Coastguard Worker 261, 230, 199, 168, 137, 106, 75, 44, 13, 448, 417, 386, 355, 324, 293, 262,
190*c0909341SAndroid Build Coastguard Worker 231, 200, 169, 138, 107, 76, 45, 14, 480, 449, 418, 387, 356, 325, 294, 263,
191*c0909341SAndroid Build Coastguard Worker 232, 201, 170, 139, 108, 77, 46, 15, 481, 450, 419, 388, 357, 326, 295, 264,
192*c0909341SAndroid Build Coastguard Worker 233, 202, 171, 140, 109, 78, 47, 16, 482, 451, 420, 389, 358, 327, 296, 265,
193*c0909341SAndroid Build Coastguard Worker 234, 203, 172, 141, 110, 79, 48, 17, 483, 452, 421, 390, 359, 328, 297, 266,
194*c0909341SAndroid Build Coastguard Worker 235, 204, 173, 142, 111, 80, 49, 18, 484, 453, 422, 391, 360, 329, 298, 267,
195*c0909341SAndroid Build Coastguard Worker 236, 205, 174, 143, 112, 81, 50, 19, 485, 454, 423, 392, 361, 330, 299, 268,
196*c0909341SAndroid Build Coastguard Worker 237, 206, 175, 144, 113, 82, 51, 20, 486, 455, 424, 393, 362, 331, 300, 269,
197*c0909341SAndroid Build Coastguard Worker 238, 207, 176, 145, 114, 83, 52, 21, 487, 456, 425, 394, 363, 332, 301, 270,
198*c0909341SAndroid Build Coastguard Worker 239, 208, 177, 146, 115, 84, 53, 22, 488, 457, 426, 395, 364, 333, 302, 271,
199*c0909341SAndroid Build Coastguard Worker 240, 209, 178, 147, 116, 85, 54, 23, 489, 458, 427, 396, 365, 334, 303, 272,
200*c0909341SAndroid Build Coastguard Worker 241, 210, 179, 148, 117, 86, 55, 24, 490, 459, 428, 397, 366, 335, 304, 273,
201*c0909341SAndroid Build Coastguard Worker 242, 211, 180, 149, 118, 87, 56, 25, 491, 460, 429, 398, 367, 336, 305, 274,
202*c0909341SAndroid Build Coastguard Worker 243, 212, 181, 150, 119, 88, 57, 26, 492, 461, 430, 399, 368, 337, 306, 275,
203*c0909341SAndroid Build Coastguard Worker 244, 213, 182, 151, 120, 89, 58, 27, 493, 462, 431, 400, 369, 338, 307, 276,
204*c0909341SAndroid Build Coastguard Worker 245, 214, 183, 152, 121, 90, 59, 28, 494, 463, 432, 401, 370, 339, 308, 277,
205*c0909341SAndroid Build Coastguard Worker 246, 215, 184, 153, 122, 91, 60, 29, 495, 464, 433, 402, 371, 340, 309, 278,
206*c0909341SAndroid Build Coastguard Worker 247, 216, 185, 154, 123, 92, 61, 30, 496, 465, 434, 403, 372, 341, 310, 279,
207*c0909341SAndroid Build Coastguard Worker 248, 217, 186, 155, 124, 93, 62, 31, 497, 466, 435, 404, 373, 342, 311, 280,
208*c0909341SAndroid Build Coastguard Worker 249, 218, 187, 156, 125, 94, 63, 498, 467, 436, 405, 374, 343, 312, 281, 250,
209*c0909341SAndroid Build Coastguard Worker 219, 188, 157, 126, 95, 499, 468, 437, 406, 375, 344, 313, 282, 251, 220, 189,
210*c0909341SAndroid Build Coastguard Worker 158, 127, 500, 469, 438, 407, 376, 345, 314, 283, 252, 221, 190, 159, 501, 470,
211*c0909341SAndroid Build Coastguard Worker 439, 408, 377, 346, 315, 284, 253, 222, 191, 502, 471, 440, 409, 378, 347, 316,
212*c0909341SAndroid Build Coastguard Worker 285, 254, 223, 503, 472, 441, 410, 379, 348, 317, 286, 255, 504, 473, 442, 411,
213*c0909341SAndroid Build Coastguard Worker 380, 349, 318, 287, 505, 474, 443, 412, 381, 350, 319, 506, 475, 444, 413, 382,
214*c0909341SAndroid Build Coastguard Worker 351, 507, 476, 445, 414, 383, 508, 477, 446, 415, 509, 478, 447, 510, 479, 511,
215*c0909341SAndroid Build Coastguard Worker };
216*c0909341SAndroid Build Coastguard Worker
217*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_32x8[], 32) = {
218*c0909341SAndroid Build Coastguard Worker 0, 1, 8, 2, 9, 16, 3, 10, 17, 24, 4, 11, 18, 25, 32, 5, 12, 19, 26, 33, 40, 6, 13, 20, 27, 34, 41, 48, 7, 14, 21, 28,
219*c0909341SAndroid Build Coastguard Worker 35, 42, 49, 56, 15, 22, 29, 36, 43, 50, 57, 64, 23, 30, 37, 44, 51, 58, 65, 72, 31, 38, 45, 52, 59, 66, 73, 80, 39, 46, 53, 60,
220*c0909341SAndroid Build Coastguard Worker 67, 74, 81, 88, 47, 54, 61, 68, 75, 82, 89, 96, 55, 62, 69, 76, 83, 90, 97, 104, 63, 70, 77, 84, 91, 98, 105, 112, 71, 78, 85, 92,
221*c0909341SAndroid Build Coastguard Worker 99, 106, 113, 120, 79, 86, 93, 100, 107, 114, 121, 128, 87, 94, 101, 108, 115, 122, 129, 136, 95, 102, 109, 116, 123, 130, 137, 144, 103, 110, 117, 124,
222*c0909341SAndroid Build Coastguard Worker 131, 138, 145, 152, 111, 118, 125, 132, 139, 146, 153, 160, 119, 126, 133, 140, 147, 154, 161, 168, 127, 134, 141, 148, 155, 162, 169, 176, 135, 142, 149, 156,
223*c0909341SAndroid Build Coastguard Worker 163, 170, 177, 184, 143, 150, 157, 164, 171, 178, 185, 192, 151, 158, 165, 172, 179, 186, 193, 200, 159, 166, 173, 180, 187, 194, 201, 208, 167, 174, 181, 188,
224*c0909341SAndroid Build Coastguard Worker 195, 202, 209, 216, 175, 182, 189, 196, 203, 210, 217, 224, 183, 190, 197, 204, 211, 218, 225, 232, 191, 198, 205, 212, 219, 226, 233, 240, 199, 206, 213, 220,
225*c0909341SAndroid Build Coastguard Worker 227, 234, 241, 248, 207, 214, 221, 228, 235, 242, 249, 215, 222, 229, 236, 243, 250, 223, 230, 237, 244, 251, 231, 238, 245, 252, 239, 246, 253, 247, 254, 255,
226*c0909341SAndroid Build Coastguard Worker };
227*c0909341SAndroid Build Coastguard Worker
228*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_32x16[], 32) = {
229*c0909341SAndroid Build Coastguard Worker 0, 1, 16, 2, 17, 32, 3, 18, 33, 48, 4, 19, 34, 49, 64, 5, 20, 35, 50, 65, 80, 6, 21, 36, 51, 66, 81, 96, 7, 22, 37, 52,
230*c0909341SAndroid Build Coastguard Worker 67, 82, 97, 112, 8, 23, 38, 53, 68, 83, 98, 113, 128, 9, 24, 39, 54, 69, 84, 99, 114, 129, 144, 10, 25, 40, 55, 70, 85, 100, 115, 130,
231*c0909341SAndroid Build Coastguard Worker 145, 160, 11, 26, 41, 56, 71, 86, 101, 116, 131, 146, 161, 176, 12, 27, 42, 57, 72, 87, 102, 117, 132, 147, 162, 177, 192, 13, 28, 43, 58, 73,
232*c0909341SAndroid Build Coastguard Worker 88, 103, 118, 133, 148, 163, 178, 193, 208, 14, 29, 44, 59, 74, 89, 104, 119, 134, 149, 164, 179, 194, 209, 224, 15, 30, 45, 60, 75, 90, 105, 120,
233*c0909341SAndroid Build Coastguard Worker 135, 150, 165, 180, 195, 210, 225, 240, 31, 46, 61, 76, 91, 106, 121, 136, 151, 166, 181, 196, 211, 226, 241, 256, 47, 62, 77, 92, 107, 122, 137, 152,
234*c0909341SAndroid Build Coastguard Worker 167, 182, 197, 212, 227, 242, 257, 272, 63, 78, 93, 108, 123, 138, 153, 168, 183, 198, 213, 228, 243, 258, 273, 288, 79, 94, 109, 124, 139, 154, 169, 184,
235*c0909341SAndroid Build Coastguard Worker 199, 214, 229, 244, 259, 274, 289, 304, 95, 110, 125, 140, 155, 170, 185, 200, 215, 230, 245, 260, 275, 290, 305, 320, 111, 126, 141, 156, 171, 186, 201, 216,
236*c0909341SAndroid Build Coastguard Worker 231, 246, 261, 276, 291, 306, 321, 336, 127, 142, 157, 172, 187, 202, 217, 232, 247, 262, 277, 292, 307, 322, 337, 352, 143, 158, 173, 188, 203, 218, 233, 248,
237*c0909341SAndroid Build Coastguard Worker 263, 278, 293, 308, 323, 338, 353, 368, 159, 174, 189, 204, 219, 234, 249, 264, 279, 294, 309, 324, 339, 354, 369, 384, 175, 190, 205, 220, 235, 250, 265, 280,
238*c0909341SAndroid Build Coastguard Worker 295, 310, 325, 340, 355, 370, 385, 400, 191, 206, 221, 236, 251, 266, 281, 296, 311, 326, 341, 356, 371, 386, 401, 416, 207, 222, 237, 252, 267, 282, 297, 312,
239*c0909341SAndroid Build Coastguard Worker 327, 342, 357, 372, 387, 402, 417, 432, 223, 238, 253, 268, 283, 298, 313, 328, 343, 358, 373, 388, 403, 418, 433, 448, 239, 254, 269, 284, 299, 314, 329, 344,
240*c0909341SAndroid Build Coastguard Worker 359, 374, 389, 404, 419, 434, 449, 464, 255, 270, 285, 300, 315, 330, 345, 360, 375, 390, 405, 420, 435, 450, 465, 480, 271, 286, 301, 316, 331, 346, 361, 376,
241*c0909341SAndroid Build Coastguard Worker 391, 406, 421, 436, 451, 466, 481, 496, 287, 302, 317, 332, 347, 362, 377, 392, 407, 422, 437, 452, 467, 482, 497, 303, 318, 333, 348, 363, 378, 393, 408, 423,
242*c0909341SAndroid Build Coastguard Worker 438, 453, 468, 483, 498, 319, 334, 349, 364, 379, 394, 409, 424, 439, 454, 469, 484, 499, 335, 350, 365, 380, 395, 410, 425, 440, 455, 470, 485, 500, 351, 366,
243*c0909341SAndroid Build Coastguard Worker 381, 396, 411, 426, 441, 456, 471, 486, 501, 367, 382, 397, 412, 427, 442, 457, 472, 487, 502, 383, 398, 413, 428, 443, 458, 473, 488, 503, 399, 414, 429, 444,
244*c0909341SAndroid Build Coastguard Worker 459, 474, 489, 504, 415, 430, 445, 460, 475, 490, 505, 431, 446, 461, 476, 491, 506, 447, 462, 477, 492, 507, 463, 478, 493, 508, 479, 494, 509, 495, 510, 511,
245*c0909341SAndroid Build Coastguard Worker };
246*c0909341SAndroid Build Coastguard Worker
247*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_32x32[], 32) = {
248*c0909341SAndroid Build Coastguard Worker 0, 32, 1, 2, 33, 64, 96, 65, 34, 3, 4, 35, 66, 97, 128, 160, 129, 98, 67, 36, 5, 6, 37, 68, 99, 130, 161, 192, 224, 193, 162, 131,
249*c0909341SAndroid Build Coastguard Worker 100, 69, 38, 7, 8, 39, 70, 101, 132, 163, 194, 225, 256, 288, 257, 226, 195, 164, 133, 102, 71, 40, 9, 10, 41, 72, 103, 134, 165, 196, 227, 258,
250*c0909341SAndroid Build Coastguard Worker 289, 320, 352, 321, 290, 259, 228, 197, 166, 135, 104, 73, 42, 11, 12, 43, 74, 105, 136, 167, 198, 229, 260, 291, 322, 353, 384, 416, 385, 354, 323, 292,
251*c0909341SAndroid Build Coastguard Worker 261, 230, 199, 168, 137, 106, 75, 44, 13, 14, 45, 76, 107, 138, 169, 200, 231, 262, 293, 324, 355, 386, 417, 448, 480, 449, 418, 387, 356, 325, 294, 263,
252*c0909341SAndroid Build Coastguard Worker 232, 201, 170, 139, 108, 77, 46, 15, 16, 47, 78, 109, 140, 171, 202, 233, 264, 295, 326, 357, 388, 419, 450, 481, 512, 544, 513, 482, 451, 420, 389, 358,
253*c0909341SAndroid Build Coastguard Worker 327, 296, 265, 234, 203, 172, 141, 110, 79, 48, 17, 18, 49, 80, 111, 142, 173, 204, 235, 266, 297, 328, 359, 390, 421, 452, 483, 514, 545, 576, 608, 577,
254*c0909341SAndroid Build Coastguard Worker 546, 515, 484, 453, 422, 391, 360, 329, 298, 267, 236, 205, 174, 143, 112, 81, 50, 19, 20, 51, 82, 113, 144, 175, 206, 237, 268, 299, 330, 361, 392, 423,
255*c0909341SAndroid Build Coastguard Worker 454, 485, 516, 547, 578, 609, 640, 672, 641, 610, 579, 548, 517, 486, 455, 424, 393, 362, 331, 300, 269, 238, 207, 176, 145, 114, 83, 52, 21, 22, 53, 84,
256*c0909341SAndroid Build Coastguard Worker 115, 146, 177, 208, 239, 270, 301, 332, 363, 394, 425, 456, 487, 518, 549, 580, 611, 642, 673, 704, 736, 705, 674, 643, 612, 581, 550, 519, 488, 457, 426, 395,
257*c0909341SAndroid Build Coastguard Worker 364, 333, 302, 271, 240, 209, 178, 147, 116, 85, 54, 23, 24, 55, 86, 117, 148, 179, 210, 241, 272, 303, 334, 365, 396, 427, 458, 489, 520, 551, 582, 613,
258*c0909341SAndroid Build Coastguard Worker 644, 675, 706, 737, 768, 800, 769, 738, 707, 676, 645, 614, 583, 552, 521, 490, 459, 428, 397, 366, 335, 304, 273, 242, 211, 180, 149, 118, 87, 56, 25, 26,
259*c0909341SAndroid Build Coastguard Worker 57, 88, 119, 150, 181, 212, 243, 274, 305, 336, 367, 398, 429, 460, 491, 522, 553, 584, 615, 646, 677, 708, 739, 770, 801, 832, 864, 833, 802, 771, 740, 709,
260*c0909341SAndroid Build Coastguard Worker 678, 647, 616, 585, 554, 523, 492, 461, 430, 399, 368, 337, 306, 275, 244, 213, 182, 151, 120, 89, 58, 27, 28, 59, 90, 121, 152, 183, 214, 245, 276, 307,
261*c0909341SAndroid Build Coastguard Worker 338, 369, 400, 431, 462, 493, 524, 555, 586, 617, 648, 679, 710, 741, 772, 803, 834, 865, 896, 928, 897, 866, 835, 804, 773, 742, 711, 680, 649, 618, 587, 556,
262*c0909341SAndroid Build Coastguard Worker 525, 494, 463, 432, 401, 370, 339, 308, 277, 246, 215, 184, 153, 122, 91, 60, 29, 30, 61, 92, 123, 154, 185, 216, 247, 278, 309, 340, 371, 402, 433, 464,
263*c0909341SAndroid Build Coastguard Worker 495, 526, 557, 588, 619, 650, 681, 712, 743, 774, 805, 836, 867, 898, 929, 960, 992, 961, 930, 899, 868, 837, 806, 775, 744, 713, 682, 651, 620, 589, 558, 527,
264*c0909341SAndroid Build Coastguard Worker 496, 465, 434, 403, 372, 341, 310, 279, 248, 217, 186, 155, 124, 93, 62, 31, 63, 94, 125, 156, 187, 218, 249, 280, 311, 342, 373, 404, 435, 466, 497, 528,
265*c0909341SAndroid Build Coastguard Worker 559, 590, 621, 652, 683, 714, 745, 776, 807, 838, 869, 900, 931, 962, 993, 994, 963, 932, 901, 870, 839, 808, 777, 746, 715, 684, 653, 622, 591, 560, 529, 498,
266*c0909341SAndroid Build Coastguard Worker 467, 436, 405, 374, 343, 312, 281, 250, 219, 188, 157, 126, 95, 127, 158, 189, 220, 251, 282, 313, 344, 375, 406, 437, 468, 499, 530, 561, 592, 623, 654, 685,
267*c0909341SAndroid Build Coastguard Worker 716, 747, 778, 809, 840, 871, 902, 933, 964, 995, 996, 965, 934, 903, 872, 841, 810, 779, 748, 717, 686, 655, 624, 593, 562, 531, 500, 469, 438, 407, 376, 345,
268*c0909341SAndroid Build Coastguard Worker 314, 283, 252, 221, 190, 159, 191, 222, 253, 284, 315, 346, 377, 408, 439, 470, 501, 532, 563, 594, 625, 656, 687, 718, 749, 780, 811, 842, 873, 904, 935, 966,
269*c0909341SAndroid Build Coastguard Worker 997, 998, 967, 936, 905, 874, 843, 812, 781, 750, 719, 688, 657, 626, 595, 564, 533, 502, 471, 440, 409, 378, 347, 316, 285, 254, 223, 255, 286, 317, 348, 379,
270*c0909341SAndroid Build Coastguard Worker 410, 441, 472, 503, 534, 565, 596, 627, 658, 689, 720, 751, 782, 813, 844, 875, 906, 937, 968, 999, 1000, 969, 938, 907, 876, 845, 814, 783, 752, 721, 690, 659,
271*c0909341SAndroid Build Coastguard Worker 628, 597, 566, 535, 504, 473, 442, 411, 380, 349, 318, 287, 319, 350, 381, 412, 443, 474, 505, 536, 567, 598, 629, 660, 691, 722, 753, 784, 815, 846, 877, 908,
272*c0909341SAndroid Build Coastguard Worker 939, 970, 1001, 1002, 971, 940, 909, 878, 847, 816, 785, 754, 723, 692, 661, 630, 599, 568, 537, 506, 475, 444, 413, 382, 351, 383, 414, 445, 476, 507, 538, 569,
273*c0909341SAndroid Build Coastguard Worker 600, 631, 662, 693, 724, 755, 786, 817, 848, 879, 910, 941, 972, 1003, 1004, 973, 942, 911, 880, 849, 818, 787, 756, 725, 694, 663, 632, 601, 570, 539, 508, 477,
274*c0909341SAndroid Build Coastguard Worker 446, 415, 447, 478, 509, 540, 571, 602, 633, 664, 695, 726, 757, 788, 819, 850, 881, 912, 943, 974, 1005, 1006, 975, 944, 913, 882, 851, 820, 789, 758, 727, 696,
275*c0909341SAndroid Build Coastguard Worker 665, 634, 603, 572, 541, 510, 479, 511, 542, 573, 604, 635, 666, 697, 728, 759, 790, 821, 852, 883, 914, 945, 976, 1007, 1008, 977, 946, 915, 884, 853, 822, 791,
276*c0909341SAndroid Build Coastguard Worker 760, 729, 698, 667, 636, 605, 574, 543, 575, 606, 637, 668, 699, 730, 761, 792, 823, 854, 885, 916, 947, 978, 1009, 1010, 979, 948, 917, 886, 855, 824, 793, 762,
277*c0909341SAndroid Build Coastguard Worker 731, 700, 669, 638, 607, 639, 670, 701, 732, 763, 794, 825, 856, 887, 918, 949, 980, 1011, 1012, 981, 950, 919, 888, 857, 826, 795, 764, 733, 702, 671, 703, 734,
278*c0909341SAndroid Build Coastguard Worker 765, 796, 827, 858, 889, 920, 951, 982, 1013, 1014, 983, 952, 921, 890, 859, 828, 797, 766, 735, 767, 798, 829, 860, 891, 922, 953, 984, 1015, 1016, 985, 954, 923,
279*c0909341SAndroid Build Coastguard Worker 892, 861, 830, 799, 831, 862, 893, 924, 955, 986, 1017, 1018, 987, 956, 925, 894, 863, 895, 926, 957, 988, 1019, 1020, 989, 958, 927, 959, 990, 1021, 1022, 991, 1023,
280*c0909341SAndroid Build Coastguard Worker };
281*c0909341SAndroid Build Coastguard Worker
282*c0909341SAndroid Build Coastguard Worker const uint16_t *const dav1d_scans[N_RECT_TX_SIZES] = {
283*c0909341SAndroid Build Coastguard Worker [ TX_4X4 ] = scan_4x4,
284*c0909341SAndroid Build Coastguard Worker [ TX_8X8 ] = scan_8x8,
285*c0909341SAndroid Build Coastguard Worker [ TX_16X16] = scan_16x16,
286*c0909341SAndroid Build Coastguard Worker [ TX_32X32] = scan_32x32,
287*c0909341SAndroid Build Coastguard Worker [ TX_64X64] = scan_32x32,
288*c0909341SAndroid Build Coastguard Worker [RTX_4X8 ] = scan_4x8,
289*c0909341SAndroid Build Coastguard Worker [RTX_8X4 ] = scan_8x4,
290*c0909341SAndroid Build Coastguard Worker [RTX_8X16 ] = scan_8x16,
291*c0909341SAndroid Build Coastguard Worker [RTX_16X8 ] = scan_16x8,
292*c0909341SAndroid Build Coastguard Worker [RTX_16X32] = scan_16x32,
293*c0909341SAndroid Build Coastguard Worker [RTX_32X16] = scan_32x16,
294*c0909341SAndroid Build Coastguard Worker [RTX_32X64] = scan_32x32,
295*c0909341SAndroid Build Coastguard Worker [RTX_64X32] = scan_32x32,
296*c0909341SAndroid Build Coastguard Worker [RTX_4X16 ] = scan_4x16,
297*c0909341SAndroid Build Coastguard Worker [RTX_16X4 ] = scan_16x4,
298*c0909341SAndroid Build Coastguard Worker [RTX_8X32 ] = scan_8x32,
299*c0909341SAndroid Build Coastguard Worker [RTX_32X8 ] = scan_32x8,
300*c0909341SAndroid Build Coastguard Worker [RTX_16X64] = scan_16x32,
301*c0909341SAndroid Build Coastguard Worker [RTX_64X16] = scan_32x16,
302*c0909341SAndroid Build Coastguard Worker };
303*c0909341SAndroid Build Coastguard Worker
304*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_4x4[16];
305*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_8x8[64];
306*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_16x16[256];
307*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_32x32[1024];
308*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_4x8[32];
309*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_8x4[32];
310*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_8x16[128];
311*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_16x8[128];
312*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_16x32[512];
313*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_32x16[512];
314*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_4x16[64];
315*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_16x4[64];
316*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_8x32[256];
317*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_32x8[256];
318*c0909341SAndroid Build Coastguard Worker
init_tbl(uint8_t * const last_nonzero_col_from_eob,const uint16_t * const scan,const int w,const int h)319*c0909341SAndroid Build Coastguard Worker static COLD void init_tbl(uint8_t *const last_nonzero_col_from_eob,
320*c0909341SAndroid Build Coastguard Worker const uint16_t *const scan, const int w, const int h)
321*c0909341SAndroid Build Coastguard Worker {
322*c0909341SAndroid Build Coastguard Worker int max_col = 0;
323*c0909341SAndroid Build Coastguard Worker for (int y = 0, n = 0; y < h; y++) {
324*c0909341SAndroid Build Coastguard Worker for (int x = 0; x < w; x++, n++) {
325*c0909341SAndroid Build Coastguard Worker const int rc = scan[n];
326*c0909341SAndroid Build Coastguard Worker const int rcx = rc & (h - 1);
327*c0909341SAndroid Build Coastguard Worker max_col = imax(max_col, rcx);
328*c0909341SAndroid Build Coastguard Worker last_nonzero_col_from_eob[n] = max_col;
329*c0909341SAndroid Build Coastguard Worker }
330*c0909341SAndroid Build Coastguard Worker }
331*c0909341SAndroid Build Coastguard Worker }
332*c0909341SAndroid Build Coastguard Worker
init_internal(void)333*c0909341SAndroid Build Coastguard Worker static COLD void init_internal(void) {
334*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_4x4, scan_4x4, 4, 4);
335*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_8x8, scan_8x8, 8, 8);
336*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_16x16, scan_16x16, 16, 16);
337*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_32x32, scan_32x32, 32, 32);
338*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_4x8, scan_4x8, 4, 8);
339*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_8x4, scan_8x4, 8, 4);
340*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_8x16, scan_8x16, 8, 16);
341*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_16x8, scan_16x8, 16, 8);
342*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_16x32, scan_16x32, 16, 32);
343*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_32x16, scan_32x16, 32, 16);
344*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_4x16, scan_4x16, 4, 16);
345*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_16x4, scan_16x4, 16, 4);
346*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_8x32, scan_8x32, 8, 32);
347*c0909341SAndroid Build Coastguard Worker init_tbl(last_nonzero_col_from_eob_32x8, scan_32x8, 32, 8);
348*c0909341SAndroid Build Coastguard Worker }
349*c0909341SAndroid Build Coastguard Worker
dav1d_init_last_nonzero_col_from_eob_tables(void)350*c0909341SAndroid Build Coastguard Worker COLD void dav1d_init_last_nonzero_col_from_eob_tables(void) {
351*c0909341SAndroid Build Coastguard Worker static pthread_once_t initted = PTHREAD_ONCE_INIT;
352*c0909341SAndroid Build Coastguard Worker pthread_once(&initted, init_internal);
353*c0909341SAndroid Build Coastguard Worker }
354*c0909341SAndroid Build Coastguard Worker
355*c0909341SAndroid Build Coastguard Worker const uint8_t *const dav1d_last_nonzero_col_from_eob[N_RECT_TX_SIZES] = {
356*c0909341SAndroid Build Coastguard Worker [ TX_4X4 ] = last_nonzero_col_from_eob_4x4,
357*c0909341SAndroid Build Coastguard Worker [ TX_8X8 ] = last_nonzero_col_from_eob_8x8,
358*c0909341SAndroid Build Coastguard Worker [ TX_16X16] = last_nonzero_col_from_eob_16x16,
359*c0909341SAndroid Build Coastguard Worker [ TX_32X32] = last_nonzero_col_from_eob_32x32,
360*c0909341SAndroid Build Coastguard Worker [ TX_64X64] = last_nonzero_col_from_eob_32x32,
361*c0909341SAndroid Build Coastguard Worker [RTX_4X8 ] = last_nonzero_col_from_eob_4x8,
362*c0909341SAndroid Build Coastguard Worker [RTX_8X4 ] = last_nonzero_col_from_eob_8x4,
363*c0909341SAndroid Build Coastguard Worker [RTX_8X16 ] = last_nonzero_col_from_eob_8x16,
364*c0909341SAndroid Build Coastguard Worker [RTX_16X8 ] = last_nonzero_col_from_eob_16x8,
365*c0909341SAndroid Build Coastguard Worker [RTX_16X32] = last_nonzero_col_from_eob_16x32,
366*c0909341SAndroid Build Coastguard Worker [RTX_32X16] = last_nonzero_col_from_eob_32x16,
367*c0909341SAndroid Build Coastguard Worker [RTX_32X64] = last_nonzero_col_from_eob_32x32,
368*c0909341SAndroid Build Coastguard Worker [RTX_64X32] = last_nonzero_col_from_eob_32x32,
369*c0909341SAndroid Build Coastguard Worker [RTX_4X16 ] = last_nonzero_col_from_eob_4x16,
370*c0909341SAndroid Build Coastguard Worker [RTX_16X4 ] = last_nonzero_col_from_eob_16x4,
371*c0909341SAndroid Build Coastguard Worker [RTX_8X32 ] = last_nonzero_col_from_eob_8x32,
372*c0909341SAndroid Build Coastguard Worker [RTX_32X8 ] = last_nonzero_col_from_eob_32x8,
373*c0909341SAndroid Build Coastguard Worker [RTX_16X64] = last_nonzero_col_from_eob_16x32,
374*c0909341SAndroid Build Coastguard Worker [RTX_64X16] = last_nonzero_col_from_eob_32x16,
375*c0909341SAndroid Build Coastguard Worker };
376