blob: 6518cfabfd14a66cfb5f393284451d32d20be04b [file] [log] [blame]
Yaowu Xuc27fc142016-08-22 16:08:15 -07001/*
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07002 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Yaowu Xuc27fc142016-08-22 16:08:15 -07003 *
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07004 * 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.
Yaowu Xuc27fc142016-08-22 16:08:15 -070010 */
11
Yaowu Xuf883b422016-08-30 14:01:10 -070012#ifndef AV1_COMMON_COMMON_DATA_H_
13#define AV1_COMMON_COMMON_DATA_H_
Yaowu Xuc27fc142016-08-22 16:08:15 -070014
15#include "av1/common/enums.h"
Yaowu Xuf883b422016-08-30 14:01:10 -070016#include "aom/aom_integer.h"
17#include "aom_dsp/aom_dsp_common.h"
Yaowu Xuc27fc142016-08-22 16:08:15 -070018
19#ifdef __cplusplus
20extern "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
30static const uint8_t b_width_log2_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080031#if CONFIG_CB4X4
32 0, 0, 0,
33#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070034 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, IF_EXT_PARTITION(4, 5, 5)
35};
36static const uint8_t b_height_log2_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080037#if CONFIG_CB4X4
38 0, 0, 0,
39#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070040 0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, IF_EXT_PARTITION(5, 4, 5)
41};
42// Log 2 conversion lookup tables for modeinfo width and height
43static const uint8_t mi_width_log2_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080044#if CONFIG_CB4X4
45 0, 0, 0,
46#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070047 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, IF_EXT_PARTITION(3, 4, 4)
48};
49static const uint8_t mi_height_log2_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080050#if CONFIG_CB4X4
51 0, 0, 0,
52#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070053 0, 0, 0, 0, 1, 0, 1, 2, 1, 2, 3, 2, 3, IF_EXT_PARTITION(4, 3, 4)
54};
55
Jingning Hane7230e92016-10-21 16:30:10 -070056// Width/height lookup tables in units of various block sizes
Jingning Hanc47fe6c2016-10-21 16:40:47 -070057static const uint8_t block_size_wide[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080058#if CONFIG_CB4X4
59 2, 2, 4,
60#endif
Jingning Hanc47fe6c2016-10-21 16:40:47 -070061 4, 4, 8, 8, 8, 16, 16, 16, 32, 32, 32, 64, 64, IF_EXT_PARTITION(64, 128, 128)
62};
Jingning Hanae5cfde2016-11-30 12:01:44 -080063
Jingning Hanc47fe6c2016-10-21 16:40:47 -070064static const uint8_t block_size_high[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080065#if CONFIG_CB4X4
66 2, 4, 2,
67#endif
Jingning Hanc47fe6c2016-10-21 16:40:47 -070068 4, 8, 4, 8, 16, 8, 16, 32, 16, 32, 64, 32, 64, IF_EXT_PARTITION(128, 64, 128)
69};
Jingning Hanae5cfde2016-11-30 12:01:44 -080070
Yaowu Xuc27fc142016-08-22 16:08:15 -070071static const uint8_t num_4x4_blocks_wide_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080072#if CONFIG_CB4X4
73 1, 1, 1,
74#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070075 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16, IF_EXT_PARTITION(16, 32, 32)
76};
77static const uint8_t num_4x4_blocks_high_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080078#if CONFIG_CB4X4
79 1, 1, 1,
80#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070081 1, 2, 1, 2, 4, 2, 4, 8, 4, 8, 16, 8, 16, IF_EXT_PARTITION(32, 16, 32)
82};
83static const uint8_t num_8x8_blocks_wide_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080084#if CONFIG_CB4X4
85 1, 1, 1,
86#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070087 1, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, IF_EXT_PARTITION(8, 16, 16)
88};
89static const uint8_t num_8x8_blocks_high_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080090#if CONFIG_CB4X4
91 1, 1, 1,
92#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070093 1, 1, 1, 1, 2, 1, 2, 4, 2, 4, 8, 4, 8, IF_EXT_PARTITION(16, 8, 16)
94};
95static const uint8_t num_16x16_blocks_wide_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -080096#if CONFIG_CB4X4
97 1, 1, 1,
98#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -070099 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 4, 4, IF_EXT_PARTITION(4, 8, 8)
100};
101static const uint8_t num_16x16_blocks_high_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800102#if CONFIG_CB4X4
103 1, 1, 1,
104#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700105 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 4, 2, 4, IF_EXT_PARTITION(8, 4, 8)
106};
107
Yaowu Xuf883b422016-08-30 14:01:10 -0700108// AOMMIN(3, AOMMIN(b_width_log2(bsize), b_height_log2(bsize)))
Yaowu Xuc27fc142016-08-22 16:08:15 -0700109static const uint8_t size_group_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800110#if CONFIG_CB4X4
111 0, 0, 0,
112#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700113 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, IF_EXT_PARTITION(3, 3, 3)
114};
115
116static const uint8_t num_pels_log2_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800117#if CONFIG_CB4X4
118 2, 3, 3,
119#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700120 4, 5, 5, 6, 7, 7, 8, 9, 9, 10, 11, 11, 12, IF_EXT_PARTITION(13, 13, 14)
121};
122
123/* clang-format off */
124static const PARTITION_TYPE
125 partition_lookup[MAX_SB_SIZE_LOG2 - 1][BLOCK_SIZES] = {
126 { // 4X4 ->
Jingning Hanf1702dd2016-11-30 21:17:59 -0800127#if CONFIG_CB4X4
128 // 2X2, 2X4, 4X2,
129 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
130#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700131 // 4X4
132 PARTITION_NONE,
133 // 4X8, 8X4, 8X8
134 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
135 // 8X16, 16X8, 16X16
136 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
137 // 16X32, 32X16, 32X32
138 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
139 // 32X64, 64X32, 64X64
140 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
141#if CONFIG_EXT_PARTITION
142 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
143#endif // CONFIG_EXT_PARTITION
144 }, { // 8X8 ->
Jingning Hanf1702dd2016-11-30 21:17:59 -0800145#if CONFIG_CB4X4
146 // 2X2, 2X4, 4X2,
147 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
148#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700149 // 4X4
150 PARTITION_SPLIT,
151 // 4X8, 8X4, 8X8
152 PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE,
153 // 8X16, 16X8, 16X16
154 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
155 // 16X32, 32X16, 32X32
156 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
157 // 32X64, 64X32, 64X64
158 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
159#if CONFIG_EXT_PARTITION
160 // 64x128, 128x64, 128x128
161 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
162#endif // CONFIG_EXT_PARTITION
163 }, { // 16X16 ->
Jingning Hanf1702dd2016-11-30 21:17:59 -0800164#if CONFIG_CB4X4
165 // 2X2, 2X4, 4X2,
166 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
167#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700168 // 4X4
169 PARTITION_SPLIT,
170 // 4X8, 8X4, 8X8
171 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
172 // 8X16, 16X8, 16X16
173 PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE,
174 // 16X32, 32X16, 32X32
175 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
176 // 32X64, 64X32, 64X64
177 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
178#if CONFIG_EXT_PARTITION
179 // 64x128, 128x64, 128x128
180 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
181#endif // CONFIG_EXT_PARTITION
182 }, { // 32X32 ->
Jingning Hanf1702dd2016-11-30 21:17:59 -0800183#if CONFIG_CB4X4
184 // 2X2, 2X4, 4X2,
185 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
186#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700187 // 4X4
188 PARTITION_SPLIT,
189 // 4X8, 8X4, 8X8
190 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
191 // 8X16, 16X8, 16X16
192 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
193 // 16X32, 32X16, 32X32
194 PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE,
195 // 32X64, 64X32, 64X64
196 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
197#if CONFIG_EXT_PARTITION
198 // 64x128, 128x64, 128x128
199 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
200#endif // CONFIG_EXT_PARTITION
201 }, { // 64X64 ->
Jingning Hanf1702dd2016-11-30 21:17:59 -0800202#if CONFIG_CB4X4
203 // 2X2, 2X4, 4X2,
204 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
205#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700206 // 4X4
207 PARTITION_SPLIT,
208 // 4X8, 8X4, 8X8
209 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
210 // 8X16, 16X8, 16X16
211 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
212 // 16X32, 32X16, 32X32
213 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
214 // 32X64, 64X32, 64X64
215 PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE,
216#if CONFIG_EXT_PARTITION
217 // 64x128, 128x64, 128x128
218 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
219 }, { // 128x128 ->
Jingning Hanf1702dd2016-11-30 21:17:59 -0800220#if CONFIG_CB4X4
221 // 2X2, 2X4, 4X2,
222 PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
223#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700224 // 4X4
225 PARTITION_SPLIT,
226 // 4X8, 8X4, 8X8
227 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
228 // 8X16, 16X8, 16X16
229 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
230 // 16X32, 32X16, 32X32
231 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
232 // 32X64, 64X32, 64X64
233 PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
234 // 64x128, 128x64, 128x128
235 PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE,
236#endif // CONFIG_EXT_PARTITION
237 }
238};
239
240#if CONFIG_EXT_PARTITION_TYPES
241static const BLOCK_SIZE subsize_lookup[EXT_PARTITION_TYPES][BLOCK_SIZES] =
242#else
243static const BLOCK_SIZE subsize_lookup[PARTITION_TYPES][BLOCK_SIZES] =
244#endif // CONFIG_EXT_PARTITION_TYPES
245{
246 { // PARTITION_NONE
Jingning Hanf1702dd2016-11-30 21:17:59 -0800247#if CONFIG_CB4X4
248 // 2X2, 2X4, 4X2,
249 BLOCK_2X2, BLOCK_2X4, BLOCK_4X2,
250#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700251 // 4X4
252 BLOCK_4X4,
253 // 4X8, 8X4, 8X8
254 BLOCK_4X8, BLOCK_8X4, BLOCK_8X8,
255 // 8X16, 16X8, 16X16
256 BLOCK_8X16, BLOCK_16X8, BLOCK_16X16,
257 // 16X32, 32X16, 32X32
258 BLOCK_16X32, BLOCK_32X16, BLOCK_32X32,
259 // 32X64, 64X32, 64X64
260 BLOCK_32X64, BLOCK_64X32, BLOCK_64X64,
261#if CONFIG_EXT_PARTITION
262 // 64x128, 128x64, 128x128
263 BLOCK_64X128, BLOCK_128X64, BLOCK_128X128,
264#endif // CONFIG_EXT_PARTITION
265 }, { // PARTITION_HORZ
Jingning Hanf1702dd2016-11-30 21:17:59 -0800266#if CONFIG_CB4X4
267 // 2X2, 2X4, 4X2,
268 BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
269#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700270 // 4X4
271 BLOCK_INVALID,
272 // 4X8, 8X4, 8X8
273 BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
274 // 8X16, 16X8, 16X16
275 BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
276 // 16X32, 32X16, 32X32
277 BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
278 // 32X64, 64X32, 64X64
279 BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
280#if CONFIG_EXT_PARTITION
281 // 64x128, 128x64, 128x128
282 BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
283#endif // CONFIG_EXT_PARTITION
284 }, { // PARTITION_VERT
Jingning Hanf1702dd2016-11-30 21:17:59 -0800285#if CONFIG_CB4X4
286 // 2X2, 2X4, 4X2,
287 BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
288#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700289 // 4X4
290 BLOCK_INVALID,
291 // 4X8, 8X4, 8X8
292 BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
293 // 8X16, 16X8, 16X16
294 BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
295 // 16X32, 32X16, 32X32
296 BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
297 // 32X64, 64X32, 64X64
298 BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
299#if CONFIG_EXT_PARTITION
300 // 64x128, 128x64, 128x128
301 BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
302#endif // CONFIG_EXT_PARTITION
303 }, { // PARTITION_SPLIT
Jingning Hanf1702dd2016-11-30 21:17:59 -0800304#if CONFIG_CB4X4
305 // 2X2, 2X4, 4X2,
306 BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
307#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700308 // 4X4
309 BLOCK_INVALID,
310 // 4X8, 8X4, 8X8
311 BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X4,
312 // 8X16, 16X8, 16X16
313 BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X8,
314 // 16X32, 32X16, 32X32
315 BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X16,
316 // 32X64, 64X32, 64X64
317 BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X32,
318#if CONFIG_EXT_PARTITION
319 // 64x128, 128x64, 128x128
320 BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X64,
321#endif // CONFIG_EXT_PARTITION
322#if CONFIG_EXT_PARTITION_TYPES
323 }, { // PARTITION_HORZ_A
Jingning Hanf1702dd2016-11-30 21:17:59 -0800324#if CONFIG_CB4X4
325 // 2X2, 2X4, 4X2,
326 BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
327#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700328 // 4X4
329 BLOCK_INVALID,
330 // 4X8, 8X4, 8X8
331 BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
332 // 8X16, 16X8, 16X16
333 BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
334 // 16X32, 32X16, 32X32
335 BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
336 // 32X64, 64X32, 64X64
337 BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
338#if CONFIG_EXT_PARTITION
339 // 64x128, 128x64, 128x128
340 BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
341#endif // CONFIG_EXT_PARTITION
342 }, { // PARTITION_HORZ_B
Jingning Hanf1702dd2016-11-30 21:17:59 -0800343#if CONFIG_CB4X4
344 // 2X2, 2X4, 4X2,
345 BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
346#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700347 // 4X4
348 BLOCK_INVALID,
349 // 4X8, 8X4, 8X8
350 BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
351 // 8X16, 16X8, 16X16
352 BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
353 // 16X32, 32X16, 32X32
354 BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
355 // 32X64, 64X32, 64X64
356 BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
357#if CONFIG_EXT_PARTITION
358 // 64x128, 128x64, 128x128
359 BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
360#endif // CONFIG_EXT_PARTITION
361 }, { // PARTITION_VERT_A
Jingning Hanf1702dd2016-11-30 21:17:59 -0800362#if CONFIG_CB4X4
363 // 2X2, 2X4, 4X2,
364 BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
365#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700366 // 4X4
367 BLOCK_INVALID,
368 // 4X8, 8X4, 8X8
369 BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
370 // 8X16, 16X8, 16X16
371 BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
372 // 16X32, 32X16, 32X32
373 BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
374 // 32X64, 64X32, 64X64
375 BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
376#if CONFIG_EXT_PARTITION
377 // 64x128, 128x64, 128x128
378 BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
379#endif // CONFIG_EXT_PARTITION
380 }, { // PARTITION_VERT_B
Jingning Hanf1702dd2016-11-30 21:17:59 -0800381#if CONFIG_CB4X4
382 // 2X2, 2X4, 4X2,
383 BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
384#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700385 // 4X4
386 BLOCK_INVALID,
387 // 4X8, 8X4, 8X8
388 BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
389 // 8X16, 16X8, 16X16
390 BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
391 // 16X32, 32X16, 32X32
392 BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
393 // 32X64, 64X32, 64X64
394 BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
395#if CONFIG_EXT_PARTITION
396 // 64x128, 128x64, 128x128
397 BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
398#endif // CONFIG_EXT_PARTITION
399#endif // CONFIG_EXT_PARTITION_TYPES
400 }
401};
402
403static const TX_SIZE max_txsize_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800404#if CONFIG_CB4X4
405 // 2X2, 2X4, 4X2,
406 TX_2X2, TX_2X2, TX_2X2,
407#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700408 // 4X4
409 TX_4X4,
410 // 4X8, 8X4, 8X8
411 TX_4X4, TX_4X4, TX_8X8,
412 // 8X16, 16X8, 16X16
413 TX_8X8, TX_8X8, TX_16X16,
414 // 16X32, 32X16, 32X32
415 TX_16X16, TX_16X16, TX_32X32,
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800416 // 32X64, 64X32,
417 TX_32X32, TX_32X32,
418#if CONFIG_TX64X64
419 // 64X64
420 TX_64X64,
421#if CONFIG_EXT_PARTITION
422 // 64x128, 128x64, 128x128
423 TX_64X64, TX_64X64, TX_64X64,
424#endif // CONFIG_EXT_PARTITION
425#else
426 // 64X64
427 TX_32X32,
Yaowu Xuc27fc142016-08-22 16:08:15 -0700428#if CONFIG_EXT_PARTITION
429 // 64x128, 128x64, 128x128
430 TX_32X32, TX_32X32, TX_32X32,
431#endif // CONFIG_EXT_PARTITION
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800432#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700433};
434
Yaowu Xuc27fc142016-08-22 16:08:15 -0700435static const TX_SIZE max_txsize_rect_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800436#if CONFIG_CB4X4
437 // 2X2, 2X4, 4X2,
438 TX_2X2, TX_2X2, TX_2X2,
439#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700440 // 4X4
441 TX_4X4,
442 // 4X8, 8X4, 8X8
443 TX_4X8, TX_8X4, TX_8X8,
444 // 8X16, 16X8, 16X16
445 TX_8X16, TX_16X8, TX_16X16,
446 // 16X32, 32X16, 32X32
447 TX_16X32, TX_32X16, TX_32X32,
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800448 // 32X64, 64X32,
449 TX_32X32, TX_32X32,
450#if CONFIG_TX64X64
451 // 64X64
452 TX_64X64,
453#if CONFIG_EXT_PARTITION
454 // 64x128, 128x64, 128x128
455 TX_64X64, TX_64X64, TX_64X64,
456#endif // CONFIG_EXT_PARTITION
457#else
458 // 64X64
459 TX_32X32,
Yaowu Xuc27fc142016-08-22 16:08:15 -0700460#if CONFIG_EXT_PARTITION
461 // 64x128, 128x64, 128x128
462 TX_32X32, TX_32X32, TX_32X32,
463#endif // CONFIG_EXT_PARTITION
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800464#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700465};
Yaowu Xuc27fc142016-08-22 16:08:15 -0700466
467// Same as "max_txsize_lookup[bsize] - TX_8X8", invalid for bsize < 8X8
468static const int32_t intra_tx_size_cat_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800469#if CONFIG_CB4X4
470 // 2X2, 2X4, 4X2,
471 INT32_MIN, INT32_MIN, INT32_MIN,
472#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700473 // 4X4
474 INT32_MIN,
475 // 4X8, 8X4, 8X8
476 INT32_MIN, INT32_MIN, TX_8X8 - TX_8X8,
477 // 8X16, 16X8, 16X16
478 TX_8X8 - TX_8X8, TX_8X8 - TX_8X8, TX_16X16 - TX_8X8,
479 // 16X32, 32X16, 32X32
480 TX_16X16 - TX_8X8, TX_16X16 - TX_8X8, TX_32X32 - TX_8X8,
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800481 // 32X64, 64X32,
482 TX_32X32 - TX_8X8, TX_32X32 - TX_8X8,
483#if CONFIG_TX64X64
484 // 64X64
485 TX_64X64 - TX_8X8,
486#if CONFIG_EXT_PARTITION
487 // 64x128, 128x64, 128x128
488 TX_64X64 - TX_8X8, TX_64X64 - TX_8X8, TX_64X64 - TX_8X8,
489#endif // CONFIG_EXT_PARTITION
490#else
491 // 64X64
492 TX_32X32 - TX_8X8,
Yaowu Xuc27fc142016-08-22 16:08:15 -0700493#if CONFIG_EXT_PARTITION
494 // 64x128, 128x64, 128x128
495 TX_32X32 - TX_8X8, TX_32X32 - TX_8X8, TX_32X32 - TX_8X8,
496#endif // CONFIG_EXT_PARTITION
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800497#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700498};
499
500#if CONFIG_EXT_TX && CONFIG_RECT_TX
501// Same as "max_txsize_lookup[bsize] - TX_8X8", except for rectangular
502// block which may use a rectangular transform, in which case it is
503// "(max_txsize_lookup[bsize] + 1) - TX_8X8", invalid for bsize < 8X8
504static const int32_t inter_tx_size_cat_lookup[BLOCK_SIZES] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800505#if CONFIG_CB4X4
506 // 2X2, 2X4, 4X2,
507 INT32_MIN, INT32_MIN, INT32_MIN,
508#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700509 // 4X4
510 INT32_MIN,
511 // 4X8, 8X4, 8X8
512 INT32_MIN, INT32_MIN, TX_8X8 - TX_8X8,
513 // 8X16, 16X8, 16X16
514 TX_16X16 - TX_8X8, TX_16X16 - TX_8X8, TX_16X16 - TX_8X8,
515 // 16X32, 32X16, 32X32
516 TX_32X32 - TX_8X8, TX_32X32 - TX_8X8, TX_32X32 - TX_8X8,
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800517 // 32X64, 64X32,
518 TX_32X32 - TX_8X8, TX_32X32 - TX_8X8,
519#if CONFIG_TX64X64
520 // 64X64
521 TX_64X64 - TX_8X8,
522#if CONFIG_EXT_PARTITION
523 // 64x128, 128x64, 128x128
524 TX_64X64 - TX_8X8, TX_64X64 - TX_8X8, TX_64X64 - TX_8X8,
525#endif // CONFIG_EXT_PARTITION
526#else
527 // 64X64
528 TX_32X32 - TX_8X8,
Yaowu Xuc27fc142016-08-22 16:08:15 -0700529#if CONFIG_EXT_PARTITION
530 // 64x128, 128x64, 128x128
531 TX_32X32 - TX_8X8, TX_32X32 - TX_8X8, TX_32X32 - TX_8X8,
532#endif // CONFIG_EXT_PARTITION
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800533#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700534};
535#else
536#define inter_tx_size_cat_lookup intra_tx_size_cat_lookup
537#endif // CONFIG_EXT_TX && CONFIG_RECT_TX
538
539/* clang-format on */
540
Jingning Hana9336322016-11-02 15:45:07 -0700541static const TX_SIZE sub_tx_size_map[TX_SIZES_ALL] = {
542#if CONFIG_CB4X4
543 TX_2X2, // TX_2X2
544#endif
545 TX_4X4, // TX_4X4
546 TX_4X4, // TX_8X8
547 TX_8X8, // TX_16X16
548 TX_16X16, // TX_32X32
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800549#if CONFIG_TX64X64
550 TX_32X32, // TX_64X64
551#endif // CONFIG_TX64X64
Jingning Hana9336322016-11-02 15:45:07 -0700552 TX_4X4, // TX_4X8
553 TX_4X4, // TX_8X4
554 TX_8X8, // TX_8X16
555 TX_8X8, // TX_16X8
556 TX_16X16, // TX_16X32
557 TX_16X16 // TX_32X16
558};
559
Yaowu Xuc27fc142016-08-22 16:08:15 -0700560static const TX_SIZE txsize_horz_map[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700561#if CONFIG_CB4X4
562 TX_2X2, // TX_2X2
563#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700564 TX_4X4, // TX_4X4
565 TX_8X8, // TX_8X8
566 TX_16X16, // TX_16X16
567 TX_32X32, // TX_32X32
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800568#if CONFIG_TX64X64
569 TX_64X64, // TX_64X64
570#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700571 TX_4X4, // TX_4X8
572 TX_8X8, // TX_8X4
573 TX_8X8, // TX_8X16
574 TX_16X16, // TX_16X8
575 TX_16X16, // TX_16X32
576 TX_32X32 // TX_32X16
Yaowu Xuc27fc142016-08-22 16:08:15 -0700577};
578
579static const TX_SIZE txsize_vert_map[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700580#if CONFIG_CB4X4
581 TX_2X2, // TX_2X2
582#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700583 TX_4X4, // TX_4X4
584 TX_8X8, // TX_8X8
585 TX_16X16, // TX_16X16
586 TX_32X32, // TX_32X32
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800587#if CONFIG_TX64X64
588 TX_64X64, // TX_64X64
589#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700590 TX_8X8, // TX_4X8
591 TX_4X4, // TX_8X4
592 TX_16X16, // TX_8X16
593 TX_8X8, // TX_16X8
594 TX_32X32, // TX_16X32
595 TX_16X16 // TX_32X16
Yaowu Xuc27fc142016-08-22 16:08:15 -0700596};
597
Jingning Han5d5cd6a2016-10-21 12:06:02 -0700598// Transform block width in pixels
599static const int tx_size_wide[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700600#if CONFIG_CB4X4
601 2,
602#endif
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800603 4, 8, 16, 32,
604#if CONFIG_TX64X64
605 64,
606#endif // CONFIG_TX64X64
607 4, 8, 8, 16, 16, 32,
Jingning Han5d5cd6a2016-10-21 12:06:02 -0700608};
609
610// Transform block height in pixels
611static const int tx_size_high[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700612#if CONFIG_CB4X4
613 2,
614#endif
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800615 4, 8, 16, 32,
616#if CONFIG_TX64X64
617 64,
618#endif // CONFIG_TX64X64
619 8, 4, 16, 8, 32, 16,
Jingning Han5d5cd6a2016-10-21 12:06:02 -0700620};
621
622// Transform block width in unit
623static const int tx_size_wide_unit[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700624#if CONFIG_CB4X4
625 1,
626#endif
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800627 1, 2, 4, 8,
628#if CONFIG_TX64X64
629 16,
630#endif // CONFIG_TX64X64
631 1, 2, 2, 4, 4, 8,
Jingning Han5d5cd6a2016-10-21 12:06:02 -0700632};
633
634// Transform block height in unit
635static const int tx_size_high_unit[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700636#if CONFIG_CB4X4
637 1,
638#endif
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800639 1, 2, 4, 8,
640#if CONFIG_TX64X64
641 16,
642#endif // CONFIG_TX64X64
643 2, 1, 4, 2, 8, 4,
Jingning Han5d5cd6a2016-10-21 12:06:02 -0700644};
Jingning Han02935f52016-10-19 14:52:53 -0700645
Jingning Han95cff5c2016-10-25 09:47:02 -0700646// Transform block width in log2
647static const int tx_size_wide_log2[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700648#if CONFIG_CB4X4
649 2,
650#endif
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800651 2, 3, 4, 5,
652#if CONFIG_TX64X64
653 6,
654#endif // CONFIG_TX64X64
655 2, 3, 3, 4, 4, 5,
Jingning Han95cff5c2016-10-25 09:47:02 -0700656};
657
658// Transform block height in log2
659static const int tx_size_high_log2[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700660#if CONFIG_CB4X4
661 2,
662#endif
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800663 2, 3, 4, 5,
664#if CONFIG_TX64X64
665 6,
666#endif // CONFIG_TX64X64
667 3, 2, 4, 3, 5, 4,
Jingning Han95cff5c2016-10-25 09:47:02 -0700668};
669
Jingning Han3d855c52016-10-21 10:51:31 -0700670static const int tx_size_2d[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700671#if CONFIG_CB4X4
672 4,
673#endif
Yaowu Xu49eea112016-11-09 14:50:06 -0800674 16, 64, 256, 1024,
Debargha Mukherjee0e119122016-11-04 12:10:23 -0700675#if CONFIG_TX64X64
676 4096,
677#endif // CONFIG_TX64X64
Yaowu Xu49eea112016-11-09 14:50:06 -0800678 32, 32, 128, 128, 512, 512,
Jingning Han3d855c52016-10-21 10:51:31 -0700679};
Jingning Han02935f52016-10-19 14:52:53 -0700680
Yaowu Xuc27fc142016-08-22 16:08:15 -0700681static const BLOCK_SIZE txsize_to_bsize[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700682#if CONFIG_CB4X4
683 BLOCK_4X4, // TX_2X2
684#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700685 BLOCK_4X4, // TX_4X4
686 BLOCK_8X8, // TX_8X8
687 BLOCK_16X16, // TX_16X16
688 BLOCK_32X32, // TX_32X32
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800689#if CONFIG_TX64X64
690 BLOCK_64X64, // TX_64X64
691#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700692 BLOCK_4X8, // TX_4X8
693 BLOCK_8X4, // TX_8X4
694 BLOCK_8X16, // TX_8X16
695 BLOCK_16X8, // TX_16X8
696 BLOCK_16X32, // TX_16X32
697 BLOCK_32X16, // TX_32X16
Yaowu Xuc27fc142016-08-22 16:08:15 -0700698};
699
700static const TX_SIZE txsize_sqr_map[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700701#if CONFIG_CB4X4
702 TX_2X2, // TX_2X2
703#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700704 TX_4X4, // TX_4X4
705 TX_8X8, // TX_8X8
706 TX_16X16, // TX_16X16
707 TX_32X32, // TX_32X32
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800708#if CONFIG_TX64X64
709 TX_64X64, // TX_64X64
710#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700711 TX_4X4, // TX_4X8
712 TX_4X4, // TX_8X4
713 TX_8X8, // TX_8X16
714 TX_8X8, // TX_16X8
715 TX_16X16, // TX_16X32
716 TX_16X16, // TX_32X16
Yaowu Xuc27fc142016-08-22 16:08:15 -0700717};
718
719static const TX_SIZE txsize_sqr_up_map[TX_SIZES_ALL] = {
Jingning Han607fa6a2016-10-26 10:46:28 -0700720#if CONFIG_CB4X4
721 TX_2X2, // TX_2X2
722#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700723 TX_4X4, // TX_4X4
724 TX_8X8, // TX_8X8
725 TX_16X16, // TX_16X16
726 TX_32X32, // TX_32X32
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800727#if CONFIG_TX64X64
728 TX_64X64, // TX_64X64
729#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700730 TX_8X8, // TX_4X8
731 TX_8X8, // TX_8X4
732 TX_16X16, // TX_8X16
733 TX_16X16, // TX_16X8
734 TX_32X32, // TX_16X32
735 TX_32X32, // TX_32X16
Yaowu Xuc27fc142016-08-22 16:08:15 -0700736};
737
Jingning Hanffb8b8b2016-12-01 12:48:24 -0800738/* clang-format off */
Yaowu Xuc27fc142016-08-22 16:08:15 -0700739static const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES] = {
740 TX_4X4, // ONLY_4X4
741 TX_8X8, // ALLOW_8X8
742 TX_16X16, // ALLOW_16X16
743 TX_32X32, // ALLOW_32X32
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800744#if CONFIG_TX64X64
745 TX_64X64, // ALLOW_64X64
746 TX_64X64, // TX_MODE_SELECT
747#else
Jingning Hanffb8b8b2016-12-01 12:48:24 -0800748 TX_32X32, // TX_MODE_SELECT
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800749#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -0700750};
Jingning Hanffb8b8b2016-12-01 12:48:24 -0800751/* clang-format on */
Yaowu Xuc27fc142016-08-22 16:08:15 -0700752
753static const BLOCK_SIZE ss_size_lookup[BLOCK_SIZES][2][2] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800754// ss_x == 0 ss_x == 0 ss_x == 1 ss_x == 1
755// ss_y == 0 ss_y == 1 ss_y == 0 ss_y == 1
756#if CONFIG_CB4X4
757 { { BLOCK_2X2, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
758 { { BLOCK_2X4, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
759 { { BLOCK_4X2, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
760#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -0700761 { { BLOCK_4X4, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
762 { { BLOCK_4X8, BLOCK_4X4 }, { BLOCK_INVALID, BLOCK_INVALID } },
763 { { BLOCK_8X4, BLOCK_INVALID }, { BLOCK_4X4, BLOCK_INVALID } },
764 { { BLOCK_8X8, BLOCK_8X4 }, { BLOCK_4X8, BLOCK_4X4 } },
765 { { BLOCK_8X16, BLOCK_8X8 }, { BLOCK_INVALID, BLOCK_4X8 } },
766 { { BLOCK_16X8, BLOCK_INVALID }, { BLOCK_8X8, BLOCK_8X4 } },
767 { { BLOCK_16X16, BLOCK_16X8 }, { BLOCK_8X16, BLOCK_8X8 } },
768 { { BLOCK_16X32, BLOCK_16X16 }, { BLOCK_INVALID, BLOCK_8X16 } },
769 { { BLOCK_32X16, BLOCK_INVALID }, { BLOCK_16X16, BLOCK_16X8 } },
770 { { BLOCK_32X32, BLOCK_32X16 }, { BLOCK_16X32, BLOCK_16X16 } },
771 { { BLOCK_32X64, BLOCK_32X32 }, { BLOCK_INVALID, BLOCK_16X32 } },
772 { { BLOCK_64X32, BLOCK_INVALID }, { BLOCK_32X32, BLOCK_32X16 } },
773 { { BLOCK_64X64, BLOCK_64X32 }, { BLOCK_32X64, BLOCK_32X32 } },
774#if CONFIG_EXT_PARTITION
775 { { BLOCK_64X128, BLOCK_64X64 }, { BLOCK_INVALID, BLOCK_32X64 } },
776 { { BLOCK_128X64, BLOCK_INVALID }, { BLOCK_64X64, BLOCK_64X32 } },
777 { { BLOCK_128X128, BLOCK_128X64 }, { BLOCK_64X128, BLOCK_64X64 } },
778#endif // CONFIG_EXT_PARTITION
779};
780
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700781static const TX_SIZE uv_txsize_lookup[BLOCK_SIZES][TX_SIZES_ALL][2][2] = {
Jingning Hanf1702dd2016-11-30 21:17:59 -0800782// ss_x == 0 ss_x == 0 ss_x == 1 ss_x == 1
783// ss_y == 0 ss_y == 1 ss_y == 0 ss_y == 1
784#if CONFIG_CB4X4
785 {
786 // BLOCK_2X2
787 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
788 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
789 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
790 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
791 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
792#if CONFIG_TX64X64
793 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
794#endif // CONFIG_TX64X64
795 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
796 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
797 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
798 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
799 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
800 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
801 },
802 {
803 // BLOCK_2X4
804 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
805 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
806 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
807 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
808 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
809#if CONFIG_TX64X64
810 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
811#endif // CONFIG_TX64X64
812 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
813 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
814 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
815 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
816 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
817 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
818 },
819 {
820 // BLOCK_2X4
821 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
822 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
823 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
824 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
825 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
826#if CONFIG_TX64X64
827 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
828#endif // CONFIG_TX64X64
829 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
830 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
831 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
832 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
833 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
834 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
835 },
836#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700837 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700838// BLOCK_4X4
839#if CONFIG_CB4X4
Jingning Hancabd9892016-12-01 12:28:42 -0800840 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
841 { { TX_4X4, TX_2X2 }, { TX_2X2, TX_2X2 } },
842#else
Jingning Han607fa6a2016-10-26 10:46:28 -0700843 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
Jingning Hancabd9892016-12-01 12:28:42 -0800844#endif // CONFIG_CB4X4
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700845 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
846 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
847 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800848#if CONFIG_TX64X64
849 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
850#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700851 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
852 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
853 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
854 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
855 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
856 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700857 },
858 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700859// BLOCK_4X8
860#if CONFIG_CB4X4
Jingning Hancabd9892016-12-01 12:28:42 -0800861 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
862 { { TX_4X4, TX_2X2 }, { TX_2X2, TX_2X2 } },
863#else
Jingning Han607fa6a2016-10-26 10:46:28 -0700864 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
865#endif
Jingning Han4542d222016-11-08 11:15:16 -0800866 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
867 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
868 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800869#if CONFIG_TX64X64
870 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
871#endif // CONFIG_TX64X64
872 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } }, // used
873 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
874 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
Jingning Han4542d222016-11-08 11:15:16 -0800875 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
876 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
877 { { TX_4X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700878 },
879 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700880// BLOCK_8X4
881#if CONFIG_CB4X4
Jingning Hancabd9892016-12-01 12:28:42 -0800882 { { TX_2X2, TX_2X2 }, { TX_2X2, TX_2X2 } },
883 { { TX_4X4, TX_2X2 }, { TX_2X2, TX_2X2 } },
884#else
Jingning Han607fa6a2016-10-26 10:46:28 -0700885 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
886#endif
Jingning Han4542d222016-11-08 11:15:16 -0800887 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
888 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
889 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800890#if CONFIG_TX64X64
891 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
892#endif // CONFIG_TX64X64
893 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
894 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } }, // used
895 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
Jingning Han4542d222016-11-08 11:15:16 -0800896 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
897 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
898 { { TX_8X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700899 },
900 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700901// BLOCK_8X8
902#if CONFIG_CB4X4
903 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
904#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700905 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee6de06dd2016-09-22 10:10:20 -0700906 { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800907 { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
908 { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
909#if CONFIG_TX64X64
910 { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
911#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700912 { { TX_4X8, TX_4X4 }, { TX_4X8, TX_4X4 } },
913 { { TX_8X4, TX_8X4 }, { TX_4X4, TX_4X4 } },
914 { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
915 { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
916 { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
917 { { TX_8X8, TX_8X4 }, { TX_4X8, TX_4X4 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700918 },
919 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700920// BLOCK_8X16
921#if CONFIG_CB4X4
922 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
923#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700924 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
925 { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
926 { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
927 { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800928#if CONFIG_TX64X64
929 { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
930#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700931 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
932 { { TX_8X4, TX_8X4 }, { TX_4X4, TX_4X4 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800933 { { TX_8X16, TX_8X8 }, { TX_4X8, TX_4X8 } }, // used
Jingning Han4542d222016-11-08 11:15:16 -0800934 { { TX_8X16, TX_8X8 }, { TX_4X8, TX_4X8 } },
935 { { TX_8X16, TX_8X8 }, { TX_4X8, TX_4X8 } },
936 { { TX_8X16, TX_8X8 }, { TX_4X8, TX_4X8 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700937 },
938 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700939// BLOCK_16X8
940#if CONFIG_CB4X4
941 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
942#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700943 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
944 { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800945 { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
946 { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
947#if CONFIG_TX64X64
948 { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
949#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700950 { { TX_4X8, TX_4X4 }, { TX_4X8, TX_4X4 } },
951 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
Jingning Han4542d222016-11-08 11:15:16 -0800952 { { TX_16X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800953 { { TX_16X8, TX_8X4 }, { TX_8X8, TX_8X4 } }, // used
Jingning Han4542d222016-11-08 11:15:16 -0800954 { { TX_16X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
955 { { TX_16X8, TX_8X4 }, { TX_8X8, TX_8X4 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700956 },
957 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700958// BLOCK_16X16
959#if CONFIG_CB4X4
960 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
961#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700962 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
963 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
964 { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
965 { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800966#if CONFIG_TX64X64
967 { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
968#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700969 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
970 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
971 { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
972 { { TX_16X8, TX_16X8 }, { TX_8X8, TX_8X8 } },
973 { { TX_16X16, TX_16X8 }, { TX_8X16, TX_8X8 } },
974 { { TX_16X16, TX_16X8 }, { TX_8X16, TX_8X8 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700975 },
976 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700977// BLOCK_16X32
978#if CONFIG_CB4X4
979 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
980#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700981 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
982 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
983 { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
984 { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800985#if CONFIG_TX64X64
986 { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
987#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700988 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
989 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
990 { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
991 { { TX_16X8, TX_16X8 }, { TX_8X8, TX_8X8 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -0800992 { { TX_16X32, TX_16X16 }, { TX_8X16, TX_8X16 } }, // used
Jingning Han4542d222016-11-08 11:15:16 -0800993 { { TX_16X32, TX_16X16 }, { TX_8X16, TX_8X16 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -0700994 },
995 {
Jingning Han607fa6a2016-10-26 10:46:28 -0700996// BLOCK_32X16
997#if CONFIG_CB4X4
998 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
999#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001000 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1001 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1002 { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1003 { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001004#if CONFIG_TX64X64
1005 { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
1006#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001007 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1008 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1009 { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
1010 { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
Jingning Han4542d222016-11-08 11:15:16 -08001011 { { TX_32X16, TX_16X8 }, { TX_16X16, TX_16X8 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001012 { { TX_32X16, TX_16X8 }, { TX_16X16, TX_16X8 } }, // used
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001013 },
1014 {
Jingning Han607fa6a2016-10-26 10:46:28 -07001015// BLOCK_32X32
1016#if CONFIG_CB4X4
1017 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1018#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001019 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1020 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1021 { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1022 { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001023#if CONFIG_TX64X64
1024 { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
1025#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001026 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1027 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1028 { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1029 { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1030 { { TX_16X32, TX_16X16 }, { TX_16X32, TX_16X16 } },
1031 { { TX_32X16, TX_32X16 }, { TX_16X16, TX_16X16 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001032 },
1033 {
Jingning Han607fa6a2016-10-26 10:46:28 -07001034// BLOCK_32X64
1035#if CONFIG_CB4X4
1036 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1037#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001038 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1039 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1040 { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1041 { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001042#if CONFIG_TX64X64
1043 { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
1044#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001045 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1046 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1047 { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1048 { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1049 { { TX_16X32, TX_16X32 }, { TX_16X16, TX_16X16 } },
1050 { { TX_32X16, TX_32X16 }, { TX_16X16, TX_16X16 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001051 },
1052 {
Jingning Han607fa6a2016-10-26 10:46:28 -07001053// BLOCK_64X32
1054#if CONFIG_CB4X4
1055 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1056#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001057 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1058 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1059 { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1060 { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001061#if CONFIG_TX64X64
1062 { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
1063#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001064 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1065 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1066 { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1067 { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1068 { { TX_16X32, TX_16X16 }, { TX_16X32, TX_16X16 } },
1069 { { TX_32X16, TX_16X16 }, { TX_32X16, TX_16X16 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001070 },
1071 {
Jingning Han607fa6a2016-10-26 10:46:28 -07001072// BLOCK_64X64
1073#if CONFIG_CB4X4
1074 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1075#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001076 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1077 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1078 { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1079 { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001080#if CONFIG_TX64X64
1081 { { TX_64X64, TX_32X32 }, { TX_32X32, TX_32X32 } },
1082#endif // CONFIG_TX64X64
1083 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1084 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1085 { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1086 { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1087 { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
1088 { { TX_32X16, TX_32X16 }, { TX_32X16, TX_16X16 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001089 },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001090#if CONFIG_EXT_PARTITION
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001091 {
Jingning Han607fa6a2016-10-26 10:46:28 -07001092// BLOCK_64X128
1093#if CONFIG_CB4X4
1094 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1095#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001096 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1097 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1098 { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1099 { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001100#if CONFIG_TX64X64
1101 { { TX_64X64, TX_64X64 }, { TX_32X32, TX_32X32 } },
1102#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001103 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1104 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1105 { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1106 { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1107 { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
1108 { { TX_32X16, TX_32X16 }, { TX_32X16, TX_32X16 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001109 },
1110 {
Jingning Han607fa6a2016-10-26 10:46:28 -07001111// BLOCK_128X64
1112#if CONFIG_CB4X4
1113 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1114#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001115 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1116 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1117 { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1118 { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001119#if CONFIG_TX64X64
1120 { { TX_64X64, TX_32X32 }, { TX_64X64, TX_32X32 } },
1121#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001122 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1123 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1124 { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1125 { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1126 { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
1127 { { TX_32X16, TX_32X16 }, { TX_32X16, TX_32X16 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001128 },
1129 {
Jingning Han607fa6a2016-10-26 10:46:28 -07001130// BLOCK_128X128
1131#if CONFIG_CB4X4
1132 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1133#endif
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001134 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1135 { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
1136 { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
1137 { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001138#if CONFIG_TX64X64
1139 { { TX_64X64, TX_64X64 }, { TX_64X64, TX_64X64 } },
1140#endif // CONFIG_TX64X64
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001141 { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
1142 { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
1143 { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
1144 { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
1145 { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
1146 { { TX_32X16, TX_32X16 }, { TX_32X16, TX_32X16 } },
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001147 },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001148#endif // CONFIG_EXT_PARTITION
Debargha Mukherjee2f123402016-08-30 17:43:38 -07001149};
1150
Yaowu Xuc27fc142016-08-22 16:08:15 -07001151// Generates 4 bit field in which each bit set to 1 represents
1152// a blocksize partition 1111 means we split 64x64, 32x32, 16x16
1153// and 8x8. 1000 means we just split the 64x64 to 32x32
1154static const struct {
1155 PARTITION_CONTEXT above;
1156 PARTITION_CONTEXT left;
1157} partition_context_lookup[BLOCK_SIZES] = {
1158#if CONFIG_EXT_PARTITION
Jingning Hanf1702dd2016-11-30 21:17:59 -08001159#if CONFIG_CB4X4
1160 { 31, 31 }, // 2X2 - {0b11111, 0b11111}
1161 { 31, 31 }, // 2X4 - {0b11111, 0b11111}
1162 { 31, 31 }, // 4X2 - {0b11111, 0b11111}
1163#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -07001164 { 31, 31 }, // 4X4 - {0b11111, 0b11111}
1165 { 31, 30 }, // 4X8 - {0b11111, 0b11110}
1166 { 30, 31 }, // 8X4 - {0b11110, 0b11111}
1167 { 30, 30 }, // 8X8 - {0b11110, 0b11110}
1168 { 30, 28 }, // 8X16 - {0b11110, 0b11100}
1169 { 28, 30 }, // 16X8 - {0b11100, 0b11110}
1170 { 28, 28 }, // 16X16 - {0b11100, 0b11100}
1171 { 28, 24 }, // 16X32 - {0b11100, 0b11000}
1172 { 24, 28 }, // 32X16 - {0b11000, 0b11100}
1173 { 24, 24 }, // 32X32 - {0b11000, 0b11000}
1174 { 24, 16 }, // 32X64 - {0b11000, 0b10000}
1175 { 16, 24 }, // 64X32 - {0b10000, 0b11000}
1176 { 16, 16 }, // 64X64 - {0b10000, 0b10000}
1177 { 16, 0 }, // 64X128- {0b10000, 0b00000}
1178 { 0, 16 }, // 128X64- {0b00000, 0b10000}
1179 { 0, 0 }, // 128X128-{0b00000, 0b00000}
1180#else
Jingning Hanf1702dd2016-11-30 21:17:59 -08001181#if CONFIG_CB4X4
1182 { 15, 15 }, // 2X2 - {0b1111, 0b1111}
1183 { 15, 15 }, // 2X4 - {0b1111, 0b1111}
1184 { 15, 15 }, // 4X2 - {0b1111, 0b1111}
1185#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -07001186 { 15, 15 }, // 4X4 - {0b1111, 0b1111}
1187 { 15, 14 }, // 4X8 - {0b1111, 0b1110}
1188 { 14, 15 }, // 8X4 - {0b1110, 0b1111}
1189 { 14, 14 }, // 8X8 - {0b1110, 0b1110}
1190 { 14, 12 }, // 8X16 - {0b1110, 0b1100}
1191 { 12, 14 }, // 16X8 - {0b1100, 0b1110}
1192 { 12, 12 }, // 16X16 - {0b1100, 0b1100}
1193 { 12, 8 }, // 16X32 - {0b1100, 0b1000}
1194 { 8, 12 }, // 32X16 - {0b1000, 0b1100}
1195 { 8, 8 }, // 32X32 - {0b1000, 0b1000}
1196 { 8, 0 }, // 32X64 - {0b1000, 0b0000}
1197 { 0, 8 }, // 64X32 - {0b0000, 0b1000}
1198 { 0, 0 }, // 64X64 - {0b0000, 0b0000}
1199#endif // CONFIG_EXT_PARTITION
1200};
1201
1202#if CONFIG_SUPERTX
1203static const TX_SIZE uvsupertx_size_lookup[TX_SIZES][2][2] = {
Jingning Han607fa6a2016-10-26 10:46:28 -07001204// ss_x == 0 ss_x == 0 ss_x == 1 ss_x == 1
1205// ss_y == 0 ss_y == 1 ss_y == 0 ss_y == 1
1206#if CONFIG_CB4X4
1207 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1208#endif
Yaowu Xuc27fc142016-08-22 16:08:15 -07001209 { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
1210 { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
1211 { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
1212 { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
Debargha Mukherjee18d38f62016-11-17 20:30:16 -08001213#if CONFIG_TX64X64
1214 { { TX_64X64, TX_32X32 }, { TX_32X32, TX_32X32 } },
1215#endif // CONFIG_TX64X64
Yaowu Xuc27fc142016-08-22 16:08:15 -07001216};
1217
1218#if CONFIG_EXT_PARTITION_TYPES
1219static const int partition_supertx_context_lookup[EXT_PARTITION_TYPES] = {
1220 -1, 0, 0, 1, 0, 0, 0, 0
1221};
1222
1223#else
1224static const int partition_supertx_context_lookup[PARTITION_TYPES] = { -1, 0, 0,
1225 1 };
1226#endif // CONFIG_EXT_PARTITION_TYPES
1227#endif // CONFIG_SUPERTX
1228
1229#ifdef __cplusplus
1230} // extern "C"
1231#endif
1232
Yaowu Xuf883b422016-08-30 14:01:10 -07001233#endif // AV1_COMMON_COMMON_DATA_H_