enums.h 20.4 KB
Newer Older
Jingning Han's avatar
Jingning Han committed
1
/*
2
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Jingning Han's avatar
Jingning Han committed
3
 *
4 5 6 7 8 9
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
Jingning Han's avatar
Jingning Han committed
10 11
 */

12 13
#ifndef AV1_COMMON_ENUMS_H_
#define AV1_COMMON_ENUMS_H_
Jingning Han's avatar
Jingning Han committed
14

15
#include "./aom_config.h"
16
#include "aom/aom_codec.h"
17
#include "aom/aom_integer.h"
Jingning Han's avatar
Jingning Han committed
18 19 20 21 22

#ifdef __cplusplus
extern "C" {
#endif

23 24
#undef MAX_SB_SIZE

25 26
#if CONFIG_NCOBMC_ADAPT_WEIGHT
#define TWO_MODE
27 28 29 30 31
#endif

#if CONFIG_NCOBMC || CONFIG_NCOBMC_ADAPT_WEIGHT
#define NC_MODE_INFO 1
#else
32
#define NC_MODE_INFO 0
33 34
#endif

Geza Lore's avatar
Geza Lore committed
35
// Max superblock size
36
#if CONFIG_EXT_PARTITION
37
#define MAX_SB_SIZE_LOG2 7
38
#else
39
#define MAX_SB_SIZE_LOG2 6
40
#endif  // CONFIG_EXT_PARTITION
41
#define MAX_SB_SIZE (1 << MAX_SB_SIZE_LOG2)
42
#define MAX_SB_SQUARE (MAX_SB_SIZE * MAX_SB_SIZE)
Jingning Han's avatar
Jingning Han committed
43

Geza Lore's avatar
Geza Lore committed
44 45 46
// Min superblock size
#define MIN_SB_SIZE_LOG2 6

47
// Pixels per Mode Info (MI) unit
48
#define MI_SIZE_LOG2 2
49
#define MI_SIZE (1 << MI_SIZE_LOG2)
50

51 52
// MI-units per max superblock (MI Block - MIB)
#define MAX_MIB_SIZE_LOG2 (MAX_SB_SIZE_LOG2 - MI_SIZE_LOG2)
53
#define MAX_MIB_SIZE (1 << MAX_MIB_SIZE_LOG2)
Jingning Han's avatar
Jingning Han committed
54

Geza Lore's avatar
Geza Lore committed
55 56 57
// MI-units per min superblock
#define MIN_MIB_SIZE_LOG2 (MIN_SB_SIZE_LOG2 - MI_SIZE_LOG2)

58
// Mask to extract MI offset within max MIB
59
#define MAX_MIB_MASK (MAX_MIB_SIZE - 1)
Jingning Han's avatar
Jingning Han committed
60

61
// Maximum number of tile rows and tile columns
62
#if CONFIG_EXT_TILE
63 64
#define MAX_TILE_ROWS 1024
#define MAX_TILE_COLS 1024
65
#else
66 67 68 69
#if CONFIG_MAX_TILE
#define MAX_TILE_ROWS 64
#define MAX_TILE_COLS 64
#else
70 71
#define MAX_TILE_ROWS 4
#define MAX_TILE_COLS 64
72
#endif
73 74
#endif  // CONFIG_EXT_TILE

Jingning Han's avatar
Jingning Han committed
75 76
#if CONFIG_VAR_TX
#define MAX_VARTX_DEPTH 2
77 78
#define SQR_VARTX_DEPTH_INIT 0
#define RECT_VARTX_DEPTH_INIT 0
Jingning Han's avatar
Jingning Han committed
79 80
#endif

81 82
#define MI_SIZE_64X64 (64 >> MI_SIZE_LOG2)

83 84 85 86
#if CONFIG_LOOPFILTER_LEVEL
// 4 frame filter levels: y plane vertical, y plane horizontal,
// u plane, and v plane
#define FRAME_LF_COUNT 4
87
#define DEFAULT_DELTA_LF_MULTI 0
88 89
#endif  // CONFIG_LOOPFILTER_LEVEL

90 91
#if CONFIG_LPF_SB
#define LPF_DELTA_BITS 3
92
#define LPF_STEP 2
93
#define DELTA_RANGE (1 << LPF_DELTA_BITS)
94
#define MAX_LPF_OFFSET (LPF_STEP * ((1 << LPF_DELTA_BITS) - 1))
95

96 97 98 99
#define LPF_REUSE_CONTEXT 2
#define LPF_DELTA_CONTEXT DELTA_RANGE
#define LPF_SIGN_CONTEXT 2

100 101 102
// Half of maximum loop filter length (15-tap)
#define FILT_BOUNDARY_OFFSET 8
#define FILT_BOUNDARY_MI_OFFSET (FILT_BOUNDARY_OFFSET >> MI_SIZE_LOG2)
103 104 105

#define FAKE_FILTER_LEVEL 10
#define USE_LOOP_FILTER_SUPERBLOCK 1
106 107
#endif  // CONFIG_LPF_SB

Jingning Han's avatar
Jingning Han committed
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
// Bitstream profiles indicated by 2-3 bits in the uncompressed header.
// 00: Profile 0.  8-bit 4:2:0 only.
// 10: Profile 1.  8-bit 4:4:4, 4:2:2, and 4:4:0.
// 01: Profile 2.  10-bit and 12-bit color only, with 4:2:0 sampling.
// 110: Profile 3. 10-bit and 12-bit color only, with 4:2:2/4:4:4/4:4:0
//                 sampling.
// 111: Undefined profile.
typedef enum BITSTREAM_PROFILE {
  PROFILE_0,
  PROFILE_1,
  PROFILE_2,
  PROFILE_3,
  MAX_PROFILES
} BITSTREAM_PROFILE;

123 124 125 126
// Note: Some enums use the attribute 'packed' to use smallest possible integer
// type, so that we can save memory when they are used in structs/arrays.

typedef enum ATTRIBUTE_PACKED {
127
#if CONFIG_CHROMA_SUB8X8
Jingning Han's avatar
Jingning Han committed
128 129 130 131
  BLOCK_2X2,
  BLOCK_2X4,
  BLOCK_4X2,
#endif
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
  BLOCK_4X4,
  BLOCK_4X8,
  BLOCK_8X4,
  BLOCK_8X8,
  BLOCK_8X16,
  BLOCK_16X8,
  BLOCK_16X16,
  BLOCK_16X32,
  BLOCK_32X16,
  BLOCK_32X32,
  BLOCK_32X64,
  BLOCK_64X32,
  BLOCK_64X64,
#if CONFIG_EXT_PARTITION
  BLOCK_64X128,
  BLOCK_128X64,
  BLOCK_128X128,
#endif  // CONFIG_EXT_PARTITION
150 151 152 153
  BLOCK_4X16,
  BLOCK_16X4,
  BLOCK_8X32,
  BLOCK_32X8,
154 155
  BLOCK_16X64,
  BLOCK_64X16,
156 157 158 159
#if CONFIG_EXT_PARTITION
  BLOCK_32X128,
  BLOCK_128X32,
#endif  // CONFIG_EXT_PARTITION
160 161 162
  BLOCK_SIZES_ALL,
  BLOCK_SIZES = BLOCK_4X16,
  BLOCK_INVALID = 255,
163 164 165
  BLOCK_LARGEST = (BLOCK_SIZES - 1)
} BLOCK_SIZE;

Yaowu Xu's avatar
Yaowu Xu committed
166
typedef enum ATTRIBUTE_PACKED {
167 168 169 170
  PARTITION_NONE,
  PARTITION_HORZ,
  PARTITION_VERT,
  PARTITION_SPLIT,
171
#if CONFIG_EXT_PARTITION_TYPES
172 173 174 175
  PARTITION_HORZ_A,  // HORZ split and the top partition is split again
  PARTITION_HORZ_B,  // HORZ split and the bottom partition is split again
  PARTITION_VERT_A,  // VERT split and the left partition is split again
  PARTITION_VERT_B,  // VERT split and the right partition is split again
176 177
  PARTITION_HORZ_4,  // 4:1 horizontal partition
  PARTITION_VERT_4,  // 4:1 vertical partition
178
  EXT_PARTITION_TYPES,
179
#endif  // CONFIG_EXT_PARTITION_TYPES
180
  PARTITION_TYPES = PARTITION_SPLIT + 1,
181
  PARTITION_INVALID = 255
Jingning Han's avatar
Jingning Han committed
182 183 184
} PARTITION_TYPE;

typedef char PARTITION_CONTEXT;
185
#define PARTITION_PLOFFSET 4  // number of probability models per block size
186 187 188
#define PARTITION_BLOCK_SIZES (4 + CONFIG_EXT_PARTITION)
#define PARTITION_CONTEXTS_PRIMARY (PARTITION_BLOCK_SIZES * PARTITION_PLOFFSET)
#if CONFIG_UNPOISON_PARTITION_CTX
189
#define INVALID_PARTITION_CTX (-1)
190 191
#define PARTITION_CONTEXTS \
  (PARTITION_CONTEXTS_PRIMARY + 2 * PARTITION_BLOCK_SIZES)
192
#else
193 194
#define PARTITION_CONTEXTS PARTITION_CONTEXTS_PRIMARY
#endif
Jingning Han's avatar
Jingning Han committed
195 196

// block transform size
197
typedef enum ATTRIBUTE_PACKED {
198 199 200 201 202
  TX_4X4,    // 4x4 transform
  TX_8X8,    // 8x8 transform
  TX_16X16,  // 16x16 transform
  TX_32X32,  // 32x32 transform
#if CONFIG_TX64X64
203 204 205 206 207 208 209 210 211 212 213
  TX_64X64,  // 64x64 transform
#endif       // CONFIG_TX64X64
  TX_4X8,    // 4x8 transform
  TX_8X4,    // 8x4 transform
  TX_8X16,   // 8x16 transform
  TX_16X8,   // 16x8 transform
  TX_16X32,  // 16x32 transform
  TX_32X16,  // 32x16 transform
#if CONFIG_TX64X64
  TX_32X64,           // 32x64 transform
  TX_64X32,           // 64x32 transform
214
#endif                // CONFIG_TX64X64
215 216 217 218
  TX_4X16,            // 4x16 transform
  TX_16X4,            // 16x4 transform
  TX_8X32,            // 8x32 transform
  TX_32X8,            // 32x8 transform
219 220 221
  TX_SIZES_ALL,       // Includes rectangular transforms
  TX_SIZES = TX_4X8,  // Does NOT include rectangular transforms
  TX_INVALID = 255    // Invalid transform size
222
} TX_SIZE;
223

224 225 226 227 228 229
#define TX_SIZE_LUMA_MIN (TX_4X4)
/* We don't need to code a transform size unless the allowed size is at least
   one more than the minimum. */
#define TX_SIZE_CTX_MIN (TX_SIZE_LUMA_MIN + 1)

#define MAX_TX_DEPTH (TX_SIZES - TX_SIZE_CTX_MIN)
230

231 232 233 234
#if CONFIG_CTX1D
#define MAX_HVTX_SIZE (1 << 5)
#endif  // CONFIG_CTX1D

235
#define MAX_TX_SIZE_LOG2 (5 + CONFIG_TX64X64)
236 237 238 239
#define MAX_TX_SIZE (1 << MAX_TX_SIZE_LOG2)
#define MIN_TX_SIZE_LOG2 2
#define MIN_TX_SIZE (1 << MIN_TX_SIZE_LOG2)
#define MAX_TX_SQUARE (MAX_TX_SIZE * MAX_TX_SIZE)
240 241

// Number of maxium size transform blocks in the maximum size superblock
242
#define MAX_TX_BLOCKS_IN_MAX_SB_LOG2 ((MAX_SB_SIZE_LOG2 - MAX_TX_SIZE_LOG2) * 2)
243 244
#define MAX_TX_BLOCKS_IN_MAX_SB (1 << MAX_TX_BLOCKS_IN_MAX_SB_LOG2)

245
#if CONFIG_NCOBMC_ADAPT_WEIGHT
246
typedef enum ATTRIBUTE_PACKED {
247
  NCOBMC_MODE_0,
248 249 250 251 252 253 254
  NCOBMC_MODE_1,
  NCOBMC_MODE_2,
  NCOBMC_MODE_3,
  NCOBMC_MODE_4,
  NCOBMC_MODE_5,
  NCOBMC_MODE_6,
  NCOBMC_MODE_7,
255 256 257 258 259
  ALL_NCOBMC_MODES,
#ifdef TWO_MODE
  MAX_NCOBMC_MODES = NCOBMC_MODE_1 + 1,
#else
  MAX_NCOBMC_MODES = ALL_NCOBMC_MODES,
260
#endif
261 262 263
  NO_OVERLAP = MAX_NCOBMC_MODES + 1
} NCOBMC_MODE;

Yaowu Xu's avatar
Yaowu Xu committed
264
typedef enum ATTRIBUTE_PACKED {
265 266 267 268 269 270 271 272
  ADAPT_OVERLAP_BLOCK_8X8,
  ADAPT_OVERLAP_BLOCK_16X16,
  ADAPT_OVERLAP_BLOCK_32X32,
  ADAPT_OVERLAP_BLOCK_64X64,
  ADAPT_OVERLAP_BLOCKS,
  ADAPT_OVERLAP_BLOCK_INVALID = 255
} ADAPT_OVERLAP_BLOCK;
#endif  // CONFIG_NCOBMC_ADAPT_WEIGHT
273

Jingning Han's avatar
Jingning Han committed
274
// frame transform mode
Yaowu Xu's avatar
Yaowu Xu committed
275
typedef enum ATTRIBUTE_PACKED {
276 277 278 279
  ONLY_4X4,     // only 4x4 transform used
  ALLOW_8X8,    // allow block transform size up to 8x8
  ALLOW_16X16,  // allow block transform size up to 16x16
  ALLOW_32X32,  // allow block transform size up to 32x32
280
#if CONFIG_TX64X64
281
  ALLOW_64X64,  // allow block transform size up to 64x64
282 283 284
#endif
  TX_MODE_SELECT,  // transform specified for each block
  TX_MODES,
Jingning Han's avatar
Jingning Han committed
285 286
} TX_MODE;

287
// 1D tx types
Yaowu Xu's avatar
Yaowu Xu committed
288
typedef enum ATTRIBUTE_PACKED {
289 290 291 292
  DCT_1D,
  ADST_1D,
  FLIPADST_1D,
  IDTX_1D,
Sarah Parker's avatar
Sarah Parker committed
293 294
  // TODO(sarahparker) need to eventually put something here for the
  // mrc experiment to make this work with the ext-tx pruning functions
295
  TX_TYPES_1D,
296 297
} TX_TYPE_1D;

Jingning Han's avatar
Jingning Han committed
298
typedef enum {
299 300 301 302
  DCT_DCT,    // DCT  in both horizontal and vertical
  ADST_DCT,   // ADST in vertical, DCT in horizontal
  DCT_ADST,   // DCT  in vertical, ADST in horizontal
  ADST_ADST,  // ADST in both directions
303
#if CONFIG_EXT_TX
304 305 306 307 308 309 310 311 312 313 314 315
  FLIPADST_DCT,
  DCT_FLIPADST,
  FLIPADST_FLIPADST,
  ADST_FLIPADST,
  FLIPADST_ADST,
  IDTX,
  V_DCT,
  H_DCT,
  V_ADST,
  H_ADST,
  V_FLIPADST,
  H_FLIPADST,
316
#endif  // CONFIG_EXT_TX
Sarah Parker's avatar
Sarah Parker committed
317 318 319
#if CONFIG_MRC_TX
  MRC_DCT,  // DCT in both directions with mrc based bitmask
#endif      // CONFIG_MRC_TX
320
  TX_TYPES,
Jingning Han's avatar
Jingning Han committed
321 322
} TX_TYPE;

323
#if CONFIG_EXT_TX
Yaowu Xu's avatar
Yaowu Xu committed
324
typedef enum ATTRIBUTE_PACKED {
Hui Su's avatar
Hui Su committed
325
  // DCT only
326
  EXT_TX_SET_DCTONLY,
Hui Su's avatar
Hui Su committed
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345
  // DCT + Identity only
  EXT_TX_SET_DCT_IDTX,
#if CONFIG_MRC_TX
  // DCT + MRC_DCT
  EXT_TX_SET_MRC_DCT,
  // DCT + MRC_DCT + IDTX
  EXT_TX_SET_MRC_DCT_IDTX,
#endif  // CONFIG_MRC_TX
  // Discrete Trig transforms w/o flip (4) + Identity (1)
  EXT_TX_SET_DTT4_IDTX,
  // Discrete Trig transforms w/o flip (4) + Identity (1) + 1D Hor/vert DCT (2)
  EXT_TX_SET_DTT4_IDTX_1DDCT,
  // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver DCT (2)
  EXT_TX_SET_DTT9_IDTX_1DDCT,
  // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver (6)
  EXT_TX_SET_ALL16,
  EXT_TX_SET_TYPES
} TxSetType;

346 347 348 349 350
#define IS_2D_TRANSFORM(tx_type) (tx_type < IDTX)
#else
#define IS_2D_TRANSFORM(tx_type) 1
#endif

Yaowu Xu's avatar
Yaowu Xu committed
351
typedef enum ATTRIBUTE_PACKED {
352 353 354 355
  TILE_LEFT_BOUNDARY = 1,
  TILE_RIGHT_BOUNDARY = 2,
  TILE_ABOVE_BOUNDARY = 4,
  TILE_BOTTOM_BOUNDARY = 8,
356 357 358 359 360
  FRAME_LEFT_BOUNDARY = 16,
  FRAME_RIGHT_BOUNDARY = 32,
  FRAME_ABOVE_BOUNDARY = 64,
  FRAME_BOTTOM_BOUNDARY = 128,
} BOUNDARY_TYPE;
361

362
#if CONFIG_EXT_TX
Sarah Parker's avatar
Sarah Parker committed
363 364 365 366 367
#define EXT_TX_SIZES 4  // number of sizes that use extended transforms
#if CONFIG_MRC_TX
#define EXT_TX_SETS_INTER 5  // Sets of transform selections for INTER
#define EXT_TX_SETS_INTRA 4  // Sets of transform selections for INTRA
#else                        // CONFIG_MRC_TX
368 369
#define EXT_TX_SETS_INTER 4  // Sets of transform selections for INTER
#define EXT_TX_SETS_INTRA 3  // Sets of transform selections for INTRA
Sarah Parker's avatar
Sarah Parker committed
370
#endif                       // CONFIG_MRC_TX
371
#else
372
#define EXT_TX_SIZES 3  // number of sizes that use extended transforms
373
#endif                  // CONFIG_EXT_TX
374

Yaowu Xu's avatar
Yaowu Xu committed
375
typedef enum ATTRIBUTE_PACKED {
376 377 378 379 380
  AOM_LAST_FLAG = 1 << 0,
  AOM_LAST2_FLAG = 1 << 1,
  AOM_LAST3_FLAG = 1 << 2,
  AOM_GOLD_FLAG = 1 << 3,
  AOM_BWD_FLAG = 1 << 4,
381 382 383
  AOM_ALT2_FLAG = 1 << 5,
  AOM_ALT_FLAG = 1 << 6,
  AOM_REFFRAME_ALL = (1 << 7) - 1
384
} AOM_REFFRAME;
Jingning Han's avatar
Jingning Han committed
385

386 387 388
#if CONFIG_EXT_COMP_REFS
#define USE_UNI_COMP_REFS 1

Yaowu Xu's avatar
Yaowu Xu committed
389
typedef enum ATTRIBUTE_PACKED {
390 391 392
  UNIDIR_COMP_REFERENCE,
  BIDIR_COMP_REFERENCE,
  COMP_REFERENCE_TYPES,
393 394 395 396 397
} COMP_REFERENCE_TYPE;
#else  // !CONFIG_EXT_COMP_REFS
#define USE_UNI_COMP_REFS 0
#endif  // CONFIG_EXT_COMP_REFS

Yaowu Xu's avatar
Yaowu Xu committed
398 399 400 401 402
typedef enum ATTRIBUTE_PACKED {
  PLANE_TYPE_Y,
  PLANE_TYPE_UV,
  PLANE_TYPES
} PLANE_TYPE;
Jingning Han's avatar
Jingning Han committed
403

404
#if CONFIG_CFL
405 406 407 408 409
#define CFL_ALPHABET_SIZE_LOG2 4
#define CFL_ALPHABET_SIZE (1 << CFL_ALPHABET_SIZE_LOG2)
#define CFL_MAGS_SIZE ((2 << CFL_ALPHABET_SIZE_LOG2) + 1)
#define CFL_IDX_U(idx) (idx >> CFL_ALPHABET_SIZE_LOG2)
#define CFL_IDX_V(idx) (idx & (CFL_ALPHABET_SIZE - 1))
Luc Trudeau's avatar
Luc Trudeau committed
410

Yaowu Xu's avatar
Yaowu Xu committed
411 412 413 414 415
typedef enum ATTRIBUTE_PACKED {
  CFL_PRED_U,
  CFL_PRED_V,
  CFL_PRED_PLANES
} CFL_PRED_TYPE;
416

Yaowu Xu's avatar
Yaowu Xu committed
417
typedef enum ATTRIBUTE_PACKED {
418 419 420
  CFL_SIGN_ZERO,
  CFL_SIGN_NEG,
  CFL_SIGN_POS,
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437
  CFL_SIGNS
} CFL_SIGN_TYPE;

// CFL_SIGN_ZERO,CFL_SIGN_ZERO is invalid
#define CFL_JOINT_SIGNS (CFL_SIGNS * CFL_SIGNS - 1)
// CFL_SIGN_U is equivalent to (js + 1) / 3 for js in 0 to 8
#define CFL_SIGN_U(js) (((js + 1) * 11) >> 5)
// CFL_SIGN_V is equivalent to (js + 1) % 3 for js in 0 to 8
#define CFL_SIGN_V(js) ((js + 1) - CFL_SIGNS * CFL_SIGN_U(js))

// There is no context when the alpha for a given plane is zero.
// So there are 2 fewer contexts than joint signs.
#define CFL_ALPHA_CONTEXTS (CFL_JOINT_SIGNS + 1 - CFL_SIGNS)
#define CFL_CONTEXT_U(js) (js + 1 - CFL_SIGNS)
// Also, the contexts are symmetric under swapping the planes.
#define CFL_CONTEXT_V(js) \
  (CFL_SIGN_V(js) * CFL_SIGNS + CFL_SIGN_U(js) - CFL_SIGNS)
438 439
#endif

Yaowu Xu's avatar
Yaowu Xu committed
440
typedef enum ATTRIBUTE_PACKED {
441 442 443 444 445 446 447
  PALETTE_MAP,
#if CONFIG_MRC_TX
  MRC_MAP,
#endif  // CONFIG_MRC_TX
  COLOR_MAP_TYPES,
} COLOR_MAP_TYPE;

Yaowu Xu's avatar
Yaowu Xu committed
448
typedef enum ATTRIBUTE_PACKED {
hui su's avatar
hui su committed
449 450 451 452 453 454 455 456 457 458
  TWO_COLORS,
  THREE_COLORS,
  FOUR_COLORS,
  FIVE_COLORS,
  SIX_COLORS,
  SEVEN_COLORS,
  EIGHT_COLORS,
  PALETTE_SIZES
} PALETTE_SIZE;

Yaowu Xu's avatar
Yaowu Xu committed
459
typedef enum ATTRIBUTE_PACKED {
hui su's avatar
hui su committed
460 461 462 463 464 465 466 467 468 469 470
  PALETTE_COLOR_ONE,
  PALETTE_COLOR_TWO,
  PALETTE_COLOR_THREE,
  PALETTE_COLOR_FOUR,
  PALETTE_COLOR_FIVE,
  PALETTE_COLOR_SIX,
  PALETTE_COLOR_SEVEN,
  PALETTE_COLOR_EIGHT,
  PALETTE_COLORS
} PALETTE_COLOR;

471 472
// Note: All directional predictors must be between V_PRED and D63_PRED (both
// inclusive).
473
typedef enum ATTRIBUTE_PACKED {
Urvang Joshi's avatar
Urvang Joshi committed
474 475 476 477 478 479 480 481 482
  DC_PRED,      // Average of above and left pixels
  V_PRED,       // Vertical
  H_PRED,       // Horizontal
  D45_PRED,     // Directional 45  deg = round(arctan(1/1) * 180/pi)
  D135_PRED,    // Directional 135 deg = 180 - 45
  D117_PRED,    // Directional 117 deg = 180 - 63
  D153_PRED,    // Directional 153 deg = 180 - 27
  D207_PRED,    // Directional 207 deg = 180 + 27
  D63_PRED,     // Directional 63  deg = round(arctan(2/1) * 180/pi)
483
  SMOOTH_PRED,  // Combination of horizontal and vertical interpolation
484 485 486 487
#if CONFIG_SMOOTH_HV
  SMOOTH_V_PRED,  // Vertical interpolation
  SMOOTH_H_PRED,  // Horizontal interpolation
#endif            // CONFIG_SMOOTH_HV
488
  PAETH_PRED,     // Predict from the direction of smallest gradient
489 490 491 492
  NEARESTMV,
  NEARMV,
  ZEROMV,
  NEWMV,
493 494 495
#if CONFIG_COMPOUND_SINGLEREF
  // Single ref compound modes
  SR_NEAREST_NEARMV,
496
  // SR_NEAREST_NEWMV,
497 498 499 500 501
  SR_NEAR_NEWMV,
  SR_ZERO_NEWMV,
  SR_NEW_NEWMV,
#endif  // CONFIG_COMPOUND_SINGLEREF
  // Compound ref compound modes
502 503 504 505 506 507 508 509 510
  NEAREST_NEARESTMV,
  NEAR_NEARMV,
  NEAREST_NEWMV,
  NEW_NEARESTMV,
  NEAR_NEWMV,
  NEW_NEARMV,
  ZERO_ZEROMV,
  NEW_NEWMV,
  MB_MODE_COUNT,
511
  INTRA_MODES = PAETH_PRED + 1,  // PAETH_PRED has to be the last intra mode.
512
  INTRA_INVALID = MB_MODE_COUNT  // For uv_mode in inter blocks
513
} PREDICTION_MODE;
Jingning Han's avatar
Jingning Han committed
514

Luc Trudeau's avatar
Luc Trudeau committed
515 516 517 518
#if CONFIG_CFL
// TODO(ltrudeau) Do we really want to pack this?
// TODO(ltrudeau) Do we match with PREDICTION_MODE?
typedef enum ATTRIBUTE_PACKED {
Urvang Joshi's avatar
Urvang Joshi committed
519 520 521 522 523 524 525 526 527
  UV_DC_PRED,      // Average of above and left pixels
  UV_V_PRED,       // Vertical
  UV_H_PRED,       // Horizontal
  UV_D45_PRED,     // Directional 45  deg = round(arctan(1/1) * 180/pi)
  UV_D135_PRED,    // Directional 135 deg = 180 - 45
  UV_D117_PRED,    // Directional 117 deg = 180 - 63
  UV_D153_PRED,    // Directional 153 deg = 180 - 27
  UV_D207_PRED,    // Directional 207 deg = 180 + 27
  UV_D63_PRED,     // Directional 63  deg = round(arctan(2/1) * 180/pi)
Luc Trudeau's avatar
Luc Trudeau committed
528 529 530 531 532
  UV_SMOOTH_PRED,  // Combination of horizontal and vertical interpolation
#if CONFIG_SMOOTH_HV
  UV_SMOOTH_V_PRED,  // Vertical interpolation
  UV_SMOOTH_H_PRED,  // Horizontal interpolation
#endif               // CONFIG_SMOOTH_HV
533
  UV_PAETH_PRED,     // Predict from the direction of smallest gradient
534
  UV_CFL_PRED,       // Chroma-from-Luma
Luc Trudeau's avatar
Luc Trudeau committed
535 536 537 538 539 540 541 542 543 544
  UV_INTRA_MODES,
  UV_MODE_INVALID,  // For uv_mode in inter blocks
} UV_PREDICTION_MODE;
#else
#define UV_INTRA_MODES (INTRA_MODES)
#define UV_PREDICTION_MODE PREDICTION_MODE
#define UV_DC_PRED (DC_PRED)
#define UV_MODE_INVALID (INTRA_INVALID)
#endif  // CONFIG_CFL

Yaowu Xu's avatar
Yaowu Xu committed
545
typedef enum ATTRIBUTE_PACKED {
546
  SIMPLE_TRANSLATION,
Yue Chen's avatar
Yue Chen committed
547
#if CONFIG_MOTION_VAR
548
  OBMC_CAUSAL,  // 2-sided OBMC
Wei-Ting Lin's avatar
Wei-Ting Lin committed
549 550 551 552
#if CONFIG_NCOBMC_ADAPT_WEIGHT
  NCOBMC_ADAPT_WEIGHT,
#endif  // CONFIG_NCOBMC_ADAPT_WEIGHT
#endif  // CONFIG_MOTION_VAR
553 554
#if CONFIG_WARPED_MOTION
  WARPED_CAUSAL,  // 2-sided WARPED
555
#endif            // CONFIG_WARPED_MOTION
Yue Chen's avatar
Yue Chen committed
556
  MOTION_MODES
557 558 559 560
#if CONFIG_NCOBMC_ADAPT_WEIGHT && CONFIG_WARPED_MOTION
  ,
  OBMC_FAMILY_MODES = NCOBMC_ADAPT_WEIGHT + 1
#endif
Yue Chen's avatar
Yue Chen committed
561
} MOTION_MODE;
562

563
#if CONFIG_INTERINTRA
Yaowu Xu's avatar
Yaowu Xu committed
564
typedef enum ATTRIBUTE_PACKED {
565
  II_DC_PRED,
566 567 568 569 570 571
  II_V_PRED,
  II_H_PRED,
  II_SMOOTH_PRED,
  INTERINTRA_MODES
} INTERINTRA_MODE;
#endif
572

573
typedef enum {
574
  COMPOUND_AVERAGE,
575
#if CONFIG_WEDGE
576
  COMPOUND_WEDGE,
577
#endif  // CONFIG_WEDGE
578 579 580
#if CONFIG_COMPOUND_SEGMENT
  COMPOUND_SEG,
#endif  // CONFIG_COMPOUND_SEGMENT
581 582
  COMPOUND_TYPES,
} COMPOUND_TYPE;
583

584
// TODO(huisu): Consider adding FILTER_SMOOTH_PRED to "FILTER_INTRA_MODE".
585
#if CONFIG_FILTER_INTRA
Yaowu Xu's avatar
Yaowu Xu committed
586
typedef enum ATTRIBUTE_PACKED {
587 588 589 590 591 592 593 594 595
  FILTER_DC_PRED,
  FILTER_V_PRED,
  FILTER_H_PRED,
  FILTER_D45_PRED,
  FILTER_D135_PRED,
  FILTER_D117_PRED,
  FILTER_D153_PRED,
  FILTER_D207_PRED,
  FILTER_D63_PRED,
596
  FILTER_PAETH_PRED,
597 598 599
  FILTER_INTRA_MODES,
} FILTER_INTRA_MODE;
#endif  // CONFIG_FILTER_INTRA
600

601
#if CONFIG_EXT_INTRA
602
#define DIRECTIONAL_MODES 8
603 604
#endif  // CONFIG_EXT_INTRA

Jingning Han's avatar
Jingning Han committed
605 606
#define INTER_MODES (1 + NEWMV - NEARESTMV)

607 608 609 610
#if CONFIG_COMPOUND_SINGLEREF
#define INTER_SINGLEREF_COMP_MODES (1 + SR_NEW_NEWMV - SR_NEAREST_NEARMV)
#endif  // CONFIG_COMPOUND_SINGLEREF

611 612
#define INTER_COMPOUND_MODES (1 + NEW_NEWMV - NEAREST_NEARESTMV)

Jingning Han's avatar
Jingning Han committed
613
#define SKIP_CONTEXTS 3
614

615
#define NMV_CONTEXTS 3
616

617
#define NEWMV_MODE_CONTEXTS 7
618
#define ZEROMV_MODE_CONTEXTS 2
619 620
#define REFMV_MODE_CONTEXTS 9
#define DRL_MODE_CONTEXTS 5
621 622

#define ZEROMV_OFFSET 3
623
#define REFMV_OFFSET 4
624 625 626

#define NEWMV_CTX_MASK ((1 << ZEROMV_OFFSET) - 1)
#define ZEROMV_CTX_MASK ((1 << (REFMV_OFFSET - ZEROMV_OFFSET)) - 1)
627 628
#define REFMV_CTX_MASK ((1 << (8 - REFMV_OFFSET)) - 1)

629 630 631
#define ALL_ZERO_FLAG_OFFSET 8
#define SKIP_NEARESTMV_OFFSET 9
#define SKIP_NEARMV_OFFSET 10
632
#define SKIP_NEARESTMV_SUB8X8_OFFSET 11
633

Jingning Han's avatar
Jingning Han committed
634
#define INTER_MODE_CONTEXTS 7
635
#define DELTA_Q_SMALL 3
636
#define DELTA_Q_PROBS (DELTA_Q_SMALL)
637
#define DEFAULT_DELTA_Q_RES 4
Fangwen Fu's avatar
Fangwen Fu committed
638 639 640 641 642
#if CONFIG_EXT_DELTA_Q
#define DELTA_LF_SMALL 3
#define DELTA_LF_PROBS (DELTA_LF_SMALL)
#define DEFAULT_DELTA_LF_RES 2
#endif
Jingning Han's avatar
Jingning Han committed
643 644 645

/* Segment Feature Masks */
#define MAX_MV_REF_CANDIDATES 2
646

647
#define MAX_REF_MV_STACK_SIZE 16
648 649 650
#if CONFIG_EXT_PARTITION
#define REF_CAT_LEVEL 640
#else
651
#define REF_CAT_LEVEL 255
652
#endif  // CONFIG_EXT_PARTITION
Jingning Han's avatar
Jingning Han committed
653 654 655 656

#define INTRA_INTER_CONTEXTS 4
#define COMP_INTER_CONTEXTS 5
#define REF_CONTEXTS 5
657 658 659

#if CONFIG_EXT_COMP_REFS
#define COMP_REF_TYPE_CONTEXTS 5
660
#define UNI_COMP_REF_CONTEXTS 3
661 662
#endif  // CONFIG_EXT_COMP_REFS

663
#if CONFIG_COMPOUND_SINGLEREF
664
#define COMP_INTER_MODE_CONTEXTS 4
665
#endif  // CONFIG_COMPOUND_SINGLEREF
Jingning Han's avatar
Jingning Han committed
666

667
#if CONFIG_VAR_TX
668
#define TXFM_PARTITION_CONTEXTS ((TX_SIZES - TX_8X8) * 6 - 2)
669
typedef uint8_t TXFM_CONTEXT;
670 671
#endif

Emil Keyder's avatar
Emil Keyder committed
672
#define NONE_FRAME -1
673 674
#define INTRA_FRAME 0
#define LAST_FRAME 1
675

676 677 678 679
#define LAST2_FRAME 2
#define LAST3_FRAME 3
#define GOLDEN_FRAME 4
#define BWDREF_FRAME 5
680 681
#define ALTREF2_FRAME 6
#define ALTREF_FRAME 7
682
#define LAST_REF_FRAMES (LAST3_FRAME - LAST_FRAME + 1)
683

684 685 686
#define INTER_REFS_PER_FRAME (ALTREF_FRAME - LAST_FRAME + 1)
#define TOTAL_REFS_PER_FRAME (ALTREF_FRAME - INTRA_FRAME + 1)

687 688 689 690 691 692
#define FWD_REFS (GOLDEN_FRAME - LAST_FRAME + 1)
#define FWD_RF_OFFSET(ref) (ref - LAST_FRAME)
#define BWD_REFS (ALTREF_FRAME - BWDREF_FRAME + 1)
#define BWD_RF_OFFSET(ref) (ref - BWDREF_FRAME)

#define SINGLE_REFS (FWD_REFS + BWD_REFS)
693
#if CONFIG_EXT_COMP_REFS
Yaowu Xu's avatar
Yaowu Xu committed
694
typedef enum ATTRIBUTE_PACKED {
695
  LAST_LAST2_FRAMES,     // { LAST_FRAME, LAST2_FRAME }
696
  LAST_LAST3_FRAMES,     // { LAST_FRAME, LAST3_FRAME }
697 698 699 700 701 702
  LAST_GOLDEN_FRAMES,    // { LAST_FRAME, GOLDEN_FRAME }
  BWDREF_ALTREF_FRAMES,  // { BWDREF_FRAME, ALTREF_FRAME }
  UNIDIR_COMP_REFS
} UNIDIR_COMP_REF;
#define COMP_REFS (FWD_REFS * BWD_REFS + UNIDIR_COMP_REFS)
#else  // !CONFIG_EXT_COMP_REFS
703
#define COMP_REFS (FWD_REFS * BWD_REFS)
704
#endif  // CONFIG_EXT_COMP_REFS
705

706
#define MODE_CTX_REF_FRAMES (TOTAL_REFS_PER_FRAME + COMP_REFS)
707

708
#if CONFIG_LOOP_RESTORATION
Yaowu Xu's avatar
Yaowu Xu committed
709
typedef enum ATTRIBUTE_PACKED {
710 711 712
  RESTORE_NONE,
  RESTORE_WIENER,
  RESTORE_SGRPROJ,
713
  RESTORE_SWITCHABLE,
714
  RESTORE_SWITCHABLE_TYPES = RESTORE_SWITCHABLE,
715
  RESTORE_TYPES = 4,
716
} RestorationType;
717 718
#endif  // CONFIG_LOOP_RESTORATION

719
#if CONFIG_FRAME_SUPERRES
720
#define SUPERRES_SCALE_BITS 3
721
#define SUPERRES_SCALE_DENOMINATOR_MIN 8
722
#endif  // CONFIG_FRAME_SUPERRES
723

Cheng Chen's avatar
Cheng Chen committed
724 725 726 727 728 729 730 731 732 733 734 735 736
#if CONFIG_LPF_DIRECT
typedef enum {
  VERT_HORZ,
  DEGREE_30,
  DEGREE_45,
  DEGREE_60,
  DEGREE_120,
  DEGREE_135,
  DEGREE_150,
  FILTER_DEGREES,
} FILTER_DEGREE;
#endif  // CONFIG_LPF_DIRECT

737 738
#if CONFIG_OBU
// R19
Yaowu Xu's avatar
Yaowu Xu committed
739
typedef enum ATTRIBUTE_PACKED {
740 741 742 743 744 745 746 747 748
  OBU_SEQUENCE_HEADER = 1,
  OBU_TD = 2,
  OBU_FRAME_HEADER = 3,
  OBU_TILE_GROUP = 4,
  OBU_METADATA = 5,
  OBU_PADDING = 15,
} OBU_TYPE;
#endif

749 750 751 752 753 754 755 756 757
#if CONFIG_LGT_FROM_PRED
#define LGT_SIZES 2
// Note: at least one of LGT_FROM_PRED_INTRA and LGT_FROM_PRED_INTER must be 1
#define LGT_FROM_PRED_INTRA 1
#define LGT_FROM_PRED_INTER 1
// LGT_SL_INTRA: LGTs with a mode-dependent first self-loop and a break point
#define LGT_SL_INTRA 0
#endif  // CONFIG_LGT_FROM_PRED

Jingning Han's avatar
Jingning Han committed
758 759 760 761
#ifdef __cplusplus
}  // extern "C"
#endif

762
#endif  // AV1_COMMON_ENUMS_H_