1 /*
2  * Copyright (c) 2016, Alliance for Open Media. All rights reserved
3  *
4  * This source code is subject to the terms of the BSD 2 Clause License and
5  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6  * was not distributed with this source code in the LICENSE file, you can
7  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8  * Media Patent License 1.0 was not distributed with this source code in the
9  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10  */
11 
12 #ifndef AV1_COMMON_COMMON_DATA_H_
13 #define AV1_COMMON_COMMON_DATA_H_
14 
15 #include "av1/common/enums.h"
16 #include "aom/aom_integer.h"
17 #include "aom_dsp/aom_dsp_common.h"
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #if CONFIG_EXT_PARTITION
24 #define IF_EXT_PARTITION(...) __VA_ARGS__,
25 #else
26 #define IF_EXT_PARTITION(...)
27 #endif
28 
29 // Log 2 conversion lookup tables for block width and height
30 static const uint8_t b_width_log2_lookup[BLOCK_SIZES_ALL] = {
31 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
32   0, 0,
33   0,
34 #endif
35   0, 0,
36   1, 1,
37   1, 2,
38   2, 2,
39   3, 3,
40   3, 4,
41   4, IF_EXT_PARTITION(4, 5, 5) 0,
42   2, 1,
43   3, 2,
44   4, IF_EXT_PARTITION(3, 5)
45 };
46 static const uint8_t b_height_log2_lookup[BLOCK_SIZES_ALL] = {
47 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
48   0, 0,
49   0,
50 #endif
51   0, 1,
52   0, 1,
53   2, 1,
54   2, 3,
55   2, 3,
56   4, 3,
57   4, IF_EXT_PARTITION(5, 4, 5) 2,
58   0, 3,
59   1, 4,
60   2, IF_EXT_PARTITION(5, 3)
61 };
62 // Log 2 conversion lookup tables for modeinfo width and height
63 static const uint8_t mi_width_log2_lookup[BLOCK_SIZES_ALL] = {
64 #if CONFIG_CB4X4
65 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
66   0, 0,
67   0,
68 #endif
69   0, 0,
70   1, 1,
71   1, 2,
72   2, 2,
73   3, 3,
74   3, 4,
75   4, IF_EXT_PARTITION(4, 5, 5) 0,
76   2, 1,
77   3, 2,
78   4, IF_EXT_PARTITION(3, 5)
79 #else  // CONFIG_CB4X4
80   0, 0,
81   0, 0,
82   0, 1,
83   1, 1,
84   2, 2,
85   2, 3,
86   3, IF_EXT_PARTITION(3, 4, 4) 0,
87   1, 0,
88   2, 1,
89   3, IF_EXT_PARTITION(2, 4)
90 #endif
91 };
92 static const uint8_t mi_height_log2_lookup[BLOCK_SIZES_ALL] = {
93 #if CONFIG_CB4X4
94 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
95   0, 0,
96   0,
97 #endif
98   0, 1,
99   0, 1,
100   2, 1,
101   2, 3,
102   2, 3,
103   4, 3,
104   4, IF_EXT_PARTITION(5, 4, 5) 2,
105   0, 3,
106   1, 4,
107   2, IF_EXT_PARTITION(5, 3)
108 #else  // CONFIG_CB4X4
109   0, 0,
110   0, 0,
111   1, 0,
112   1, 2,
113   1, 2,
114   3, 2,
115   3, IF_EXT_PARTITION(4, 3, 4) 1,
116   0, 2,
117   0, 3,
118   1, IF_EXT_PARTITION(2, 4)
119 #endif
120 };
121 
122 /* clang-format off */
123 static const uint8_t mi_size_wide[BLOCK_SIZES_ALL] = {
124 #if CONFIG_CB4X4
125 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
126   1, 1, 1,
127 #endif
128   1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16,
129   IF_EXT_PARTITION(16, 32, 32)  1, 4, 2, 8, 4, 16, IF_EXT_PARTITION(8, 32)
130 #else  // CONFIG_CB4X4
131   1, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, IF_EXT_PARTITION(8, 16, 16) 1, 2, 1, 4,
132   2, 8, IF_EXT_PARTITION(4, 16)
133 #endif
134 };
135 static const uint8_t mi_size_high[BLOCK_SIZES_ALL] = {
136 #if CONFIG_CB4X4
137 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
138   1, 1, 1,
139 #endif
140   1, 2, 1, 2, 4, 2, 4, 8, 4, 8, 16, 8, 16,
141   IF_EXT_PARTITION(32, 16, 32)  4, 1, 8, 2, 16, 4, IF_EXT_PARTITION(32, 8)
142 #else  // CONFIG_CB4X4
143   1, 1, 1, 1, 2, 1, 2, 4, 2, 4, 8, 4, 8, IF_EXT_PARTITION(16, 8, 16) 2, 1, 4, 1,
144   8, 2, IF_EXT_PARTITION(16, 4)
145 #endif
146 };
147 /* clang-format on */
148 
149 // Width/height lookup tables in units of various block sizes
150 static const uint8_t block_size_wide[BLOCK_SIZES_ALL] = {
151 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
152   2,  2,
153   4,
154 #endif
155   4,  4,
156   8,  8,
157   8,  16,
158   16, 16,
159   32, 32,
160   32, 64,
161   64, IF_EXT_PARTITION(64, 128, 128) 4,
162   16, 8,
163   32, 16,
164   64, IF_EXT_PARTITION(32, 128)
165 };
166 
167 static const uint8_t block_size_high[BLOCK_SIZES_ALL] = {
168 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
169   2,  4,
170   2,
171 #endif
172   4,  8,
173   4,  8,
174   16, 8,
175   16, 32,
176   16, 32,
177   64, 32,
178   64, IF_EXT_PARTITION(128, 64, 128) 16,
179   4,  32,
180   8,  64,
181   16, IF_EXT_PARTITION(128, 32)
182 };
183 
184 static const uint8_t num_4x4_blocks_wide_lookup[BLOCK_SIZES_ALL] = {
185 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
186   1,  1,
187   1,
188 #endif
189   1,  1,
190   2,  2,
191   2,  4,
192   4,  4,
193   8,  8,
194   8,  16,
195   16, IF_EXT_PARTITION(16, 32, 32) 1,
196   4,  2,
197   8,  4,
198   16, IF_EXT_PARTITION(8, 32)
199 };
200 static const uint8_t num_4x4_blocks_high_lookup[BLOCK_SIZES_ALL] = {
201 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
202   1,  1,
203   1,
204 #endif
205   1,  2,
206   1,  2,
207   4,  2,
208   4,  8,
209   4,  8,
210   16, 8,
211   16, IF_EXT_PARTITION(32, 16, 32) 4,
212   1,  8,
213   2,  16,
214   4,  IF_EXT_PARTITION(32, 8)
215 };
216 static const uint8_t num_8x8_blocks_wide_lookup[BLOCK_SIZES_ALL] = {
217 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
218   1, 1,
219   1,
220 #endif
221   1, 1,
222   1, 1,
223   1, 2,
224   2, 2,
225   4, 4,
226   4, 8,
227   8, IF_EXT_PARTITION(8, 16, 16) 1,
228   2, 1,
229   4, 2,
230   8, IF_EXT_PARTITION(4, 16)
231 };
232 static const uint8_t num_8x8_blocks_high_lookup[BLOCK_SIZES_ALL] = {
233 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
234   1, 1,
235   1,
236 #endif
237   1, 1,
238   1, 1,
239   2, 1,
240   2, 4,
241   2, 4,
242   8, 4,
243   8, IF_EXT_PARTITION(16, 8, 16) 2,
244   1, 4,
245   1, 8,
246   2, IF_EXT_PARTITION(16, 4)
247 };
248 static const uint8_t num_16x16_blocks_wide_lookup[BLOCK_SIZES_ALL] = {
249 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
250   1, 1,
251   1,
252 #endif
253   1, 1,
254   1, 1,
255   1, 1,
256   1, 1,
257   2, 2,
258   2, 4,
259   4, IF_EXT_PARTITION(4, 8, 8) 1,
260   1, 1,
261   2, 2,
262   4, IF_EXT_PARTITION(2, 8)
263 };
264 static const uint8_t num_16x16_blocks_high_lookup[BLOCK_SIZES_ALL] = {
265 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
266   1, 1,
267   1,
268 #endif
269   1, 1,
270   1, 1,
271   1, 1,
272   1, 2,
273   1, 2,
274   4, 2,
275   4, IF_EXT_PARTITION(8, 4, 8) 1,
276   1, 2,
277   1, 4,
278   2, IF_EXT_PARTITION(8, 2)
279 };
280 
281 // AOMMIN(3, AOMMIN(b_width_log2(bsize), b_height_log2(bsize)))
282 static const uint8_t size_group_lookup[BLOCK_SIZES_ALL] = {
283 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
284   0, 0,
285   0,
286 #endif
287   0, 0,
288   0, 1,
289   1, 1,
290   2, 2,
291   2, 3,
292   3, 3,
293   3, IF_EXT_PARTITION(3, 3, 3) 0,
294   0, 1,
295   1, 2,
296   2, IF_EXT_PARTITION(3, 3)
297 };
298 
299 static const uint8_t num_pels_log2_lookup[BLOCK_SIZES_ALL] = {
300 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
301   2,  3,
302   3,
303 #endif
304   4,  5,
305   5,  6,
306   7,  7,
307   8,  9,
308   9,  10,
309   11, 11,
310   12, IF_EXT_PARTITION(13, 13, 14) 6,
311   6,  8,
312   8,  10,
313   10, IF_EXT_PARTITION(12, 12)
314 };
315 
316 /* clang-format off */
317 #if CONFIG_EXT_PARTITION_TYPES
318 static const BLOCK_SIZE subsize_lookup[EXT_PARTITION_TYPES][BLOCK_SIZES_ALL] =
319 #else
320 static const BLOCK_SIZE subsize_lookup[PARTITION_TYPES][BLOCK_SIZES_ALL] =
321 #endif  // CONFIG_EXT_PARTITION_TYPES
322 {
323   {     // PARTITION_NONE
324 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
325     // 2X2,        2X4,           4X2,
326     BLOCK_2X2,     BLOCK_2X4,     BLOCK_4X2,
327 #endif
328     //                            4X4
329                                   BLOCK_4X4,
330     // 4X8,        8X4,           8X8
331     BLOCK_4X8,     BLOCK_8X4,     BLOCK_8X8,
332     // 8X16,       16X8,          16X16
333     BLOCK_8X16,    BLOCK_16X8,    BLOCK_16X16,
334     // 16X32,      32X16,         32X32
335     BLOCK_16X32,   BLOCK_32X16,   BLOCK_32X32,
336     // 32X64,      64X32,         64X64
337     BLOCK_32X64,   BLOCK_64X32,   BLOCK_64X64,
338 #if CONFIG_EXT_PARTITION
339     // 64x128,     128x64,        128x128
340     BLOCK_64X128,  BLOCK_128X64,  BLOCK_128X128,
341 #endif  // CONFIG_EXT_PARTITION
342     // 4X16,       16X4,          8X32
343     BLOCK_4X16,    BLOCK_16X4,    BLOCK_8X32,
344     // 32X8,       16X64,         64X16
345     BLOCK_32X8,    BLOCK_16X64,   BLOCK_64X16,
346 #if CONFIG_EXT_PARTITION
347     // 32x128,     128x32
348     BLOCK_32X128,  BLOCK_128X32
349 #endif  // CONFIG_EXT_PARTITION
350   }, {  // PARTITION_HORZ
351 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
352     // 2X2,        2X4,           4X2,
353     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
354     //                            4X4
355                                   BLOCK_4X2,
356 #else
357     //                            4X4
358                                   BLOCK_INVALID,
359 #endif
360     // 4X8,        8X4,           8X8
361     BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
362     // 8X16,       16X8,          16X16
363     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
364     // 16X32,      32X16,         32X32
365     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
366     // 32X64,      64X32,         64X64
367     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
368 #if CONFIG_EXT_PARTITION
369     // 64x128,     128x64,        128x128
370     BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
371 #endif  // CONFIG_EXT_PARTITION
372     // 4X16,       16X4,          8X32
373     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
374     // 32X8,       16X64,         64X16
375     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
376 #if CONFIG_EXT_PARTITION
377     // 32x128,     128x32
378     BLOCK_INVALID, BLOCK_INVALID
379 #endif  // CONFIG_EXT_PARTITION
380   }, {  // PARTITION_VERT
381 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
382     // 2X2,        2X4,           4X2,
383     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
384     //                            4X4
385                                   BLOCK_2X4,
386 #else
387     //                            4X4
388                                   BLOCK_INVALID,
389 #endif
390     // 4X8,        8X4,           8X8
391     BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
392     // 8X16,       16X8,          16X16
393     BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
394     // 16X32,      32X16,         32X32
395     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
396     // 32X64,      64X32,         64X64
397     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
398 #if CONFIG_EXT_PARTITION
399     // 64x128,     128x64,        128x128
400     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
401 #endif  // CONFIG_EXT_PARTITION
402     // 4X16,       16X4,          8X32
403     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
404     // 32X8,       16X64,         64X16
405     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
406 #if CONFIG_EXT_PARTITION
407     // 32x128,     128x32
408     BLOCK_INVALID, BLOCK_INVALID
409 #endif  // CONFIG_EXT_PARTITION
410   }, {  // PARTITION_SPLIT
411 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
412     // 2X2,        2X4,           4X2,
413     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
414 #endif
415     //                            4X4
416                                   BLOCK_INVALID,
417     // 4X8,        8X4,           8X8
418     BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X4,
419     // 8X16,       16X8,          16X16
420     BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X8,
421     // 16X32,      32X16,         32X32
422     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X16,
423     // 32X64,      64X32,         64X64
424     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X32,
425 #if CONFIG_EXT_PARTITION
426     // 64x128,     128x64,        128x128
427     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X64,
428 #endif  // CONFIG_EXT_PARTITION
429     // 4X16,       16X4,          8X32
430     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
431     // 32X8,       16X64,         64X16
432     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
433 #if CONFIG_EXT_PARTITION
434     // 32x128,     128x32
435     BLOCK_INVALID, BLOCK_INVALID
436 #endif  // CONFIG_EXT_PARTITION
437 #if CONFIG_EXT_PARTITION_TYPES
438   }, {  // PARTITION_HORZ_A
439 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
440     // 2X2,        2X4,           4X2,
441     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
442 #endif
443     //                            4X4
444                                   BLOCK_INVALID,
445     // 4X8,        8X4,           8X8
446     BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
447     // 8X16,       16X8,          16X16
448     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
449     // 16X32,      32X16,         32X32
450     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
451     // 32X64,      64X32,         64X64
452     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
453 #if CONFIG_EXT_PARTITION
454     // 64x128,     128x64,        128x128
455     BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
456 #endif  // CONFIG_EXT_PARTITION
457     // 4X16,       16X4,          8X32
458     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
459     // 32X8,       16X64,         64X16
460     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
461 #if CONFIG_EXT_PARTITION
462     // 32x128,     128x32
463     BLOCK_INVALID, BLOCK_INVALID
464 #endif  // CONFIG_EXT_PARTITION
465   }, {  // PARTITION_HORZ_B
466 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
467     // 2X2,        2X4,           4X2,
468     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
469 #endif
470     //                            4X4
471                                   BLOCK_INVALID,
472     // 4X8,        8X4,           8X8
473     BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
474     // 8X16,       16X8,          16X16
475     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
476     // 16X32,      32X16,         32X32
477     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
478     // 32X64,      64X32,         64X64
479     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
480 #if CONFIG_EXT_PARTITION
481     // 64x128,     128x64,        128x128
482     BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
483 #endif  // CONFIG_EXT_PARTITION
484     // 4X16,       16X4,          8X32
485     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
486     // 32X8,       16X64,         64X16
487     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
488 #if CONFIG_EXT_PARTITION
489     // 32x128,     128x32
490     BLOCK_INVALID, BLOCK_INVALID
491 #endif  // CONFIG_EXT_PARTITION
492   }, {  // PARTITION_VERT_A
493 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
494     // 2X2,        2X4,           4X2,
495     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
496 #endif
497     //                            4X4
498                                   BLOCK_INVALID,
499     // 4X8,        8X4,           8X8
500     BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
501     // 8X16,       16X8,          16X16
502     BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
503     // 16X32,      32X16,         32X32
504     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
505     // 32X64,      64X32,         64X64
506     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
507 #if CONFIG_EXT_PARTITION
508     // 64x128,     128x64,        128x128
509     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
510 #endif  // CONFIG_EXT_PARTITION
511     // 4X16,       16X4,          8X32
512     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
513     // 32X8,       16X64,         64X16
514     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
515 #if CONFIG_EXT_PARTITION
516     // 32x128,     128x32
517     BLOCK_INVALID, BLOCK_INVALID
518 #endif  // CONFIG_EXT_PARTITION
519   }, {  // PARTITION_VERT_B
520 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
521     // 2X2,        2X4,           4X2,
522     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
523 #endif
524     //                            4X4
525                                   BLOCK_INVALID,
526     // 4X8,        8X4,           8X8
527     BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
528     // 8X16,       16X8,          16X16
529     BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
530     // 16X32,      32X16,         32X32
531     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
532     // 32X64,      64X32,         64X64
533     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
534 #if CONFIG_EXT_PARTITION
535     // 64x128,     128x64,        128x128
536     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
537 #endif  // CONFIG_EXT_PARTITION
538     // 4X16,       16X4,          8X32
539     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
540     // 32X8,       16X64,         64X16
541     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
542 #if CONFIG_EXT_PARTITION
543     // 32x128,     128x32
544     BLOCK_INVALID, BLOCK_INVALID
545 #endif  // CONFIG_EXT_PARTITION
546   }, {  // PARTITION_HORZ_4
547 #if CONFIG_CB4X4
548     // 2X2,        2X4,           4X2,
549     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
550     //                            4X4
551                                   BLOCK_INVALID,
552 #else
553     //                            4X4
554                                   BLOCK_INVALID,
555 #endif
556     // 4X8,        8X4,           8X8
557     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
558     // 8X16,       16X8,          16X16
559     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X4,
560     // 16X32,      32X16,         32X32
561     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X8,
562     // 32X64,      64X32,         64X64
563     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X16,
564 #if CONFIG_EXT_PARTITION
565     // 64x128,     128x64,        128x128
566     BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X32,
567 #endif  // CONFIG_EXT_PARTITION
568     // 4X16,       16X4,          8X32
569     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
570     // 32X8,       16X64,         64X16
571     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
572 #if CONFIG_EXT_PARTITION
573     // 32x128,     128x32
574     BLOCK_INVALID, BLOCK_INVALID
575 #endif  // CONFIG_EXT_PARTITION
576   }, {  // PARTITION_VERT_4
577 #if CONFIG_CB4X4
578     // 2X2,        2X4,           4X2,
579     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
580     //                            4X4
581                                   BLOCK_INVALID,
582 #else
583     //                            4X4
584                                   BLOCK_INVALID,
585 #endif
586     // 4X8,        8X4,           8X8
587     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
588     // 8X16,       16X8,          16X16
589     BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X16,
590     // 16X32,      32X16,         32X32
591     BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X32,
592     // 32X64,      64X32,         64X64
593     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X64,
594 #if CONFIG_EXT_PARTITION
595     // 64x128,     128x64,        128x128
596     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X128,
597 #endif  // CONFIG_EXT_PARTITION
598     // 4X16,       16X4,          8X32
599     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
600     // 32X8,       16X64,         64X16
601     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
602 #if CONFIG_EXT_PARTITION
603     // 32x128,     128x32
604     BLOCK_INVALID, BLOCK_INVALID
605 #endif  // CONFIG_EXT_PARTITION
606 #endif  // CONFIG_EXT_PARTITION_TYPES
607   }
608 };
609 
610 static const TX_SIZE max_txsize_lookup[BLOCK_SIZES_ALL] = {
611   // 2X2,    2X4,      4X2,
612 #if CONFIG_CHROMA_2X2
613   TX_2X2,    TX_2X2,   TX_2X2,
614 #elif CONFIG_CHROMA_SUB8X8
615   TX_4X4,    TX_4X4,   TX_4X4,
616 #endif
617   //                   4X4
618                        TX_4X4,
619   // 4X8,    8X4,      8X8
620   TX_4X4,    TX_4X4,   TX_8X8,
621   // 8X16,   16X8,     16X16
622   TX_8X8,    TX_8X8,   TX_16X16,
623   // 16X32,  32X16,    32X32
624   TX_16X16,  TX_16X16, TX_32X32,
625   // 32X64,  64X32,
626   TX_32X32,  TX_32X32,
627 #if CONFIG_TX64X64
628   // 64X64
629   TX_64X64,
630 #if CONFIG_EXT_PARTITION
631   // 64x128, 128x64,   128x128
632   TX_64X64,  TX_64X64, TX_64X64,
633 #endif  // CONFIG_EXT_PARTITION
634 #else
635   // 64X64
636   TX_32X32,
637 #if CONFIG_EXT_PARTITION
638   // 64x128, 128x64,   128x128
639   TX_32X32,  TX_32X32, TX_32X32,
640 #endif  // CONFIG_EXT_PARTITION
641 #endif  // CONFIG_TX64X64
642   // 4x16,   16x4,     8x32
643   TX_4X4,    TX_4X4,   TX_8X8,
644   // 32x8,   16x64     64x16
645   TX_8X8,    TX_16X16, TX_16X16,
646 #if CONFIG_EXT_PARTITION
647   // 32x128  128x32
648   TX_32X32,  TX_32X32
649 #endif  // CONFIG_EXT_PARTITION
650 };
651 
652 #if CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
653 static const TX_SIZE max_txsize_rect_lookup[BLOCK_SIZES_ALL] = {
654   // 2X2,    2X4,      4X2,
655 #if CONFIG_CHROMA_2X2
656   TX_2X2,    TX_2X2,   TX_2X2,
657 #elif CONFIG_CHROMA_SUB8X8
658   TX_4X4,    TX_4X4,   TX_4X4,
659 #endif  // CONFIG_CHROMA_SUB8X8
660   //                   4X4
661                        TX_4X4,
662   // 4X8,    8X4,      8X8
663   TX_4X8,    TX_8X4,   TX_8X8,
664   // 8X16,   16X8,     16X16
665   TX_8X16,   TX_16X8,  TX_16X16,
666   // 16X32,  32X16,    32X32
667   TX_16X32,  TX_32X16, TX_32X32,
668 #if CONFIG_TX64X64
669   // 32X64,  64X32,
670   TX_32X64,  TX_64X32,
671   // 64X64
672   TX_64X64,
673 #if CONFIG_EXT_PARTITION
674   // 64x128, 128x64,   128x128
675   TX_64X64,  TX_64X64, TX_64X64,
676 #endif  // CONFIG_EXT_PARTITION
677 #else
678   // 32X64,  64X32,
679   TX_32X32,  TX_32X32,
680   // 64X64
681   TX_32X32,
682 #if CONFIG_EXT_PARTITION
683   // 64x128, 128x64,   128x128
684   TX_32X32,  TX_32X32, TX_32X32,
685 #endif  // CONFIG_EXT_PARTITION
686 #endif  // CONFIG_TX64X64
687 #if CONFIG_RECT_TX_EXT
688   // 4x16,   16x4,     8x32
689   TX_4X16,   TX_16X4,  TX_8X32,
690   // 32x8
691   TX_32X8,
692 #else
693   // 4x16,   16x4,     8x32
694   TX_4X8,    TX_8X4,   TX_8X16,
695   // 32x8
696   TX_16X8,
697 #endif
698   // 16x64,  64x16
699   TX_16X32,  TX_32X16,
700 #if CONFIG_EXT_PARTITION
701   // 32x128  128x32
702   TX_32X32,  TX_32X32
703 #endif  // CONFIG_EXT_PARTITION
704 };
705 
706 #if CONFIG_RECT_TX_EXT
707 static const TX_SIZE quarter_txsize_lookup[BLOCK_SIZES_ALL] = {
708 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
709   //     2X2,        2X4,        4X2,
710   TX_INVALID, TX_INVALID, TX_INVALID,
711 #endif
712   //                             4x4,
713                           TX_INVALID,
714   //     4x8,        8x4,        8x8,
715   TX_INVALID, TX_INVALID, TX_INVALID,
716   // 8x16, 16x8, 16x16,
717   TX_4X16, TX_16X4, TX_INVALID,
718   // 16x32, 32x16, 32x32,
719   TX_8X32, TX_32X8, TX_INVALID,
720   // 32x64, 64x32, 64x64
721   TX_INVALID, TX_INVALID, TX_INVALID,
722 #if CONFIG_EXT_PARTITION
723   // 64x128, 128x64, 128x128
724   TX_INVALID, TX_INVALID, TX_INVALID,
725 #endif
726   // 4x16,    16x4,       8x32
727   TX_4X16,    TX_16X4,    TX_8X32,
728   // 32x8     16x64       64x16
729   TX_32X8,    TX_INVALID, TX_INVALID,
730 #if CONFIG_EXT_PARTITION
731   // 32x128   128x32
732   TX_INVALID, TX_INVALID
733 #endif  // CONFIG_EXT_PARTITION
734 };
735 #endif
736 #else
737 #define max_txsize_rect_lookup max_txsize_lookup
738 #endif  // CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
739 
740 static const TX_TYPE_1D vtx_tab[TX_TYPES] = {
741   DCT_1D,      ADST_1D, DCT_1D,      ADST_1D,
742 #if CONFIG_EXT_TX
743   FLIPADST_1D, DCT_1D,  FLIPADST_1D, ADST_1D, FLIPADST_1D, IDTX_1D,
744   DCT_1D,      IDTX_1D, ADST_1D,     IDTX_1D, FLIPADST_1D, IDTX_1D,
745 #endif  // CONFIG_EXT_TX
746 };
747 
748 static const TX_TYPE_1D htx_tab[TX_TYPES] = {
749   DCT_1D,  DCT_1D,      ADST_1D,     ADST_1D,
750 #if CONFIG_EXT_TX
751   DCT_1D,  FLIPADST_1D, FLIPADST_1D, FLIPADST_1D, ADST_1D, IDTX_1D,
752   IDTX_1D, DCT_1D,      IDTX_1D,     ADST_1D,     IDTX_1D, FLIPADST_1D,
753 #endif  // CONFIG_EXT_TX
754 };
755 
756 #if CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
757 // Same as "max_txsize_lookup[bsize] - TX_8X8", except for rectangular
758 // block which may use a rectangular transform, in which  case it is
759 // "(max_txsize_lookup[bsize] + 1) - TX_8X8", invalid for bsize < 8X8
760 static const int32_t intra_tx_size_cat_lookup[BLOCK_SIZES_ALL] = {
761 #if CONFIG_CB4X4
762 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
763   // 2X2,             2X4,                4X2,
764   INT32_MIN,          INT32_MIN,          INT32_MIN,
765 #endif
766   //                                      4X4,
767                                           INT32_MIN,
768   // 4X8,             8X4,                8X8,
769   TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,
770 #else  // CONFIG_CB4X4
771   //                                      4X4
772                                           INT32_MIN,
773   // 4X8,             8X4,                8X8
774   INT32_MIN,          INT32_MIN,          TX_8X8 - TX_8X8,
775 #endif  // CONFIG_CB4X4
776   // 8X16,            16X8,               16X16
777   TX_16X16 - TX_8X8,  TX_16X16 - TX_8X8,  TX_16X16 - TX_8X8,
778   // 16X32,           32X16,              32X32
779   TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8,
780 #if CONFIG_TX64X64
781   // 32X64,           64X32,
782   TX_64X64 - TX_8X8,  TX_64X64 - TX_8X8,
783   // 64X64
784   TX_64X64 - TX_8X8,
785 #if CONFIG_EXT_PARTITION
786   // 64x128,          128x64,             128x128
787   TX_64X64 - TX_8X8,  TX_64X64 - TX_8X8,  TX_64X64 - TX_8X8,
788 #endif  // CONFIG_EXT_PARTITION
789 #else
790   // 32X64,           64X32,
791   TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8,
792   // 64X64
793   TX_32X32 - TX_8X8,
794 #if CONFIG_EXT_PARTITION
795   // 64x128,          128x64,             128x128
796   TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8,
797 #endif  // CONFIG_EXT_PARTITION
798 #endif  // CONFIG_TX64X64
799   // TODO(david.barker): Change these if we support rectangular transforms
800   // for 4:1 shaped partitions
801   // 4x16,            16x4,               8x32
802   TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,
803   // 32x8,            16x64,              64x16
804   TX_8X8 - TX_8X8,    TX_16X16 - TX_8X8,  TX_16X16 - TX_8X8,
805 #if CONFIG_EXT_PARTITION
806   // 32x128,          128x32
807   TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8
808 #endif  // CONFIG_EXT_PARTITION
809 };
810 #else
811 // Same as "max_txsize_lookup[bsize] - TX_8X8", invalid for bsize < 8X8
812 static const int32_t intra_tx_size_cat_lookup[BLOCK_SIZES_ALL] = {
813 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
814   // 2X2,             2X4,                4X2,
815   INT32_MIN,          INT32_MIN,          INT32_MIN,
816 #endif
817   //                                      4X4
818                                           INT32_MIN,
819   // 4X8,             8X4,                8X8
820   INT32_MIN,          INT32_MIN,          TX_8X8 - TX_8X8,
821   // 8X16,            16X8,               16X16
822   TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,    TX_16X16 - TX_8X8,
823   // 16X32,           32X16,              32X32
824   TX_16X16 - TX_8X8,  TX_16X16 - TX_8X8,  TX_32X32 - TX_8X8,
825 #if CONFIG_TX64X64
826   // 32X64,           64X32,
827   TX_64X64 - TX_8X8,  TX_64X64 - TX_8X8,
828   // 64X64
829   TX_64X64 - TX_8X8,
830 #if CONFIG_EXT_PARTITION
831   // 64x128,          128x64,             128x128
832   TX_64X64 - TX_8X8,  TX_64X64 - TX_8X8,  TX_64X64 - TX_8X8,
833 #endif  // CONFIG_EXT_PARTITION
834 #else
835   // 32X64,           64X32,
836   TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8,
837   // 64X64
838   TX_32X32 - TX_8X8,
839 #if CONFIG_EXT_PARTITION
840   // 64x128,          128x64,             128x128
841   TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8,
842 #endif  // CONFIG_EXT_PARTITION
843 #endif  // CONFIG_TX64X64
844   // 4x16,            16x4,               8x32
845   TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,
846   // 32x8             16x64,              64x16
847   TX_8X8 - TX_8X8,    TX_16X16 - TX_8X8,  TX_16X16 - TX_8X8,
848 #if CONFIG_EXT_PARTITION
849   // 32x128,          128x32
850   TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8
851 #endif  // CONFIG_EXT_PARTITION
852 };
853 #endif  // CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
854 
855 #define inter_tx_size_cat_lookup intra_tx_size_cat_lookup
856 
857 /* clang-format on */
858 
859 static const TX_SIZE sub_tx_size_map[TX_SIZES_ALL] = {
860 #if CONFIG_CHROMA_2X2
861   TX_2X2,  // TX_2X2
862 #endif
863   TX_4X4,    // TX_4X4
864   TX_4X4,    // TX_8X8
865   TX_8X8,    // TX_16X16
866   TX_16X16,  // TX_32X32
867 #if CONFIG_TX64X64
868   TX_32X32,  // TX_64X64
869 #endif       // CONFIG_TX64X64
870   TX_4X4,    // TX_4X8
871   TX_4X4,    // TX_8X4
872   TX_8X8,    // TX_8X16
873   TX_8X8,    // TX_16X8
874   TX_16X16,  // TX_16X32
875   TX_16X16,  // TX_32X16
876 #if CONFIG_TX64X64
877   TX_32X32,  // TX_32X64
878   TX_32X32,  // TX_64X32
879 #endif       // CONFIG_TX64X64
880   TX_4X4,    // TX_4X16
881   TX_4X4,    // TX_16X4
882   TX_8X8,    // TX_8X32
883   TX_8X8,    // TX_32X8
884 };
885 
886 static const TX_SIZE txsize_horz_map[TX_SIZES_ALL] = {
887 #if CONFIG_CHROMA_2X2
888   TX_2X2,  // TX_2X2
889 #endif
890   TX_4X4,    // TX_4X4
891   TX_8X8,    // TX_8X8
892   TX_16X16,  // TX_16X16
893   TX_32X32,  // TX_32X32
894 #if CONFIG_TX64X64
895   TX_64X64,  // TX_64X64
896 #endif       // CONFIG_TX64X64
897   TX_4X4,    // TX_4X8
898   TX_8X8,    // TX_8X4
899   TX_8X8,    // TX_8X16
900   TX_16X16,  // TX_16X8
901   TX_16X16,  // TX_16X32
902   TX_32X32,  // TX_32X16
903 #if CONFIG_TX64X64
904   TX_32X32,  // TX_32X64
905   TX_64X64,  // TX_64X32
906 #endif       // CONFIG_TX64X64
907   TX_4X4,    // TX_4X16
908   TX_16X16,  // TX_16X4
909   TX_8X8,    // TX_8X32
910   TX_32X32,  // TX_32X8
911 };
912 
913 static const TX_SIZE txsize_vert_map[TX_SIZES_ALL] = {
914 #if CONFIG_CHROMA_2X2
915   TX_2X2,  // TX_2X2
916 #endif
917   TX_4X4,    // TX_4X4
918   TX_8X8,    // TX_8X8
919   TX_16X16,  // TX_16X16
920   TX_32X32,  // TX_32X32
921 #if CONFIG_TX64X64
922   TX_64X64,  // TX_64X64
923 #endif       // CONFIG_TX64X64
924   TX_8X8,    // TX_4X8
925   TX_4X4,    // TX_8X4
926   TX_16X16,  // TX_8X16
927   TX_8X8,    // TX_16X8
928   TX_32X32,  // TX_16X32
929   TX_16X16,  // TX_32X16
930 #if CONFIG_TX64X64
931   TX_64X64,  // TX_32X64
932   TX_32X32,  // TX_64X32
933 #endif       // CONFIG_TX64X64
934   TX_16X16,  // TX_4X16
935   TX_4X4,    // TX_16X4
936   TX_32X32,  // TX_8X32
937   TX_8X8,    // TX_32X8
938 };
939 
940 #if CONFIG_CHROMA_2X2
941 #define TX_SIZE_W_MIN 2
942 #else
943 #define TX_SIZE_W_MIN 4
944 #endif
945 
946 // Transform block width in pixels
947 static const int tx_size_wide[TX_SIZES_ALL] = {
948 #if CONFIG_CHROMA_2X2
949   2,
950 #endif
951   4,  8,  16, 32,
952 #if CONFIG_TX64X64
953   64,
954 #endif  // CONFIG_TX64X64
955   4,  8,  8,  16, 16, 32,
956 #if CONFIG_TX64X64
957   32, 64,
958 #endif  // CONFIG_TX64X64
959   4,  16, 8,  32
960 };
961 
962 #if CONFIG_CHROMA_2X2
963 #define TX_SIZE_H_MIN 2
964 #else
965 #define TX_SIZE_H_MIN 4
966 #endif
967 
968 // Transform block height in pixels
969 static const int tx_size_high[TX_SIZES_ALL] = {
970 #if CONFIG_CHROMA_2X2
971   2,
972 #endif
973   4,  8,  16, 32,
974 #if CONFIG_TX64X64
975   64,
976 #endif  // CONFIG_TX64X64
977   8,  4,  16, 8,  32, 16,
978 #if CONFIG_TX64X64
979   64, 32,
980 #endif  // CONFIG_TX64X64
981   16, 4,  32, 8
982 };
983 
984 // Transform block width in unit
985 static const int tx_size_wide_unit[TX_SIZES_ALL] = {
986 #if CONFIG_CHROMA_2X2
987   1,  2,  4, 8, 16,
988 #if CONFIG_TX64X64
989   32,
990 #endif  // CONFIG_TX64X64
991   2,  4,  4, 8, 8,  16,
992 #if CONFIG_TX64X64
993   16, 32,
994 #endif  // CONFIG_TX64X64
995   2,  8,  4, 16
996 #else  // CONFIG_CHROMA_2X2
997   1,  2,  4, 8,
998 #if CONFIG_TX64X64
999   16,
1000 #endif  // CONFIG_TX64X64
1001   1,  2,  2, 4, 4, 8,
1002 #if CONFIG_TX64X64
1003   8,  16,
1004 #endif  // CONFIG_TX64X64
1005   1,  4,  2, 8
1006 #endif  // CONFIG_CHROMA_2X2
1007 };
1008 
1009 // Transform block height in unit
1010 static const int tx_size_high_unit[TX_SIZES_ALL] = {
1011 #if CONFIG_CHROMA_2X2
1012   1,  2,  4,  8, 16,
1013 #if CONFIG_TX64X64
1014   32,
1015 #endif  // CONFIG_TX64X64
1016   4,  2,  8,  4, 16, 8,
1017 #if CONFIG_TX64X64
1018   32, 16,
1019 #endif  // CONFIG_TX64X64
1020   8,  2,  16, 4
1021 #else  // CONFIG_CHROMA_2X2
1022   1,  2, 4, 8,
1023 #if CONFIG_TX64X64
1024   16,
1025 #endif  // CONFIG_TX64X64
1026   2,  1, 4, 2, 8, 4,
1027 #if CONFIG_TX64X64
1028   16, 8,
1029 #endif  // CONFIG_TX64X64
1030   4,  1, 8, 2
1031 #endif  // CONFIG_CHROMA_2X2
1032 };
1033 
1034 // Transform block width in log2
1035 static const int tx_size_wide_log2[TX_SIZES_ALL] = {
1036 #if CONFIG_CHROMA_2X2
1037   1,
1038 #endif
1039   2, 3, 4, 5,
1040 #if CONFIG_TX64X64
1041   6,
1042 #endif  // CONFIG_TX64X64
1043   2, 3, 3, 4, 4, 5,
1044 #if CONFIG_TX64X64
1045   5, 6,
1046 #endif  // CONFIG_TX64X64
1047   2, 4, 3, 5
1048 };
1049 
1050 // Transform block height in log2
1051 static const int tx_size_high_log2[TX_SIZES_ALL] = {
1052 #if CONFIG_CHROMA_2X2
1053   1,
1054 #endif
1055   2, 3, 4, 5,
1056 #if CONFIG_TX64X64
1057   6,
1058 #endif  // CONFIG_TX64X64
1059   3, 2, 4, 3, 5, 4,
1060 #if CONFIG_TX64X64
1061   6, 5,
1062 #endif  // CONFIG_TX64X64
1063   4, 2, 5, 3
1064 };
1065 
1066 #define TX_UNIT_WIDE_LOG2 (MI_SIZE_LOG2 - tx_size_wide_log2[0])
1067 #define TX_UNIT_HIGH_LOG2 (MI_SIZE_LOG2 - tx_size_high_log2[0])
1068 
1069 static const int tx_size_2d[TX_SIZES_ALL] = {
1070 #if CONFIG_CHROMA_2X2
1071   4,
1072 #endif
1073   16,   64,   256, 1024,
1074 #if CONFIG_TX64X64
1075   4096,
1076 #endif  // CONFIG_TX64X64
1077   32,   32,   128, 128,  512, 512,
1078 #if CONFIG_TX64X64
1079   2048, 2048,
1080 #endif  // CONFIG_TX64X64
1081   64,   64,   256, 256
1082 };
1083 
1084 static const BLOCK_SIZE txsize_to_bsize[TX_SIZES_ALL] = {
1085 #if CONFIG_CHROMA_2X2
1086   BLOCK_2X2,  // TX_2X2
1087 #endif
1088   BLOCK_4X4,    // TX_4X4
1089   BLOCK_8X8,    // TX_8X8
1090   BLOCK_16X16,  // TX_16X16
1091   BLOCK_32X32,  // TX_32X32
1092 #if CONFIG_TX64X64
1093   BLOCK_64X64,  // TX_64X64
1094 #endif          // CONFIG_TX64X64
1095   BLOCK_4X8,    // TX_4X8
1096   BLOCK_8X4,    // TX_8X4
1097   BLOCK_8X16,   // TX_8X16
1098   BLOCK_16X8,   // TX_16X8
1099   BLOCK_16X32,  // TX_16X32
1100   BLOCK_32X16,  // TX_32X16
1101 #if CONFIG_TX64X64
1102   BLOCK_32X64,  // TX_32X64
1103   BLOCK_64X32,  // TX_64X32
1104 #endif          // CONFIG_TX64X64
1105   BLOCK_4X16,   // TX_4X16
1106   BLOCK_16X4,   // TX_16X4
1107   BLOCK_8X32,   // TX_8X32
1108   BLOCK_32X8,   // TX_32X8
1109 };
1110 
1111 static const TX_SIZE txsize_sqr_map[TX_SIZES_ALL] = {
1112 #if CONFIG_CHROMA_2X2
1113   TX_2X2,  // TX_2X2
1114 #endif
1115   TX_4X4,    // TX_4X4
1116   TX_8X8,    // TX_8X8
1117   TX_16X16,  // TX_16X16
1118   TX_32X32,  // TX_32X32
1119 #if CONFIG_TX64X64
1120   TX_64X64,  // TX_64X64
1121 #endif       // CONFIG_TX64X64
1122   TX_4X4,    // TX_4X8
1123   TX_4X4,    // TX_8X4
1124   TX_8X8,    // TX_8X16
1125   TX_8X8,    // TX_16X8
1126   TX_16X16,  // TX_16X32
1127   TX_16X16,  // TX_32X16
1128 #if CONFIG_TX64X64
1129   TX_32X32,  // TX_32X64
1130   TX_32X32,  // TX_64X32
1131 #endif       // CONFIG_TX64X64
1132   TX_4X4,    // TX_4X16
1133   TX_4X4,    // TX_16X4
1134   TX_8X8,    // TX_8X32
1135   TX_8X8,    // TX_32X8
1136 };
1137 
1138 static const TX_SIZE txsize_sqr_up_map[TX_SIZES_ALL] = {
1139 #if CONFIG_CHROMA_2X2
1140   TX_2X2,  // TX_2X2
1141 #endif
1142   TX_4X4,    // TX_4X4
1143   TX_8X8,    // TX_8X8
1144   TX_16X16,  // TX_16X16
1145   TX_32X32,  // TX_32X32
1146 #if CONFIG_TX64X64
1147   TX_64X64,  // TX_64X64
1148 #endif       // CONFIG_TX64X64
1149   TX_8X8,    // TX_4X8
1150   TX_8X8,    // TX_8X4
1151   TX_16X16,  // TX_8X16
1152   TX_16X16,  // TX_16X8
1153   TX_32X32,  // TX_16X32
1154   TX_32X32,  // TX_32X16
1155 #if CONFIG_TX64X64
1156   TX_64X64,  // TX_32X64
1157   TX_64X64,  // TX_64X32
1158 #endif       // CONFIG_TX64X64
1159   TX_16X16,  // TX_4X16
1160   TX_16X16,  // TX_16X4
1161   TX_32X32,  // TX_8X32
1162   TX_32X32,  // TX_32X8
1163 };
1164 
1165 /* clang-format off */
1166 static const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES] = {
1167   TX_4X4,    // ONLY_4X4
1168   TX_8X8,    // ALLOW_8X8
1169   TX_16X16,  // ALLOW_16X16
1170   TX_32X32,  // ALLOW_32X32
1171 #if CONFIG_TX64X64
1172   TX_64X64,  // ALLOW_64X64
1173   TX_64X64,  // TX_MODE_SELECT
1174 #else
1175   TX_32X32,  // TX_MODE_SELECT
1176 #endif  // CONFIG_TX64X64
1177 };
1178 /* clang-format on */
1179 
1180 static const BLOCK_SIZE ss_size_lookup[BLOCK_SIZES_ALL][2][2] = {
1181 //  ss_x == 0    ss_x == 0        ss_x == 1      ss_x == 1
1182 //  ss_y == 0    ss_y == 1        ss_y == 0      ss_y == 1
1183 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
1184   { { BLOCK_2X2, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
1185   { { BLOCK_2X4, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
1186   { { BLOCK_4X2, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
1187   { { BLOCK_4X4, BLOCK_4X2 }, { BLOCK_2X4, BLOCK_2X2 } },
1188   { { BLOCK_4X8, BLOCK_4X4 }, { BLOCK_INVALID, BLOCK_2X4 } },
1189   { { BLOCK_8X4, BLOCK_INVALID }, { BLOCK_4X4, BLOCK_4X2 } },
1190 #elif CONFIG_CB4X4
1191   { { BLOCK_4X4, BLOCK_4X4 }, { BLOCK_4X4, BLOCK_4X4 } },
1192   { { BLOCK_4X8, BLOCK_4X4 }, { BLOCK_INVALID, BLOCK_4X4 } },
1193   { { BLOCK_8X4, BLOCK_INVALID }, { BLOCK_4X4, BLOCK_4X4 } },
1194 #else
1195   { { BLOCK_4X4, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
1196   { { BLOCK_4X8, BLOCK_4X4 }, { BLOCK_INVALID, BLOCK_INVALID } },
1197   { { BLOCK_8X4, BLOCK_INVALID }, { BLOCK_4X4, BLOCK_INVALID } },
1198 #endif
1199   { { BLOCK_8X8, BLOCK_8X4 }, { BLOCK_4X8, BLOCK_4X4 } },
1200   { { BLOCK_8X16, BLOCK_8X8 }, { BLOCK_INVALID, BLOCK_4X8 } },
1201   { { BLOCK_16X8, BLOCK_INVALID }, { BLOCK_8X8, BLOCK_8X4 } },
1202   { { BLOCK_16X16, BLOCK_16X8 }, { BLOCK_8X16, BLOCK_8X8 } },
1203   { { BLOCK_16X32, BLOCK_16X16 }, { BLOCK_INVALID, BLOCK_8X16 } },
1204   { { BLOCK_32X16, BLOCK_INVALID }, { BLOCK_16X16, BLOCK_16X8 } },
1205   { { BLOCK_32X32, BLOCK_32X16 }, { BLOCK_16X32, BLOCK_16X16 } },
1206   { { BLOCK_32X64, BLOCK_32X32 }, { BLOCK_INVALID, BLOCK_16X32 } },
1207   { { BLOCK_64X32, BLOCK_INVALID }, { BLOCK_32X32, BLOCK_32X16 } },
1208   { { BLOCK_64X64, BLOCK_64X32 }, { BLOCK_32X64, BLOCK_32X32 } },
1209 #if CONFIG_EXT_PARTITION
1210   { { BLOCK_64X128, BLOCK_64X64 }, { BLOCK_INVALID, BLOCK_32X64 } },
1211   { { BLOCK_128X64, BLOCK_INVALID }, { BLOCK_64X64, BLOCK_64X32 } },
1212   { { BLOCK_128X128, BLOCK_128X64 }, { BLOCK_64X128, BLOCK_64X64 } },
1213 #endif  // CONFIG_EXT_PARTITION
1214   { { BLOCK_4X16, BLOCK_4X8 }, { BLOCK_INVALID, BLOCK_4X8 } },
1215   { { BLOCK_16X4, BLOCK_INVALID }, { BLOCK_8X4, BLOCK_8X4 } },
1216   { { BLOCK_8X32, BLOCK_8X16 }, { BLOCK_INVALID, BLOCK_4X16 } },
1217   { { BLOCK_32X8, BLOCK_INVALID }, { BLOCK_16X8, BLOCK_16X4 } },
1218   { { BLOCK_16X64, BLOCK_16X32 }, { BLOCK_INVALID, BLOCK_8X32 } },
1219   { { BLOCK_64X16, BLOCK_INVALID }, { BLOCK_32X16, BLOCK_32X8 } },
1220 #if CONFIG_EXT_PARTITION
1221   { { BLOCK_32X128, BLOCK_32X64 }, { BLOCK_INVALID, BLOCK_16X64 } },
1222   { { BLOCK_128X32, BLOCK_INVALID }, { BLOCK_64X32, BLOCK_64X16 } },
1223 #endif  // CONFIG_EXT_PARTITION
1224 };
1225 
1226 static const TX_SIZE uv_txsize_lookup[BLOCK_SIZES_ALL][TX_SIZES_ALL][2][2] = {
1227 //  ss_x == 0    ss_x == 0        ss_x == 1      ss_x == 1
1228 //  ss_y == 0    ss_y == 1        ss_y == 0      ss_y == 1
1229 #if CONFIG_CHROMA_2X2
1230   {
1231       // BLOCK_2X2
1232       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1233       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1234       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1235       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1236       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1237 #if CONFIG_TX64X64
1238       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1239 #endif  // CONFIG_TX64X64
1240       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1241       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1242       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1243 #if CONFIG_TX64X64
1244       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1245       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1246 #endif  // CONFIG_TX64X64
1247       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1248       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1249       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1250       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1251       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1252       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1253       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1254   },
1255   {
1256       // BLOCK_2X4
1257       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1258       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1259       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1260       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1261       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1262 #if CONFIG_TX64X64
1263       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1264 #endif  // CONFIG_TX64X64
1265       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1266       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1267       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1268       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1269       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1270       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1271 #if CONFIG_TX64X64
1272       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1273       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1274 #endif  // CONFIG_TX64X64
1275       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1276       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1277       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1278       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1279   },
1280   {
1281       // BLOCK_4X2
1282       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1283       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1284       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1285       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1286       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1287 #if CONFIG_TX64X64
1288       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1289 #endif  // CONFIG_TX64X64
1290       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1291       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1292       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1293 #if CONFIG_TX64X64
1294       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1295       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1296 #endif  // CONFIG_TX64X64
1297       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1298       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1299       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1300       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1301       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1302       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1303       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1304   },
1305 #elif CONFIG_CHROMA_SUB8X8
1306   {
1307       // BLOCK_2x2
1308       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1309       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1310       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1311       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1312 #if CONFIG_TX64X64
1313       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1314 #endif  // CONFIG_TX64X64
1315       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1316       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1317       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1318 #if CONFIG_TX64X64
1319       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1320       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1321 #endif  // CONFIG_TX64X64
1322       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1323       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1324       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1325       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1326       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1327       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1328       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1329   },
1330   {
1331       // BLOCK_2X4
1332       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1333       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1334       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1335       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1336 #if CONFIG_TX64X64
1337       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1338 #endif  // CONFIG_TX64X64
1339       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1340       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1341       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1342       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1343       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1344       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1345 #if CONFIG_TX64X64
1346       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1347       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1348 #endif  // CONFIG_TX64X64
1349       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1350       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1351       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1352       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1353   },
1354   {
1355       // BLOCK_4X2
1356       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1357       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1358       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1359       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1360 #if CONFIG_TX64X64
1361       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1362 #endif  // CONFIG_TX64X64
1363       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1364       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1365       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1366 #if CONFIG_TX64X64
1367       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1368       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1369 #endif  // CONFIG_TX64X64
1370       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1371       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1372       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1373       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1374       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1375       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1376       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1377   },
1378 #endif
1379   {
1380 // BLOCK_4X4
1381 #if CONFIG_CHROMA_2X2
1382       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1383       { { TX_4X4, TX_2X2 }, { TX_2X2, TX_2X2 } },
1384 #else
1385       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1386 #endif  // CONFIG_CHROMA_2X2
1387       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1388       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1389       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1390 #if CONFIG_TX64X64
1391       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1392 #endif  // CONFIG_TX64X64
1393       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1394       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1395       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1396 #if CONFIG_TX64X64
1397       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1398       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1399 #endif  // CONFIG_TX64X64
1400       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1401       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1402       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1403       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1404       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1405       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1406       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1407   },
1408   {
1409 // BLOCK_4X8
1410 #if CONFIG_CHROMA_2X2
1411       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1412       { { TX_4X4, TX_2X2 }, { TX_2X2, TX_2X2 } },
1413 #else
1414       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1415 #endif
1416       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1417       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1418       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1419 #if CONFIG_TX64X64
1420       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1421 #endif  // CONFIG_TX64X64
1422 #if CONFIG_CHROMA_2X2
1423       { { TX_4X8, TX_4X4 }, { TX_2X2, TX_2X2 } },  // used
1424 #else
1425       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },  // used
1426 #endif
1427       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1428       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1429       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1430       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1431       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1432 #if CONFIG_TX64X64
1433       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1434       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1435 #endif  // CONFIG_TX64X64
1436       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1437       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1438       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1439       { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1440   },
1441   {
1442 // BLOCK_8X4
1443 #if CONFIG_CHROMA_2X2
1444       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1445       { { TX_4X4, TX_2X2 }, { TX_2X2, TX_2X2 } },
1446 #else
1447       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1448 #endif
1449       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1450       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1451       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1452 #if CONFIG_TX64X64
1453       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1454 #endif  // CONFIG_TX64X64
1455       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1456 #if CONFIG_CHROMA_2X2
1457       { { TX_8X4, TX_2X2 }, { TX_4X4, TX_2X2 } },  // used
1458 #else
1459       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },  // used
1460 #endif
1461       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1462       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1463       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1464       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1465 #if CONFIG_TX64X64
1466       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1467       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1468 #endif  // CONFIG_TX64X64
1469       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1470       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1471       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1472       { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1473   },
1474   {
1475 // BLOCK_8X8
1476 #if CONFIG_CHROMA_2X2
1477       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1478 #endif
1479       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1480       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1481       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1482       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1483 #if CONFIG_TX64X64
1484       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1485 #endif  // CONFIG_TX64X64
1486       { { TX_4X8, TX_4X4 }, { TX_4X8, TX_4X4 } },
1487       { { TX_8X4, TX_8X4 }, { TX_4X4, TX_4X4 } },
1488       { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
1489       { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
1490       { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
1491       { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
1492 #if CONFIG_TX64X64
1493       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1494       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1495 #endif  // CONFIG_TX64X64
1496       { { TX_4X8, TX_4X4 }, { TX_4X8, TX_4X4 } },
1497       { { TX_8X4, TX_8X4 }, { TX_4X4, TX_4X4 } },
1498       { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
1499       { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
1500   },
1501   {
1502 // BLOCK_8X16
1503 #if CONFIG_CHROMA_2X2
1504       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1505 #endif
1506       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1507       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1508       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1509       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1510 #if CONFIG_TX64X64
1511       { { TX_8X16, TX_8X8 }, { TX_4X4, TX_4X4 } },
1512 #endif  // CONFIG_TX64X64
1513       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1514       { { TX_8X4, TX_8X4 }, { TX_4X4, TX_4X4 } },
1515       { { TX_8X16, TX_8X8 }, { TX_4X8, TX_4X8 } },  // used
1516       { { TX_8X16, TX_8X8 }, { TX_4X8, TX_4X8 } },
1517       { { TX_8X16, TX_8X8 }, { TX_4X8, TX_4X8 } },
1518       { { TX_8X16, TX_8X8 }, { TX_4X8, TX_4X8 } },
1519 #if CONFIG_TX64X64
1520       { { TX_8X16, TX_8X8 }, { TX_4X4, TX_4X4 } },
1521       { { TX_8X16, TX_8X8 }, { TX_4X4, TX_4X4 } },
1522 #endif  // CONFIG_TX64X64
1523       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1524       { { TX_8X4, TX_8X4 }, { TX_4X4, TX_4X4 } },
1525       { { TX_8X16, TX_8X8 }, { TX_4X16, TX_4X8 } },
1526       { { TX_8X8, TX_8X8 }, { TX_4X8, TX_4X8 } },
1527   },
1528   {
1529 // BLOCK_16X8
1530 #if CONFIG_CHROMA_2X2
1531       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1532 #endif
1533       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1534       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1535       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1536       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1537 #if CONFIG_TX64X64
1538       { { TX_16X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1539 #endif  // CONFIG_TX64X64
1540       { { TX_4X8, TX_4X4 }, { TX_4X8, TX_4X4 } },
1541       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1542       { { TX_16X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
1543       { { TX_16X8, TX_8X4 }, { TX_8X8, TX_8X4 } },  // used
1544       { { TX_16X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
1545       { { TX_16X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
1546 #if CONFIG_TX64X64
1547       { { TX_16X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1548       { { TX_16X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1549 #endif  // CONFIG_TX64X64
1550       { { TX_4X8, TX_4X4 }, { TX_4X8, TX_4X4 } },
1551       { { TX_16X4, TX_16X4 }, { TX_8X4, TX_8X4 } },
1552       { { TX_8X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
1553       { { TX_16X8, TX_16X4 }, { TX_8X8, TX_8X4 } },
1554   },
1555   {
1556 // BLOCK_16X16
1557 #if CONFIG_CHROMA_2X2
1558       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1559 #endif
1560       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1561       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1562       { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
1563       { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
1564 #if CONFIG_TX64X64
1565       { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
1566 #endif  // CONFIG_TX64X64
1567       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1568       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1569       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1570       { { TX_16X8, TX_16X8 }, { TX_8X8, TX_8X8 } },
1571       { { TX_16X16, TX_16X8 }, { TX_8X16, TX_8X8 } },
1572       { { TX_16X16, TX_16X8 }, { TX_8X16, TX_8X8 } },
1573 #if CONFIG_TX64X64
1574       { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
1575       { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
1576 #endif  // CONFIG_TX64X64
1577       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1578       { { TX_16X4, TX_16X4 }, { TX_8X4, TX_8X4 } },
1579       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1580       { { TX_16X8, TX_16X8 }, { TX_8X8, TX_8X8 } },
1581   },
1582   {
1583 // BLOCK_16X32
1584 #if CONFIG_CHROMA_2X2
1585       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1586 #endif
1587       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1588       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1589       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
1590       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
1591 #if CONFIG_TX64X64
1592       { { TX_16X32, TX_16X16 }, { TX_8X8, TX_8X8 } },
1593 #endif  // CONFIG_TX64X64
1594       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1595       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1596       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1597       { { TX_16X8, TX_16X8 }, { TX_8X8, TX_8X8 } },
1598       { { TX_16X32, TX_16X16 }, { TX_8X16, TX_8X16 } },  // used
1599       { { TX_16X32, TX_16X16 }, { TX_8X16, TX_8X16 } },
1600 #if CONFIG_TX64X64
1601       { { TX_16X32, TX_16X16 }, { TX_8X8, TX_8X8 } },
1602       { { TX_16X32, TX_16X16 }, { TX_8X8, TX_8X8 } },
1603 #endif  // CONFIG_TX64X64
1604       { { TX_4X16, TX_4X16 }, { TX_4X16, TX_4X16 } },
1605       { { TX_16X4, TX_16X4 }, { TX_8X4, TX_8X4 } },
1606       { { TX_8X32, TX_8X16 }, { TX_8X32, TX_8X16 } },
1607       { { TX_16X8, TX_16X8 }, { TX_8X8, TX_8X8 } },
1608   },
1609   {
1610 // BLOCK_32X16
1611 #if CONFIG_CHROMA_2X2
1612       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1613 #endif
1614       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1615       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1616       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1617       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1618 #if CONFIG_TX64X64
1619       { { TX_32X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1620 #endif  // CONFIG_TX64X64
1621       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1622       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1623       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1624       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1625       { { TX_32X16, TX_16X8 }, { TX_16X16, TX_16X8 } },
1626       { { TX_32X16, TX_16X8 }, { TX_16X16, TX_16X8 } },  // used
1627 #if CONFIG_TX64X64
1628       { { TX_32X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1629       { { TX_32X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1630 #endif  // CONFIG_TX64X64
1631       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1632       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1633       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1634       { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
1635   },
1636   {
1637 // BLOCK_32X32
1638 #if CONFIG_CHROMA_2X2
1639       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1640 #endif
1641       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1642       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1643       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1644       { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
1645 #if CONFIG_TX64X64
1646       { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
1647 #endif  // CONFIG_TX64X64
1648       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1649       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1650       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1651       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1652       { { TX_16X32, TX_16X16 }, { TX_16X32, TX_16X16 } },
1653       { { TX_32X16, TX_32X16 }, { TX_16X16, TX_16X16 } },
1654 #if CONFIG_TX64X64
1655       { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
1656       { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
1657 #endif  // CONFIG_TX64X64
1658       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1659       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1660       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1661       { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
1662   },
1663   {
1664 // BLOCK_32X64
1665 #if CONFIG_CHROMA_2X2
1666       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1667 #endif
1668       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1669       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1670       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1671       { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
1672 #if CONFIG_TX64X64
1673       { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
1674 #endif  // CONFIG_TX64X64
1675       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1676       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1677       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1678       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1679       { { TX_16X32, TX_16X32 }, { TX_16X16, TX_16X16 } },
1680       { { TX_32X16, TX_32X16 }, { TX_16X16, TX_16X16 } },
1681 #if CONFIG_TX64X64
1682       { { TX_32X64, TX_32X32 }, { TX_16X16, TX_16X16 } },
1683       { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
1684 #endif  // CONFIG_TX64X64
1685       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1686       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1687       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1688       { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
1689   },
1690   {
1691 // BLOCK_64X32
1692 #if CONFIG_CHROMA_2X2
1693       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1694 #endif
1695       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1696       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1697       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1698       { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1699 #if CONFIG_TX64X64
1700       { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1701 #endif  // CONFIG_TX64X64
1702       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1703       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1704       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1705       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1706       { { TX_16X32, TX_16X16 }, { TX_16X32, TX_16X16 } },
1707       { { TX_32X16, TX_16X16 }, { TX_32X16, TX_16X16 } },
1708 #if CONFIG_TX64X64
1709       { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1710       { { TX_64X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1711 #endif  // CONFIG_TX64X64
1712       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1713       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1714       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1715       { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
1716   },
1717   {
1718 // BLOCK_64X64
1719 #if CONFIG_CHROMA_2X2
1720       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1721 #endif
1722       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1723       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1724       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1725       { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
1726 #if CONFIG_TX64X64
1727       { { TX_64X64, TX_32X32 }, { TX_32X32, TX_32X32 } },
1728 #endif  // CONFIG_TX64X64
1729       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1730       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1731       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1732       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1733       { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
1734       { { TX_32X16, TX_32X16 }, { TX_32X16, TX_16X16 } },
1735 #if CONFIG_TX64X64
1736       { { TX_32X64, TX_32X32 }, { TX_16X16, TX_16X16 } },
1737       { { TX_64X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1738 #endif  // CONFIG_TX64X64
1739       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1740       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1741       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1742       { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
1743   },
1744 #if CONFIG_EXT_PARTITION
1745   {
1746 // BLOCK_64X128
1747 #if CONFIG_CHROMA_2X2
1748       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1749 #endif
1750       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1751       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1752       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1753       { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
1754 #if CONFIG_TX64X64
1755       { { TX_64X64, TX_32X32 }, { TX_32X32, TX_32X32 } },
1756 #endif  // CONFIG_TX64X64
1757       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1758       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1759       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1760       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1761       { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
1762       { { TX_32X16, TX_32X16 }, { TX_32X16, TX_32X16 } },
1763 #if CONFIG_TX64X64
1764       { { TX_32X64, TX_32X32 }, { TX_16X16, TX_16X16 } },
1765       { { TX_64X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1766 #endif  // CONFIG_TX64X64
1767       { { TX_INVALID, TX_INVALID }, { TX_INVALID, TX_INVALID } },
1768       { { TX_INVALID, TX_INVALID }, { TX_INVALID, TX_INVALID } },
1769       { { TX_INVALID, TX_INVALID }, { TX_INVALID, TX_INVALID } },
1770       { { TX_INVALID, TX_INVALID }, { TX_INVALID, TX_INVALID } },
1771   },
1772   {
1773 // BLOCK_128X64
1774 #if CONFIG_CHROMA_2X2
1775       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1776 #endif
1777       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1778       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1779       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1780       { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
1781 #if CONFIG_TX64X64
1782       { { TX_64X64, TX_32X32 }, { TX_32X32, TX_32X32 } },
1783 #endif  // CONFIG_TX64X64
1784       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1785       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1786       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1787       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1788       { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
1789       { { TX_32X16, TX_32X16 }, { TX_32X16, TX_32X16 } },
1790 #if CONFIG_TX64X64
1791       { { TX_32X64, TX_32X32 }, { TX_16X16, TX_16X16 } },
1792       { { TX_64X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1793 #endif  // CONFIG_TX64X64
1794       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1795       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1796       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1797       { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
1798   },
1799   {
1800 // BLOCK_128X128
1801 #if CONFIG_CHROMA_2X2
1802       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1803 #endif
1804       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1805       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1806       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1807       { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
1808 #if CONFIG_TX64X64
1809       { { TX_64X64, TX_32X32 }, { TX_32X32, TX_32X32 } },
1810 #endif  // CONFIG_TX64X64
1811       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1812       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1813       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1814       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1815       { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
1816       { { TX_32X16, TX_32X16 }, { TX_32X16, TX_32X16 } },
1817 #if CONFIG_TX64X64
1818       { { TX_32X64, TX_32X32 }, { TX_16X16, TX_16X16 } },
1819       { { TX_64X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1820 #endif  // CONFIG_TX64X64
1821       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1822       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1823       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1824       { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
1825   },
1826 #endif  // CONFIG_EXT_PARTITION
1827   {
1828 // BLOCK_4X16
1829 #if CONFIG_CHROMA_2X2
1830       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1831       { { TX_4X4, TX_4X4 }, { TX_2X2, TX_2X2 } },
1832 #else
1833       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1834 #endif
1835       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1836       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1837       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1838 #if CONFIG_TX64X64
1839       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1840 #endif  // CONFIG_TX64X64
1841       { { TX_4X8, TX_4X8 }, { TX_4X4, TX_4X4 } },
1842       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1843       { { TX_4X8, TX_4X8 }, { TX_4X4, TX_4X4 } },
1844       { { TX_4X8, TX_4X8 }, { TX_4X4, TX_4X4 } },
1845       { { TX_4X8, TX_4X8 }, { TX_4X4, TX_4X4 } },
1846       { { TX_4X8, TX_4X8 }, { TX_4X4, TX_4X4 } },
1847 #if CONFIG_TX64X64
1848       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1849       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1850 #endif  // CONFIG_TX64X64
1851       { { TX_4X16, TX_4X8 }, { TX_4X4, TX_4X4 } },
1852       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1853       { { TX_4X16, TX_4X8 }, { TX_4X4, TX_4X4 } },
1854       { { TX_4X8, TX_4X8 }, { TX_4X4, TX_4X4 } },
1855   },
1856   {
1857 // BLOCK_16X4
1858 #if CONFIG_CHROMA_2X2
1859       { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
1860       { { TX_4X4, TX_2X2 }, { TX_4X4, TX_2X2 } },
1861 #else
1862       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1863 #endif
1864       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1865       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1866       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1867 #if CONFIG_TX64X64
1868       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1869 #endif  // CONFIG_TX64X64
1870       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1871       { { TX_8X4, TX_4X4 }, { TX_8X4, TX_4X4 } },
1872       { { TX_8X4, TX_4X4 }, { TX_8X4, TX_4X4 } },
1873       { { TX_8X4, TX_4X4 }, { TX_8X4, TX_4X4 } },
1874       { { TX_8X4, TX_4X4 }, { TX_8X4, TX_4X4 } },
1875       { { TX_8X4, TX_4X4 }, { TX_8X4, TX_4X4 } },
1876 #if CONFIG_TX64X64
1877       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1878       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1879 #endif  // CONFIG_TX64X64
1880       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1881       { { TX_16X4, TX_4X4 }, { TX_8X4, TX_4X4 } },
1882       { { TX_8X4, TX_4X4 }, { TX_8X4, TX_4X4 } },
1883       { { TX_16X4, TX_4X4 }, { TX_8X4, TX_4X4 } },
1884   },
1885   {
1886 // BLOCK_8X32
1887 #if CONFIG_CHROMA_2X2
1888       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1889 #endif  // CONFIG_CHROMA_2X2
1890       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1891       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1892       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1893       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1894 #if CONFIG_TX64X64
1895       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1896 #endif  // CONFIG_TX64X64
1897       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1898       { { TX_8X4, TX_8X4 }, { TX_4X4, TX_4X4 } },
1899       { { TX_8X16, TX_8X16 }, { TX_4X8, TX_4X8 } },
1900       { { TX_8X8, TX_8X8 }, { TX_4X8, TX_4X8 } },
1901       { { TX_8X16, TX_8X16 }, { TX_4X8, TX_4X8 } },
1902       { { TX_8X16, TX_8X16 }, { TX_4X8, TX_4X8 } },
1903 #if CONFIG_TX64X64
1904       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1905       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
1906 #endif  // CONFIG_TX64X64
1907       { { TX_4X16, TX_4X16 }, { TX_4X16, TX_4X16 } },
1908       { { TX_8X4, TX_8X4 }, { TX_4X4, TX_4X4 } },
1909       { { TX_8X32, TX_8X16 }, { TX_4X16, TX_4X16 } },
1910       { { TX_8X8, TX_8X8 }, { TX_4X8, TX_4X8 } },
1911   },
1912   {
1913 // BLOCK_32X8
1914 #if CONFIG_CHROMA_2X2
1915       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1916 #endif  // CONFIG_CHROMA_2X2
1917       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1918       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1919       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1920       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1921 #if CONFIG_TX64X64
1922       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1923 #endif  // CONFIG_TX64X64
1924       { { TX_4X8, TX_4X4 }, { TX_4X8, TX_4X4 } },
1925       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1926       { { TX_8X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
1927       { { TX_16X8, TX_8X4 }, { TX_16X8, TX_8X4 } },
1928       { { TX_16X8, TX_8X4 }, { TX_16X8, TX_8X4 } },
1929       { { TX_16X8, TX_8X4 }, { TX_16X8, TX_8X4 } },
1930 #if CONFIG_TX64X64
1931       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1932       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
1933 #endif  // CONFIG_TX64X64
1934       { { TX_4X8, TX_4X4 }, { TX_4X8, TX_4X4 } },
1935       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1936       { { TX_8X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
1937       { { TX_32X8, TX_16X4 }, { TX_16X8, TX_16X4 } },
1938   },
1939   {
1940 // BLOCK_16X64
1941 #if CONFIG_CHROMA_2X2
1942       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1943 #endif
1944       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1945       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1946       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
1947       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
1948 #if CONFIG_TX64X64
1949       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
1950 #endif
1951       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1952       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1953       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1954       { { TX_16X8, TX_16X8 }, { TX_8X8, TX_8X8 } },
1955       { { TX_16X32, TX_16X32 }, { TX_8X16, TX_8X16 } },
1956       { { TX_16X16, TX_16X16 }, { TX_8X16, TX_8X16 } },
1957 #if CONFIG_TX64X64
1958       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
1959       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
1960 #endif
1961       { { TX_4X16, TX_4X16 }, { TX_4X16, TX_4X16 } },
1962       { { TX_16X4, TX_16X4 }, { TX_8X4, TX_8X4 } },
1963       { { TX_8X32, TX_8X32 }, { TX_8X32, TX_8X32 } },
1964       { { TX_16X8, TX_16X8 }, { TX_8X8, TX_8X8 } },
1965   },
1966   {
1967 // BLOCK_64X16
1968 #if CONFIG_CHROMA_2X2
1969       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1970 #endif
1971       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1972       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1973       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1974       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1975 #if CONFIG_TX64X64
1976       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1977 #endif
1978       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1979       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1980       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1981       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1982       { { TX_16X16, TX_16X8 }, { TX_16X16, TX_16X8 } },
1983       { { TX_32X16, TX_16X8 }, { TX_32X16, TX_16X8 } },
1984 #if CONFIG_TX64X64
1985       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1986       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1987 #endif
1988       { { TX_4X16, TX_4X8 }, { TX_4X16, TX_4X8 } },
1989       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
1990       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1991       { { TX_32X8, TX_32X8 }, { TX_32X8, TX_32X8 } },
1992   },
1993 #if CONFIG_EXT_PARTITION
1994   {
1995 // BLOCK_32X128
1996 #if CONFIG_CHROMA_2X2
1997       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1998 #endif
1999       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
2000       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
2001       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
2002       { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
2003 #if CONFIG_TX64X64
2004       { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
2005 #endif
2006       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
2007       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
2008       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
2009       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
2010       { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
2011       { { TX_32X16, TX_32X16 }, { TX_16X16, TX_16X16 } },
2012       { { TX_4X16, TX_4X16 }, { TX_4X16, TX_4X16 } },
2013       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
2014       { { TX_8X32, TX_8X32 }, { TX_8X32, TX_8X32 } },
2015       { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
2016   },
2017   {
2018 // BLOCK_128X32
2019 #if CONFIG_CHROMA_2X2
2020       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
2021 #endif
2022       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
2023       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
2024       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
2025       { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
2026 #if CONFIG_TX64X64
2027       { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
2028 #endif
2029       { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
2030       { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
2031       { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
2032       { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
2033       { { TX_16X32, TX_16X16 }, { TX_16X32, TX_16X16 } },
2034       { { TX_32X16, TX_32X16 }, { TX_32X16, TX_32X16 } },
2035       { { TX_4X16, TX_4X16 }, { TX_4X16, TX_4X16 } },
2036       { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
2037       { { TX_8X32, TX_8X16 }, { TX_8X32, TX_8X16 } },
2038       { { TX_32X8, TX_32X8 }, { TX_32X8, TX_32X8 } },
2039   },
2040 #endif
2041 };
2042 
2043 // Generates 4 bit field in which each bit set to 1 represents
2044 // a blocksize partition  1111 means we split 64x64, 32x32, 16x16
2045 // and 8x8.  1000 means we just split the 64x64 to 32x32
2046 /* clang-format off */
2047 static const struct {
2048   PARTITION_CONTEXT above;
2049   PARTITION_CONTEXT left;
2050 } partition_context_lookup[BLOCK_SIZES_ALL] = {
2051 #if CONFIG_EXT_PARTITION
2052 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
2053   { 31, 31 },  // 2X2   - {0b11111, 0b11111}
2054   { 31, 31 },  // 2X4   - {0b11111, 0b11111}
2055   { 31, 31 },  // 4X2   - {0b11111, 0b11111}
2056 #endif
2057   { 31, 31 },  // 4X4   - {0b11111, 0b11111}
2058   { 31, 30 },  // 4X8   - {0b11111, 0b11110}
2059   { 30, 31 },  // 8X4   - {0b11110, 0b11111}
2060   { 30, 30 },  // 8X8   - {0b11110, 0b11110}
2061   { 30, 28 },  // 8X16  - {0b11110, 0b11100}
2062   { 28, 30 },  // 16X8  - {0b11100, 0b11110}
2063   { 28, 28 },  // 16X16 - {0b11100, 0b11100}
2064   { 28, 24 },  // 16X32 - {0b11100, 0b11000}
2065   { 24, 28 },  // 32X16 - {0b11000, 0b11100}
2066   { 24, 24 },  // 32X32 - {0b11000, 0b11000}
2067   { 24, 16 },  // 32X64 - {0b11000, 0b10000}
2068   { 16, 24 },  // 64X32 - {0b10000, 0b11000}
2069   { 16, 16 },  // 64X64 - {0b10000, 0b10000}
2070   { 16, 0 },   // 64X128- {0b10000, 0b00000}
2071   { 0, 16 },   // 128X64- {0b00000, 0b10000}
2072   { 0, 0 },    // 128X128-{0b00000, 0b00000}
2073 
2074   { 31, 28 },  // 4X16  - {0b11111, 0b11100}
2075   { 28, 31 },  // 16X4  - {0b11100, 0b11111}
2076   { 30, 24 },  // 8X32  - {0b11110, 0b11000}
2077   { 24, 30 },  // 32X8  - {0b11000, 0b11110}
2078   { 28, 16 },  // 16X64 - {0b11100, 0b10000}
2079   { 16, 28 },  // 64X16 - {0b10000, 0b11100}
2080   { 24, 0 },   // 32X128- {0b11000, 0b00000}
2081   { 0, 24 },   // 128X32- {0b00000, 0b11000}
2082 #else
2083 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
2084   { 15, 15 },  // 2X2   - {0b1111, 0b1111}
2085   { 15, 15 },  // 2X4   - {0b1111, 0b1111}
2086   { 15, 15 },  // 4X2   - {0b1111, 0b1111}
2087 #endif
2088   { 15, 15 },  // 4X4   - {0b1111, 0b1111}
2089   { 15, 14 },  // 4X8   - {0b1111, 0b1110}
2090   { 14, 15 },  // 8X4   - {0b1110, 0b1111}
2091   { 14, 14 },  // 8X8   - {0b1110, 0b1110}
2092   { 14, 12 },  // 8X16  - {0b1110, 0b1100}
2093   { 12, 14 },  // 16X8  - {0b1100, 0b1110}
2094   { 12, 12 },  // 16X16 - {0b1100, 0b1100}
2095   { 12, 8 },   // 16X32 - {0b1100, 0b1000}
2096   { 8, 12 },   // 32X16 - {0b1000, 0b1100}
2097   { 8, 8 },    // 32X32 - {0b1000, 0b1000}
2098   { 8, 0 },    // 32X64 - {0b1000, 0b0000}
2099   { 0, 8 },    // 64X32 - {0b0000, 0b1000}
2100   { 0, 0 },    // 64X64 - {0b0000, 0b0000}
2101 
2102   { 15, 12 },  // 4X16 - {0b1111, 0b1100}
2103   { 12, 15 },  // 16X4 - {0b1100, 0b1111}
2104   { 8, 14 },   // 8X32 - {0b1110, 0b1000}
2105   { 14, 8 },   // 32X8 - {0b1000, 0b1110}
2106   { 12, 0 },   // 16X64- {0b1100, 0b0000}
2107   { 0, 12 },   // 64X16- {0b0000, 0b1100}
2108 #endif  // CONFIG_EXT_PARTITION
2109 };
2110 /* clang-format on */
2111 
2112 #if CONFIG_KF_CTX
2113 static const int intra_mode_context[INTRA_MODES] = {
2114   0, 1, 2, 3, 4, 4, 4, 4, 3, 0,
2115 #if CONFIG_SMOOTH_HV
2116   1, 2,
2117 #endif
2118   0,
2119 };
2120 #endif
2121 
2122 #if CONFIG_SUPERTX
2123 static const TX_SIZE uvsupertx_size_lookup[TX_SIZES][2][2] = {
2124 //  ss_x == 0 ss_x == 0   ss_x == 1 ss_x == 1
2125 //  ss_y == 0 ss_y == 1   ss_y == 0 ss_y == 1
2126 #if CONFIG_CHROMA_2X2
2127   { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
2128 #endif
2129   { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
2130   { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
2131   { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
2132   { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
2133 #if CONFIG_TX64X64
2134   { { TX_64X64, TX_32X32 }, { TX_32X32, TX_32X32 } },
2135 #endif  // CONFIG_TX64X64
2136 };
2137 
2138 #if CONFIG_EXT_PARTITION_TYPES
2139 static const int partition_supertx_context_lookup[EXT_PARTITION_TYPES] = {
2140   -1, 0, 0, 1, 0, 0, 0, 0, 0, 0
2141 };
2142 
2143 #else
2144 static const int partition_supertx_context_lookup[PARTITION_TYPES] = { -1, 0, 0,
2145                                                                        1 };
2146 #endif  // CONFIG_EXT_PARTITION_TYPES
2147 #endif  // CONFIG_SUPERTX
2148 
2149 #if CONFIG_NCOBMC_ADAPT_WEIGHT
2150 // NCOBMC_ADAPT_INTRPL only supports block size >= BLOCK_8X8 and <= BLOCK_64X64
2151 static const ADAPT_OVERLAP_BLOCK adapt_overlap_block_lookup[BLOCK_SIZES_ALL] = {
2152 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
2153   ADAPT_OVERLAP_BLOCK_INVALID,  // BLOCK_2X2
2154   ADAPT_OVERLAP_BLOCK_INVALID,  // BLOCK_2X4
2155   ADAPT_OVERLAP_BLOCK_INVALID,  // BLOCK_4X2
2156 #endif
2157   ADAPT_OVERLAP_BLOCK_INVALID,  // BLOCK_4X4
2158   ADAPT_OVERLAP_BLOCK_INVALID,  // BLOCK_4X8
2159   ADAPT_OVERLAP_BLOCK_INVALID,  // BLOCK_8X4
2160 
2161   // the rest of the block sizes round to the largest squared block less than
2162   // the given block size
2163   ADAPT_OVERLAP_BLOCK_8X8, ADAPT_OVERLAP_BLOCK_8X8, ADAPT_OVERLAP_BLOCK_8X8,
2164   ADAPT_OVERLAP_BLOCK_16X16, ADAPT_OVERLAP_BLOCK_16X16,
2165   ADAPT_OVERLAP_BLOCK_16X16, ADAPT_OVERLAP_BLOCK_32X32,
2166   ADAPT_OVERLAP_BLOCK_32X32, ADAPT_OVERLAP_BLOCK_32X32,
2167   ADAPT_OVERLAP_BLOCK_64X64,
2168 #if CONFIG_EXT_PARTITION
2169   ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID,
2170   ADAPT_OVERLAP_BLOCK_INVALID,
2171 #endif  // CONFIG_EXT_PARTITION
2172   ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID,
2173   ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID,
2174   ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID,
2175 #if CONFIG_EXT_PARTITION
2176   ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID
2177 #endif  // CONFIG_EXT_PARTITION
2178 };
2179 
2180 static const BLOCK_SIZE bsize_2_sqr_bsize[BLOCK_SIZES] = {
2181 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
2182   BLOCK_2X2,   BLOCK_2X2,   BLOCK_2X2,
2183 #endif
2184   BLOCK_4X4,   BLOCK_4X4,   BLOCK_4X4,   BLOCK_8X8,   BLOCK_8X8,
2185   BLOCK_8X8,   BLOCK_16X16, BLOCK_16X16, BLOCK_16X16, BLOCK_32X32,
2186   BLOCK_32X32, BLOCK_32X32, BLOCK_64X64,
2187 #if CONFIG_EXT_PARTITION
2188   BLOCK_64X64, BLOCK_64X64,
2189 #endif
2190 };
2191 
2192 #endif  // CONFIG_NCOBMC_ADAPT_WEIGHT
2193 
2194 #if CONFIG_ADAPT_SCAN
2195 #define EOB_THRESHOLD_NUM 2
2196 #endif
2197 
2198 #ifdef __cplusplus
2199 }  // extern "C"
2200 #endif
2201 
2202 #endif  // AV1_COMMON_COMMON_DATA_H_
2203