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