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 AOM_AV1_COMMON_ENUMS_H_ 13 #define AOM_AV1_COMMON_ENUMS_H_ 14 15 #include "config/aom_config.h" 16 17 #include "aom/aom_codec.h" 18 #include "aom/aom_integer.h" 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 #undef MAX_SB_SIZE 25 26 // Max superblock size 27 #define MAX_SB_SIZE_LOG2 7 28 #define MAX_SB_SIZE (1 << MAX_SB_SIZE_LOG2) 29 #define MAX_SB_SQUARE (MAX_SB_SIZE * MAX_SB_SIZE) 30 31 // Min superblock size 32 #define MIN_SB_SIZE_LOG2 6 33 34 // Pixels per Mode Info (MI) unit 35 #define MI_SIZE_LOG2 2 36 #define MI_SIZE (1 << MI_SIZE_LOG2) 37 38 // MI-units per max superblock (MI Block - MIB) 39 #define MAX_MIB_SIZE_LOG2 (MAX_SB_SIZE_LOG2 - MI_SIZE_LOG2) 40 #define MAX_MIB_SIZE (1 << MAX_MIB_SIZE_LOG2) 41 42 // MI-units per min superblock 43 #define MIN_MIB_SIZE_LOG2 (MIN_SB_SIZE_LOG2 - MI_SIZE_LOG2) 44 45 // Mask to extract MI offset within max MIB 46 #define MAX_MIB_MASK (MAX_MIB_SIZE - 1) 47 48 // Maximum number of tile rows and tile columns 49 #define MAX_TILE_ROWS 64 50 #define MAX_TILE_COLS 64 51 52 #define MAX_VARTX_DEPTH 2 53 54 #define MI_SIZE_64X64 (64 >> MI_SIZE_LOG2) 55 #define MI_SIZE_128X128 (128 >> MI_SIZE_LOG2) 56 57 #define MAX_PALETTE_SQUARE (64 * 64) 58 // Maximum number of colors in a palette. 59 #define PALETTE_MAX_SIZE 8 60 // Minimum number of colors in a palette. 61 #define PALETTE_MIN_SIZE 2 62 63 #define FRAME_OFFSET_BITS 5 64 #define MAX_FRAME_DISTANCE ((1 << FRAME_OFFSET_BITS) - 1) 65 66 #define REF_FRAMES_LOG2 3 67 #define REF_FRAMES (1 << REF_FRAMES_LOG2) 68 69 // 4 scratch frames for the new frames to support a maximum of 4 cores decoding 70 // in parallel, 3 for scaled references on the encoder. 71 // TODO(hkuang): Add ondemand frame buffers instead of hardcoding the number 72 // of framebuffers. 73 // TODO(jkoleszar): These 3 extra references could probably come from the 74 // normal reference pool. 75 #define FRAME_BUFFERS (REF_FRAMES + 7) 76 77 // 4 frame filter levels: y plane vertical, y plane horizontal, 78 // u plane, and v plane 79 #define FRAME_LF_COUNT 4 80 #define DEFAULT_DELTA_LF_MULTI 0 81 #define MAX_MODE_LF_DELTAS 2 82 83 #define DIST_PRECISION_BITS 4 84 #define DIST_PRECISION (1 << DIST_PRECISION_BITS) // 16 85 86 // TODO(chengchen): Temporal flag serve as experimental flag for WIP 87 // bitmask construction. 88 // Shall be removed when bitmask code is completely checkedin 89 #define LOOP_FILTER_BITMASK 0 90 91 #define PROFILE_BITS 3 92 // The following three profiles are currently defined. 93 // Profile 0. 8-bit and 10-bit 4:2:0 and 4:0:0 only. 94 // Profile 1. 8-bit and 10-bit 4:4:4 95 // Profile 2. 8-bit and 10-bit 4:2:2 96 // 12-bit 4:0:0, 4:2:2 and 4:4:4 97 // Since we have three bits for the profiles, it can be extended later. 98 typedef enum BITSTREAM_PROFILE { 99 PROFILE_0, 100 PROFILE_1, 101 PROFILE_2, 102 MAX_PROFILES, 103 } BITSTREAM_PROFILE; 104 105 #define LEVEL_MAJOR_BITS 3 106 #define LEVEL_MINOR_BITS 2 107 #define LEVEL_BITS (LEVEL_MAJOR_BITS + LEVEL_MINOR_BITS) 108 109 #define LEVEL_MAJOR_MIN 2 110 #define LEVEL_MAJOR_MAX ((1 << LEVEL_MAJOR_BITS) - 1 + LEVEL_MAJOR_MIN) 111 #define LEVEL_MINOR_MIN 0 112 #define LEVEL_MINOR_MAX ((1 << LEVEL_MINOR_BITS) - 1) 113 114 #define OP_POINTS_CNT_MINUS_1_BITS 5 115 #define OP_POINTS_IDC_BITS 12 116 117 // Note: Some enums use the attribute 'packed' to use smallest possible integer 118 // type, so that we can save memory when they are used in structs/arrays. 119 120 typedef enum ATTRIBUTE_PACKED { 121 BLOCK_4X4, 122 BLOCK_4X8, 123 BLOCK_8X4, 124 BLOCK_8X8, 125 BLOCK_8X16, 126 BLOCK_16X8, 127 BLOCK_16X16, 128 BLOCK_16X32, 129 BLOCK_32X16, 130 BLOCK_32X32, 131 BLOCK_32X64, 132 BLOCK_64X32, 133 BLOCK_64X64, 134 BLOCK_64X128, 135 BLOCK_128X64, 136 BLOCK_128X128, 137 BLOCK_4X16, 138 BLOCK_16X4, 139 BLOCK_8X32, 140 BLOCK_32X8, 141 BLOCK_16X64, 142 BLOCK_64X16, 143 BLOCK_SIZES_ALL, 144 BLOCK_SIZES = BLOCK_4X16, 145 BLOCK_INVALID = 255, 146 BLOCK_LARGEST = (BLOCK_SIZES - 1) 147 } BLOCK_SIZE; 148 149 // 4X4, 8X8, 16X16, 32X32, 64X64, 128X128 150 #define SQR_BLOCK_SIZES 6 151 152 typedef enum ATTRIBUTE_PACKED { 153 PARTITION_NONE, 154 PARTITION_HORZ, 155 PARTITION_VERT, 156 PARTITION_SPLIT, 157 PARTITION_HORZ_A, // HORZ split and the top partition is split again 158 PARTITION_HORZ_B, // HORZ split and the bottom partition is split again 159 PARTITION_VERT_A, // VERT split and the left partition is split again 160 PARTITION_VERT_B, // VERT split and the right partition is split again 161 PARTITION_HORZ_4, // 4:1 horizontal partition 162 PARTITION_VERT_4, // 4:1 vertical partition 163 EXT_PARTITION_TYPES, 164 PARTITION_TYPES = PARTITION_SPLIT + 1, 165 PARTITION_INVALID = 255 166 } PARTITION_TYPE; 167 168 typedef char PARTITION_CONTEXT; 169 #define PARTITION_PLOFFSET 4 // number of probability models per block size 170 #define PARTITION_BLOCK_SIZES 5 171 #define PARTITION_CONTEXTS (PARTITION_BLOCK_SIZES * PARTITION_PLOFFSET) 172 173 // block transform size 174 #if defined(_MSC_VER) 175 typedef uint8_t TX_SIZE; 176 enum ATTRIBUTE_PACKED { 177 #else 178 typedef enum ATTRIBUTE_PACKED { 179 #endif 180 TX_4X4, // 4x4 transform 181 TX_8X8, // 8x8 transform 182 TX_16X16, // 16x16 transform 183 TX_32X32, // 32x32 transform 184 TX_64X64, // 64x64 transform 185 TX_4X8, // 4x8 transform 186 TX_8X4, // 8x4 transform 187 TX_8X16, // 8x16 transform 188 TX_16X8, // 16x8 transform 189 TX_16X32, // 16x32 transform 190 TX_32X16, // 32x16 transform 191 TX_32X64, // 32x64 transform 192 TX_64X32, // 64x32 transform 193 TX_4X16, // 4x16 transform 194 TX_16X4, // 16x4 transform 195 TX_8X32, // 8x32 transform 196 TX_32X8, // 32x8 transform 197 TX_16X64, // 16x64 transform 198 TX_64X16, // 64x16 transform 199 TX_SIZES_ALL, // Includes rectangular transforms 200 TX_SIZES = TX_4X8, // Does NOT include rectangular transforms 201 TX_SIZES_LARGEST = TX_64X64, 202 TX_INVALID = 255 // Invalid transform size 203 #if defined(_MSC_VER) 204 }; 205 #else 206 } TX_SIZE; 207 #endif 208 209 #define TX_SIZE_LUMA_MIN (TX_4X4) 210 /* We don't need to code a transform size unless the allowed size is at least 211 one more than the minimum. */ 212 #define TX_SIZE_CTX_MIN (TX_SIZE_LUMA_MIN + 1) 213 214 // Maximum tx_size categories 215 #define MAX_TX_CATS (TX_SIZES - TX_SIZE_CTX_MIN) 216 #define MAX_TX_DEPTH 2 217 218 #define MAX_TX_SIZE_LOG2 (6) 219 #define MAX_TX_SIZE (1 << MAX_TX_SIZE_LOG2) 220 #define MIN_TX_SIZE_LOG2 2 221 #define MIN_TX_SIZE (1 << MIN_TX_SIZE_LOG2) 222 #define MAX_TX_SQUARE (MAX_TX_SIZE * MAX_TX_SIZE) 223 224 // Pad 4 extra columns to remove horizontal availability check. 225 #define TX_PAD_HOR_LOG2 2 226 #define TX_PAD_HOR 4 227 // Pad 6 extra rows (2 on top and 4 on bottom) to remove vertical availability 228 // check. 229 #define TX_PAD_TOP 2 230 #define TX_PAD_BOTTOM 4 231 #define TX_PAD_VER (TX_PAD_TOP + TX_PAD_BOTTOM) 232 // Pad 16 extra bytes to avoid reading overflow in SIMD optimization. 233 #define TX_PAD_END 16 234 #define TX_PAD_2D ((32 + TX_PAD_HOR) * (32 + TX_PAD_VER) + TX_PAD_END) 235 236 // Number of maxium size transform blocks in the maximum size superblock 237 #define MAX_TX_BLOCKS_IN_MAX_SB_LOG2 ((MAX_SB_SIZE_LOG2 - MAX_TX_SIZE_LOG2) * 2) 238 #define MAX_TX_BLOCKS_IN_MAX_SB (1 << MAX_TX_BLOCKS_IN_MAX_SB_LOG2) 239 240 // frame transform mode 241 typedef enum ATTRIBUTE_PACKED { 242 ONLY_4X4, // use only 4x4 transform 243 TX_MODE_LARGEST, // transform size is the largest possible for pu size 244 TX_MODE_SELECT, // transform specified for each block 245 TX_MODES, 246 } TX_MODE; 247 248 // 1D tx types 249 typedef enum ATTRIBUTE_PACKED { 250 DCT_1D, 251 ADST_1D, 252 FLIPADST_1D, 253 IDTX_1D, 254 TX_TYPES_1D, 255 } TX_TYPE_1D; 256 257 typedef enum ATTRIBUTE_PACKED { 258 DCT_DCT, // DCT in both horizontal and vertical 259 ADST_DCT, // ADST in vertical, DCT in horizontal 260 DCT_ADST, // DCT in vertical, ADST in horizontal 261 ADST_ADST, // ADST in both directions 262 FLIPADST_DCT, 263 DCT_FLIPADST, 264 FLIPADST_FLIPADST, 265 ADST_FLIPADST, 266 FLIPADST_ADST, 267 IDTX, 268 V_DCT, 269 H_DCT, 270 V_ADST, 271 H_ADST, 272 V_FLIPADST, 273 H_FLIPADST, 274 TX_TYPES, 275 } TX_TYPE; 276 277 typedef enum ATTRIBUTE_PACKED { 278 REG_REG, 279 REG_SMOOTH, 280 REG_SHARP, 281 SMOOTH_REG, 282 SMOOTH_SMOOTH, 283 SMOOTH_SHARP, 284 SHARP_REG, 285 SHARP_SMOOTH, 286 SHARP_SHARP, 287 } DUAL_FILTER_TYPE; 288 289 typedef enum ATTRIBUTE_PACKED { 290 // DCT only 291 EXT_TX_SET_DCTONLY, 292 // DCT + Identity only 293 EXT_TX_SET_DCT_IDTX, 294 // Discrete Trig transforms w/o flip (4) + Identity (1) 295 EXT_TX_SET_DTT4_IDTX, 296 // Discrete Trig transforms w/o flip (4) + Identity (1) + 1D Hor/vert DCT (2) 297 EXT_TX_SET_DTT4_IDTX_1DDCT, 298 // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver DCT (2) 299 EXT_TX_SET_DTT9_IDTX_1DDCT, 300 // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver (6) 301 EXT_TX_SET_ALL16, 302 EXT_TX_SET_TYPES 303 } TxSetType; 304 305 #define IS_2D_TRANSFORM(tx_type) (tx_type < IDTX) 306 307 #define EXT_TX_SIZES 4 // number of sizes that use extended transforms 308 #define EXT_TX_SETS_INTER 4 // Sets of transform selections for INTER 309 #define EXT_TX_SETS_INTRA 3 // Sets of transform selections for INTRA 310 311 typedef enum ATTRIBUTE_PACKED { 312 AOM_LAST_FLAG = 1 << 0, 313 AOM_LAST2_FLAG = 1 << 1, 314 AOM_LAST3_FLAG = 1 << 2, 315 AOM_GOLD_FLAG = 1 << 3, 316 AOM_BWD_FLAG = 1 << 4, 317 AOM_ALT2_FLAG = 1 << 5, 318 AOM_ALT_FLAG = 1 << 6, 319 AOM_REFFRAME_ALL = (1 << 7) - 1 320 } AOM_REFFRAME; 321 322 typedef enum ATTRIBUTE_PACKED { 323 UNIDIR_COMP_REFERENCE, 324 BIDIR_COMP_REFERENCE, 325 COMP_REFERENCE_TYPES, 326 } COMP_REFERENCE_TYPE; 327 328 typedef enum ATTRIBUTE_PACKED { 329 PLANE_TYPE_Y, 330 PLANE_TYPE_UV, 331 PLANE_TYPES 332 } PLANE_TYPE; 333 334 #define CFL_ALPHABET_SIZE_LOG2 4 335 #define CFL_ALPHABET_SIZE (1 << CFL_ALPHABET_SIZE_LOG2) 336 #define CFL_MAGS_SIZE ((2 << CFL_ALPHABET_SIZE_LOG2) + 1) 337 #define CFL_IDX_U(idx) (idx >> CFL_ALPHABET_SIZE_LOG2) 338 #define CFL_IDX_V(idx) (idx & (CFL_ALPHABET_SIZE - 1)) 339 340 typedef enum ATTRIBUTE_PACKED { 341 CFL_PRED_U, 342 CFL_PRED_V, 343 CFL_PRED_PLANES 344 } CFL_PRED_TYPE; 345 346 typedef enum ATTRIBUTE_PACKED { 347 CFL_SIGN_ZERO, 348 CFL_SIGN_NEG, 349 CFL_SIGN_POS, 350 CFL_SIGNS 351 } CFL_SIGN_TYPE; 352 353 typedef enum ATTRIBUTE_PACKED { 354 CFL_DISALLOWED, 355 CFL_ALLOWED, 356 CFL_ALLOWED_TYPES 357 } CFL_ALLOWED_TYPE; 358 359 // CFL_SIGN_ZERO,CFL_SIGN_ZERO is invalid 360 #define CFL_JOINT_SIGNS (CFL_SIGNS * CFL_SIGNS - 1) 361 // CFL_SIGN_U is equivalent to (js + 1) / 3 for js in 0 to 8 362 #define CFL_SIGN_U(js) (((js + 1) * 11) >> 5) 363 // CFL_SIGN_V is equivalent to (js + 1) % 3 for js in 0 to 8 364 #define CFL_SIGN_V(js) ((js + 1) - CFL_SIGNS * CFL_SIGN_U(js)) 365 366 // There is no context when the alpha for a given plane is zero. 367 // So there are 2 fewer contexts than joint signs. 368 #define CFL_ALPHA_CONTEXTS (CFL_JOINT_SIGNS + 1 - CFL_SIGNS) 369 #define CFL_CONTEXT_U(js) (js + 1 - CFL_SIGNS) 370 // Also, the contexts are symmetric under swapping the planes. 371 #define CFL_CONTEXT_V(js) \ 372 (CFL_SIGN_V(js) * CFL_SIGNS + CFL_SIGN_U(js) - CFL_SIGNS) 373 374 typedef enum ATTRIBUTE_PACKED { 375 PALETTE_MAP, 376 COLOR_MAP_TYPES, 377 } COLOR_MAP_TYPE; 378 379 typedef enum ATTRIBUTE_PACKED { 380 TWO_COLORS, 381 THREE_COLORS, 382 FOUR_COLORS, 383 FIVE_COLORS, 384 SIX_COLORS, 385 SEVEN_COLORS, 386 EIGHT_COLORS, 387 PALETTE_SIZES 388 } PALETTE_SIZE; 389 390 typedef enum ATTRIBUTE_PACKED { 391 PALETTE_COLOR_ONE, 392 PALETTE_COLOR_TWO, 393 PALETTE_COLOR_THREE, 394 PALETTE_COLOR_FOUR, 395 PALETTE_COLOR_FIVE, 396 PALETTE_COLOR_SIX, 397 PALETTE_COLOR_SEVEN, 398 PALETTE_COLOR_EIGHT, 399 PALETTE_COLORS 400 } PALETTE_COLOR; 401 402 // Note: All directional predictors must be between V_PRED and D67_PRED (both 403 // inclusive). 404 typedef enum ATTRIBUTE_PACKED { 405 DC_PRED, // Average of above and left pixels 406 V_PRED, // Vertical 407 H_PRED, // Horizontal 408 D45_PRED, // Directional 45 degree 409 D135_PRED, // Directional 135 degree 410 D113_PRED, // Directional 113 degree 411 D157_PRED, // Directional 157 degree 412 D203_PRED, // Directional 203 degree 413 D67_PRED, // Directional 67 degree 414 SMOOTH_PRED, // Combination of horizontal and vertical interpolation 415 SMOOTH_V_PRED, // Vertical interpolation 416 SMOOTH_H_PRED, // Horizontal interpolation 417 PAETH_PRED, // Predict from the direction of smallest gradient 418 NEARESTMV, 419 NEARMV, 420 GLOBALMV, 421 NEWMV, 422 // Compound ref compound modes 423 NEAREST_NEARESTMV, 424 NEAR_NEARMV, 425 NEAREST_NEWMV, 426 NEW_NEARESTMV, 427 NEAR_NEWMV, 428 NEW_NEARMV, 429 GLOBAL_GLOBALMV, 430 NEW_NEWMV, 431 MB_MODE_COUNT, 432 INTRA_MODE_START = DC_PRED, 433 INTRA_MODE_END = NEARESTMV, 434 INTRA_MODE_NUM = INTRA_MODE_END - INTRA_MODE_START, 435 SINGLE_INTER_MODE_START = NEARESTMV, 436 SINGLE_INTER_MODE_END = NEAREST_NEARESTMV, 437 SINGLE_INTER_MODE_NUM = SINGLE_INTER_MODE_END - SINGLE_INTER_MODE_START, 438 COMP_INTER_MODE_START = NEAREST_NEARESTMV, 439 COMP_INTER_MODE_END = MB_MODE_COUNT, 440 COMP_INTER_MODE_NUM = COMP_INTER_MODE_END - COMP_INTER_MODE_START, 441 INTER_MODE_START = NEARESTMV, 442 INTER_MODE_END = MB_MODE_COUNT, 443 INTRA_MODES = PAETH_PRED + 1, // PAETH_PRED has to be the last intra mode. 444 INTRA_INVALID = MB_MODE_COUNT // For uv_mode in inter blocks 445 } PREDICTION_MODE; 446 447 // TODO(ltrudeau) Do we really want to pack this? 448 // TODO(ltrudeau) Do we match with PREDICTION_MODE? 449 typedef enum ATTRIBUTE_PACKED { 450 UV_DC_PRED, // Average of above and left pixels 451 UV_V_PRED, // Vertical 452 UV_H_PRED, // Horizontal 453 UV_D45_PRED, // Directional 45 degree 454 UV_D135_PRED, // Directional 135 degree 455 UV_D113_PRED, // Directional 113 degree 456 UV_D157_PRED, // Directional 157 degree 457 UV_D203_PRED, // Directional 203 degree 458 UV_D67_PRED, // Directional 67 degree 459 UV_SMOOTH_PRED, // Combination of horizontal and vertical interpolation 460 UV_SMOOTH_V_PRED, // Vertical interpolation 461 UV_SMOOTH_H_PRED, // Horizontal interpolation 462 UV_PAETH_PRED, // Predict from the direction of smallest gradient 463 UV_CFL_PRED, // Chroma-from-Luma 464 UV_INTRA_MODES, 465 UV_MODE_INVALID, // For uv_mode in inter blocks 466 } UV_PREDICTION_MODE; 467 468 typedef enum ATTRIBUTE_PACKED { 469 SIMPLE_TRANSLATION, 470 OBMC_CAUSAL, // 2-sided OBMC 471 WARPED_CAUSAL, // 2-sided WARPED 472 MOTION_MODES 473 } MOTION_MODE; 474 475 typedef enum ATTRIBUTE_PACKED { 476 II_DC_PRED, 477 II_V_PRED, 478 II_H_PRED, 479 II_SMOOTH_PRED, 480 INTERINTRA_MODES 481 } INTERINTRA_MODE; 482 483 typedef enum ATTRIBUTE_PACKED { 484 COMPOUND_AVERAGE, 485 COMPOUND_WEDGE, 486 COMPOUND_DIFFWTD, 487 COMPOUND_TYPES, 488 } COMPOUND_TYPE; 489 490 typedef enum ATTRIBUTE_PACKED { 491 FILTER_DC_PRED, 492 FILTER_V_PRED, 493 FILTER_H_PRED, 494 FILTER_D157_PRED, 495 FILTER_PAETH_PRED, 496 FILTER_INTRA_MODES, 497 } FILTER_INTRA_MODE; 498 499 #define DIRECTIONAL_MODES 8 500 #define MAX_ANGLE_DELTA 3 501 #define ANGLE_STEP 3 502 503 #define INTER_MODES (1 + NEWMV - NEARESTMV) 504 505 #define INTER_COMPOUND_MODES (1 + NEW_NEWMV - NEAREST_NEARESTMV) 506 507 #define SKIP_CONTEXTS 3 508 #define SKIP_MODE_CONTEXTS 3 509 510 #define COMP_INDEX_CONTEXTS 6 511 #define COMP_GROUP_IDX_CONTEXTS 6 512 513 #define NMV_CONTEXTS 3 514 515 #define NEWMV_MODE_CONTEXTS 6 516 #define GLOBALMV_MODE_CONTEXTS 2 517 #define REFMV_MODE_CONTEXTS 6 518 #define DRL_MODE_CONTEXTS 3 519 520 #define GLOBALMV_OFFSET 3 521 #define REFMV_OFFSET 4 522 523 #define NEWMV_CTX_MASK ((1 << GLOBALMV_OFFSET) - 1) 524 #define GLOBALMV_CTX_MASK ((1 << (REFMV_OFFSET - GLOBALMV_OFFSET)) - 1) 525 #define REFMV_CTX_MASK ((1 << (8 - REFMV_OFFSET)) - 1) 526 527 #define COMP_NEWMV_CTXS 5 528 #define INTER_MODE_CONTEXTS 8 529 530 #define DELTA_Q_SMALL 3 531 #define DELTA_Q_PROBS (DELTA_Q_SMALL) 532 #define DEFAULT_DELTA_Q_RES 4 533 #define DELTA_LF_SMALL 3 534 #define DELTA_LF_PROBS (DELTA_LF_SMALL) 535 #define DEFAULT_DELTA_LF_RES 2 536 537 /* Segment Feature Masks */ 538 #define MAX_MV_REF_CANDIDATES 2 539 540 #define MAX_REF_MV_STACK_SIZE 8 541 #define REF_CAT_LEVEL 640 542 543 #define INTRA_INTER_CONTEXTS 4 544 #define COMP_INTER_CONTEXTS 5 545 #define REF_CONTEXTS 3 546 547 #define COMP_REF_TYPE_CONTEXTS 5 548 #define UNI_COMP_REF_CONTEXTS 3 549 550 #define TXFM_PARTITION_CONTEXTS ((TX_SIZES - TX_8X8) * 6 - 3) 551 typedef uint8_t TXFM_CONTEXT; 552 553 #define NONE_FRAME -1 554 #define INTRA_FRAME 0 555 #define LAST_FRAME 1 556 #define LAST2_FRAME 2 557 #define LAST3_FRAME 3 558 #define GOLDEN_FRAME 4 559 #define BWDREF_FRAME 5 560 #define ALTREF2_FRAME 6 561 #define ALTREF_FRAME 7 562 #define EXTREF_FRAME REF_FRAMES 563 #define LAST_REF_FRAMES (LAST3_FRAME - LAST_FRAME + 1) 564 565 #define INTER_REFS_PER_FRAME (ALTREF_FRAME - LAST_FRAME + 1) 566 567 #define FWD_REFS (GOLDEN_FRAME - LAST_FRAME + 1) 568 #define FWD_RF_OFFSET(ref) (ref - LAST_FRAME) 569 #define BWD_REFS (ALTREF_FRAME - BWDREF_FRAME + 1) 570 #define BWD_RF_OFFSET(ref) (ref - BWDREF_FRAME) 571 572 #define SINGLE_REFS (FWD_REFS + BWD_REFS) 573 574 typedef enum ATTRIBUTE_PACKED { 575 LAST_LAST2_FRAMES, // { LAST_FRAME, LAST2_FRAME } 576 LAST_LAST3_FRAMES, // { LAST_FRAME, LAST3_FRAME } 577 LAST_GOLDEN_FRAMES, // { LAST_FRAME, GOLDEN_FRAME } 578 BWDREF_ALTREF_FRAMES, // { BWDREF_FRAME, ALTREF_FRAME } 579 LAST2_LAST3_FRAMES, // { LAST2_FRAME, LAST3_FRAME } 580 LAST2_GOLDEN_FRAMES, // { LAST2_FRAME, GOLDEN_FRAME } 581 LAST3_GOLDEN_FRAMES, // { LAST3_FRAME, GOLDEN_FRAME } 582 BWDREF_ALTREF2_FRAMES, // { BWDREF_FRAME, ALTREF2_FRAME } 583 ALTREF2_ALTREF_FRAMES, // { ALTREF2_FRAME, ALTREF_FRAME } 584 TOTAL_UNIDIR_COMP_REFS, 585 // NOTE: UNIDIR_COMP_REFS is the number of uni-directional reference pairs 586 // that are explicitly signaled. 587 UNIDIR_COMP_REFS = BWDREF_ALTREF_FRAMES + 1, 588 } UNIDIR_COMP_REF; 589 590 #define TOTAL_COMP_REFS (FWD_REFS * BWD_REFS + TOTAL_UNIDIR_COMP_REFS) 591 592 #define COMP_REFS (FWD_REFS * BWD_REFS + UNIDIR_COMP_REFS) 593 594 // NOTE: A limited number of unidirectional reference pairs can be signalled for 595 // compound prediction. The use of skip mode, on the other hand, makes it 596 // possible to have a reference pair not listed for explicit signaling. 597 #define MODE_CTX_REF_FRAMES (REF_FRAMES + TOTAL_COMP_REFS) 598 599 typedef enum ATTRIBUTE_PACKED { 600 RESTORE_NONE, 601 RESTORE_WIENER, 602 RESTORE_SGRPROJ, 603 RESTORE_SWITCHABLE, 604 RESTORE_SWITCHABLE_TYPES = RESTORE_SWITCHABLE, 605 RESTORE_TYPES = 4, 606 } RestorationType; 607 608 #define SUPERRES_SCALE_BITS 3 609 #define SUPERRES_SCALE_DENOMINATOR_MIN (SCALE_NUMERATOR + 1) 610 611 // In large_scale_tile coding, external references are used. 612 #define MAX_EXTERNAL_REFERENCES 128 613 #define MAX_TILES 512 614 615 #ifdef __cplusplus 616 } // extern "C" 617 #endif 618 619 #endif // AOM_AV1_COMMON_ENUMS_H_ 620