enums.h 19 KB
Newer Older
Jingning Han's avatar
Jingning Han committed
1
/*
Yaowu Xu's avatar
Yaowu Xu committed
2
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Jingning Han's avatar
Jingning Han committed
3
 *
Yaowu Xu's avatar
Yaowu Xu committed
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
 */

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

Yaowu Xu's avatar
Yaowu Xu committed
15
#include "./aom_config.h"
16
#include "aom/aom_codec.h"
Yaowu Xu's avatar
Yaowu Xu committed
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

Geza Lore's avatar
Geza Lore committed
25
// Max superblock size
26
#if CONFIG_EXT_PARTITION
clang-format's avatar
clang-format committed
27
#define MAX_SB_SIZE_LOG2 7
28
#else
clang-format's avatar
clang-format committed
29
#define MAX_SB_SIZE_LOG2 6
30
#endif  // CONFIG_EXT_PARTITION
clang-format's avatar
clang-format committed
31
#define MAX_SB_SIZE (1 << MAX_SB_SIZE_LOG2)
32
#define MAX_SB_SQUARE (MAX_SB_SIZE * MAX_SB_SIZE)
Jingning Han's avatar
Jingning Han committed
33

Geza Lore's avatar
Geza Lore committed
34 35 36
// Min superblock size
#define MIN_SB_SIZE_LOG2 6

37
// Pixels per Mode Info (MI) unit
38
#define MI_SIZE_LOG2 2
clang-format's avatar
clang-format committed
39
#define MI_SIZE (1 << MI_SIZE_LOG2)
40

41 42
// MI-units per max superblock (MI Block - MIB)
#define MAX_MIB_SIZE_LOG2 (MAX_SB_SIZE_LOG2 - MI_SIZE_LOG2)
clang-format's avatar
clang-format committed
43
#define MAX_MIB_SIZE (1 << MAX_MIB_SIZE_LOG2)
Jingning Han's avatar
Jingning Han committed
44

Geza Lore's avatar
Geza Lore committed
45 46 47
// MI-units per min superblock
#define MIN_MIB_SIZE_LOG2 (MIN_SB_SIZE_LOG2 - MI_SIZE_LOG2)

48
// Mask to extract MI offset within max MIB
clang-format's avatar
clang-format committed
49
#define MAX_MIB_MASK (MAX_MIB_SIZE - 1)
Jingning Han's avatar
Jingning Han committed
50

51
// Maximum number of tile rows and tile columns
52
#if CONFIG_EXT_TILE
clang-format's avatar
clang-format committed
53 54
#define MAX_TILE_ROWS 1024
#define MAX_TILE_COLS 1024
55
#else
56 57 58 59
#if CONFIG_MAX_TILE
#define MAX_TILE_ROWS 64
#define MAX_TILE_COLS 64
#else
clang-format's avatar
clang-format committed
60 61
#define MAX_TILE_ROWS 4
#define MAX_TILE_COLS 64
62
#endif
63 64
#endif  // CONFIG_EXT_TILE

Jingning Han's avatar
Jingning Han committed
65 66
#define MAX_VARTX_DEPTH 2

Cheng Chen's avatar
Cheng Chen committed
67
#define MI_SIZE_64X64 (64 >> MI_SIZE_LOG2)
68 69 70
#if CONFIG_EXT_PARTITION
#define MI_SIZE_128X128 (128 >> MI_SIZE_LOG2)
#endif
Cheng Chen's avatar
Cheng Chen committed
71

72 73
#define MIN_PALETTE_BSIZE BLOCK_8X8
#define MAX_PALETTE_SQUARE (64 * 64)
Hui Su's avatar
Hui Su committed
74

75 76 77 78
// Maximum number of colors in a palette.
#define PALETTE_MAX_SIZE 8
// Minimum number of colors in a palette.
#define PALETTE_MIN_SIZE 2
Hui Su's avatar
Hui Su committed
79 80 81 82 83 84 85
// Map the number of pixels in a block size to a context
//   64(BLOCK_8X8)              -> 0
//  128(BLOCK_16X8, BLOCK_16X8) -> 1
//  256(BLOCK_16X16)            -> 2
//  ...
// 4096(BLOCK_64X64)            -> 6
#define PALATTE_BSIZE_CTXS 7
86

87 88 89 90 91
#if CONFIG_FRAME_MARKER
#define FRAME_OFFSET_BITS 5
#define MAX_FRAME_DISTANCE ((1 << FRAME_OFFSET_BITS) - 1)
#endif

92 93 94 95
#if CONFIG_LOOPFILTER_LEVEL
// 4 frame filter levels: y plane vertical, y plane horizontal,
// u plane, and v plane
#define FRAME_LF_COUNT 4
96
#define DEFAULT_DELTA_LF_MULTI 0
97 98
#endif  // CONFIG_LOOPFILTER_LEVEL

99 100 101 102 103 104 105 106 107 108
#if CONFIG_JNT_COMP
typedef enum COMPOUND_DIST_WEIGHT_MODE {
  DIST,
} COMPOUND_DIST_WEIGHT_MODE;

#define COMPOUND_WEIGHT_MODE DIST
#define DIST_PRECISION_BITS 4
#define DIST_PRECISION (1 << DIST_PRECISION_BITS)  // 16
#endif                                             // CONFIG_JNT_COMP

Jingning Han's avatar
Jingning Han committed
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
// 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;

124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
// 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 {
  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
146 147 148 149
  BLOCK_4X16,
  BLOCK_16X4,
  BLOCK_8X32,
  BLOCK_32X8,
150 151
  BLOCK_16X64,
  BLOCK_64X16,
152 153 154 155
#if CONFIG_EXT_PARTITION
  BLOCK_32X128,
  BLOCK_128X32,
#endif  // CONFIG_EXT_PARTITION
156 157 158
  BLOCK_SIZES_ALL,
  BLOCK_SIZES = BLOCK_4X16,
  BLOCK_INVALID = 255,
159 160 161
  BLOCK_LARGEST = (BLOCK_SIZES - 1)
} BLOCK_SIZE;

Yaowu Xu's avatar
Yaowu Xu committed
162
typedef enum ATTRIBUTE_PACKED {
163 164 165 166
  PARTITION_NONE,
  PARTITION_HORZ,
  PARTITION_VERT,
  PARTITION_SPLIT,
167
#if CONFIG_EXT_PARTITION_TYPES
168 169 170 171
  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
172 173
  PARTITION_HORZ_4,  // 4:1 horizontal partition
  PARTITION_VERT_4,  // 4:1 vertical partition
174
  EXT_PARTITION_TYPES,
175
#endif  // CONFIG_EXT_PARTITION_TYPES
176
  PARTITION_TYPES = PARTITION_SPLIT + 1,
177
  PARTITION_INVALID = 255
Jingning Han's avatar
Jingning Han committed
178 179 180
} PARTITION_TYPE;

typedef char PARTITION_CONTEXT;
clang-format's avatar
clang-format committed
181
#define PARTITION_PLOFFSET 4  // number of probability models per block size
182 183 184
#define PARTITION_BLOCK_SIZES (4 + CONFIG_EXT_PARTITION)
#define PARTITION_CONTEXTS_PRIMARY (PARTITION_BLOCK_SIZES * PARTITION_PLOFFSET)
#define PARTITION_CONTEXTS PARTITION_CONTEXTS_PRIMARY
Jingning Han's avatar
Jingning Han committed
185 186

// block transform size
Yaowu Xu's avatar
Yaowu Xu committed
187 188 189 190
#if defined(_MSC_VER)
typedef uint8_t TX_SIZE;
enum ATTRIBUTE_PACKED {
#else
191
typedef enum ATTRIBUTE_PACKED {
Yaowu Xu's avatar
Yaowu Xu committed
192
#endif
193 194 195 196 197
  TX_4X4,    // 4x4 transform
  TX_8X8,    // 8x8 transform
  TX_16X16,  // 16x16 transform
  TX_32X32,  // 32x32 transform
#if CONFIG_TX64X64
198 199 200 201 202 203 204 205 206
  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
207 208 209 210 211 212 213 214 215 216
  TX_32X64,  // 32x64 transform
  TX_64X32,  // 64x32 transform
#endif       // CONFIG_TX64X64
  TX_4X16,   // 4x16 transform
  TX_16X4,   // 16x4 transform
  TX_8X32,   // 8x32 transform
  TX_32X8,   // 32x8 transform
#if CONFIG_TX64X64
  TX_16X64,           // 16x64 transform
  TX_64X16,           // 64x16 transform
217 218 219 220
#endif                // CONFIG_TX64X64
  TX_SIZES_ALL,       // Includes rectangular transforms
  TX_SIZES = TX_4X8,  // Does NOT include rectangular transforms
  TX_INVALID = 255    // Invalid transform size
Yaowu Xu's avatar
Yaowu Xu committed
221 222 223
#if defined(_MSC_VER)
};
#else
224
} TX_SIZE;
Yaowu Xu's avatar
Yaowu Xu committed
225
#endif
226

227 228 229 230 231
#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)

232 233 234
// Maximum tx_size categories
#define MAX_TX_CATS (TX_SIZES - TX_SIZE_CTX_MIN)
#define MAX_TX_DEPTH 2
Jingning Han's avatar
Jingning Han committed
235

236
#define MAX_TX_SIZE_LOG2 (5 + CONFIG_TX64X64)
clang-format's avatar
clang-format committed
237 238 239 240
#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)
241

242
// Pad 4 extra columns to remove horizontal availability check.
243
#define TX_PAD_HOR_LOG2 2
244
#define TX_PAD_HOR 4
245 246 247 248 249
// Pad 6 extra rows (2 on top and 4 on bottom) to remove vertical availability
// check.
#define TX_PAD_TOP 2
#define TX_PAD_BOTTOM 4
#define TX_PAD_VER (TX_PAD_TOP + TX_PAD_BOTTOM)
250 251 252 253
// Pad 16 extra bytes to avoid reading overflow in SIMD optimization.
#define TX_PAD_END 16
#define TX_PAD_2D \
  ((MAX_TX_SIZE + TX_PAD_HOR) * (MAX_TX_SIZE + TX_PAD_VER) + TX_PAD_END)
254

255
// Number of maxium size transform blocks in the maximum size superblock
clang-format's avatar
clang-format committed
256
#define MAX_TX_BLOCKS_IN_MAX_SB_LOG2 ((MAX_SB_SIZE_LOG2 - MAX_TX_SIZE_LOG2) * 2)
257 258
#define MAX_TX_BLOCKS_IN_MAX_SB (1 << MAX_TX_BLOCKS_IN_MAX_SB_LOG2)

Jingning Han's avatar
Jingning Han committed
259
// frame transform mode
260
#if CONFIG_SIMPLIFY_TX_MODE
Yaowu Xu's avatar
Yaowu Xu committed
261
typedef enum ATTRIBUTE_PACKED {
262 263 264 265 266 267 268 269 270 271 272 273 274
  ONLY_4X4,         // use only 4x4 transform
  TX_MODE_LARGEST,  // transform size is the largest possible for pu size
  TX_MODE_SELECT,   // transform specified for each block
  TX_MODES,
} TX_MODE;

#else

typedef enum ATTRIBUTE_PACKED {
  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
275
#if CONFIG_TX64X64
276
  ALLOW_64X64,     // allow block transform size up to 64x64
277 278 279
#endif
  TX_MODE_SELECT,  // transform specified for each block
  TX_MODES,
Jingning Han's avatar
Jingning Han committed
280
} TX_MODE;
281
#endif  // CONFIG_SIMPLIFY_TX_MODE
Jingning Han's avatar
Jingning Han committed
282

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

294
typedef enum ATTRIBUTE_PACKED {
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
  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
  FLIPADST_DCT,
  DCT_FLIPADST,
  FLIPADST_FLIPADST,
  ADST_FLIPADST,
  FLIPADST_ADST,
  IDTX,
  V_DCT,
  H_DCT,
  V_ADST,
  H_ADST,
  V_FLIPADST,
  H_FLIPADST,
311
  TX_TYPES,
Jingning Han's avatar
Jingning Han committed
312 313
} TX_TYPE;

314 315 316 317 318 319 320 321 322 323 324 325 326 327
#if CONFIG_DUAL_FILTER
typedef enum {
  REG_REG,
  REG_SMOOTH,
  REG_SHARP,
  SMOOTH_REG,
  SMOOTH_SMOOTH,
  SMOOTH_SHARP,
  SHARP_REG,
  SHARP_SMOOTH,
  SHARP_SHARP,
} DUAL_FILTER_TYPE;
#endif

Yaowu Xu's avatar
Yaowu Xu committed
328
typedef enum ATTRIBUTE_PACKED {
Hui Su's avatar
Hui Su committed
329
  // DCT only
330
  EXT_TX_SET_DCTONLY,
Hui Su's avatar
Hui Su committed
331 332 333 334 335
  // DCT + Identity only
  EXT_TX_SET_DCT_IDTX,
  // 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)
336 337 338
  // for 16x16 only
  EXT_TX_SET_DTT4_IDTX_1DDCT_16X16,
  // Discrete Trig transforms w/o flip (4) + Identity (1) + 1D Hor/vert DCT (2)
Hui Su's avatar
Hui Su committed
339
  EXT_TX_SET_DTT4_IDTX_1DDCT,
340 341
  // Discrete Trig transforms w/ flip (9) + Identity (1)
  EXT_TX_SET_DTT9_IDTX,
Hui Su's avatar
Hui Su committed
342 343 344
  // 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)
345 346 347
  // for 16x16 only
  EXT_TX_SET_ALL16_16X16,
  // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver (6)
Hui Su's avatar
Hui Su committed
348 349 350 351
  EXT_TX_SET_ALL16,
  EXT_TX_SET_TYPES
} TxSetType;

352 353
#define IS_2D_TRANSFORM(tx_type) (tx_type < IDTX)

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

Sebastien Alaiwan's avatar
Sebastien Alaiwan committed
365
#define EXT_TX_SIZES 4       // number of sizes that use extended transforms
clang-format's avatar
clang-format committed
366 367
#define EXT_TX_SETS_INTER 4  // Sets of transform selections for INTER
#define EXT_TX_SETS_INTRA 3  // Sets of transform selections for INTRA
368

Yaowu Xu's avatar
Yaowu Xu committed
369
typedef enum ATTRIBUTE_PACKED {
Yaowu Xu's avatar
Yaowu Xu committed
370 371 372 373 374
  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,
375 376 377
  AOM_ALT2_FLAG = 1 << 5,
  AOM_ALT_FLAG = 1 << 6,
  AOM_REFFRAME_ALL = (1 << 7) - 1
Yaowu Xu's avatar
Yaowu Xu committed
378
} AOM_REFFRAME;
Jingning Han's avatar
Jingning Han committed
379

Zoe Liu's avatar
Zoe Liu committed
380
#if CONFIG_EXT_COMP_REFS
Yaowu Xu's avatar
Yaowu Xu committed
381
typedef enum ATTRIBUTE_PACKED {
382 383 384
  UNIDIR_COMP_REFERENCE,
  BIDIR_COMP_REFERENCE,
  COMP_REFERENCE_TYPES,
Zoe Liu's avatar
Zoe Liu committed
385 386 387
} COMP_REFERENCE_TYPE;
#endif  // CONFIG_EXT_COMP_REFS

Yaowu Xu's avatar
Yaowu Xu committed
388 389 390 391 392
typedef enum ATTRIBUTE_PACKED {
  PLANE_TYPE_Y,
  PLANE_TYPE_UV,
  PLANE_TYPES
} PLANE_TYPE;
Jingning Han's avatar
Jingning Han committed
393

394
#if CONFIG_CFL
395 396 397 398 399
#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
400

Yaowu Xu's avatar
Yaowu Xu committed
401 402 403 404 405
typedef enum ATTRIBUTE_PACKED {
  CFL_PRED_U,
  CFL_PRED_V,
  CFL_PRED_PLANES
} CFL_PRED_TYPE;
406

Yaowu Xu's avatar
Yaowu Xu committed
407
typedef enum ATTRIBUTE_PACKED {
408 409 410
  CFL_SIGN_ZERO,
  CFL_SIGN_NEG,
  CFL_SIGN_POS,
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427
  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)
428 429
#endif

Yaowu Xu's avatar
Yaowu Xu committed
430
typedef enum ATTRIBUTE_PACKED {
431 432 433 434
  PALETTE_MAP,
  COLOR_MAP_TYPES,
} COLOR_MAP_TYPE;

Yaowu Xu's avatar
Yaowu Xu committed
435
typedef enum ATTRIBUTE_PACKED {
hui su's avatar
hui su committed
436 437 438 439 440 441 442 443 444 445
  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
446
typedef enum ATTRIBUTE_PACKED {
hui su's avatar
hui su committed
447 448 449 450 451 452 453 454 455 456 457
  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;

458 459
// Note: All directional predictors must be between V_PRED and D63_PRED (both
// inclusive).
460
typedef enum ATTRIBUTE_PACKED {
461 462 463 464 465 466 467 468 469 470
  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)
  SMOOTH_PRED,    // Combination of horizontal and vertical interpolation
Urvang Joshi's avatar
Urvang Joshi committed
471 472
  SMOOTH_V_PRED,  // Vertical interpolation
  SMOOTH_H_PRED,  // Horizontal interpolation
Urvang Joshi's avatar
Urvang Joshi committed
473
  PAETH_PRED,     // Predict from the direction of smallest gradient
474 475
  NEARESTMV,
  NEARMV,
Sarah Parker's avatar
Sarah Parker committed
476
  GLOBALMV,
477
  NEWMV,
478
  // Compound ref compound modes
479 480 481 482 483 484
  NEAREST_NEARESTMV,
  NEAR_NEARMV,
  NEAREST_NEWMV,
  NEW_NEARESTMV,
  NEAR_NEWMV,
  NEW_NEARMV,
Sarah Parker's avatar
Sarah Parker committed
485
  GLOBAL_GLOBALMV,
486 487
  NEW_NEWMV,
  MB_MODE_COUNT,
Urvang Joshi's avatar
Urvang Joshi committed
488
  INTRA_MODES = PAETH_PRED + 1,  // PAETH_PRED has to be the last intra mode.
489
  INTRA_INVALID = MB_MODE_COUNT  // For uv_mode in inter blocks
490
} PREDICTION_MODE;
Jingning Han's avatar
Jingning Han committed
491

Luc Trudeau's avatar
Luc Trudeau committed
492 493 494 495
#if CONFIG_CFL
// TODO(ltrudeau) Do we really want to pack this?
// TODO(ltrudeau) Do we match with PREDICTION_MODE?
typedef enum ATTRIBUTE_PACKED {
496 497 498 499 500 501 502 503 504 505
  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)
  UV_SMOOTH_PRED,    // Combination of horizontal and vertical interpolation
Luc Trudeau's avatar
Luc Trudeau committed
506 507
  UV_SMOOTH_V_PRED,  // Vertical interpolation
  UV_SMOOTH_H_PRED,  // Horizontal interpolation
Urvang Joshi's avatar
Urvang Joshi committed
508
  UV_PAETH_PRED,     // Predict from the direction of smallest gradient
509
  UV_CFL_PRED,       // Chroma-from-Luma
Luc Trudeau's avatar
Luc Trudeau committed
510 511 512 513 514 515 516 517 518 519
  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
520
typedef enum ATTRIBUTE_PACKED {
521
  SIMPLE_TRANSLATION,
Yue Chen's avatar
Yue Chen committed
522
  OBMC_CAUSAL,    // 2-sided OBMC
523
  WARPED_CAUSAL,  // 2-sided WARPED
Yue Chen's avatar
Yue Chen committed
524 525
  MOTION_MODES
} MOTION_MODE;
526

527 528 529 530
#if CONFIG_EXT_WARPED_MOTION
#define MOTION_MODE_CTX 3
#endif  // CONFIG_EXT_WARPED_MOTION

Yaowu Xu's avatar
Yaowu Xu committed
531
typedef enum ATTRIBUTE_PACKED {
532
  II_DC_PRED,
533 534 535 536 537
  II_V_PRED,
  II_H_PRED,
  II_SMOOTH_PRED,
  INTERINTRA_MODES
} INTERINTRA_MODE;
538

539
typedef enum {
540
  COMPOUND_AVERAGE,
541
  COMPOUND_WEDGE,
542
  COMPOUND_SEG,
543 544
  COMPOUND_TYPES,
} COMPOUND_TYPE;
545

546
// TODO(huisu): Consider adding FILTER_SMOOTH_PRED to "FILTER_INTRA_MODE".
547
#if CONFIG_FILTER_INTRA
Yaowu Xu's avatar
Yaowu Xu committed
548
typedef enum ATTRIBUTE_PACKED {
549 550 551 552
  FILTER_DC_PRED,
  FILTER_V_PRED,
  FILTER_H_PRED,
  FILTER_D153_PRED,
Urvang Joshi's avatar
Urvang Joshi committed
553
  FILTER_PAETH_PRED,
554 555 556
  FILTER_INTRA_MODES,
} FILTER_INTRA_MODE;
#endif  // CONFIG_FILTER_INTRA
557 558 559
#if CONFIG_SYMBOLRATE
#define COEFF_LEVELS 18
#endif
560

561
#if CONFIG_EXT_INTRA
562
#define DIRECTIONAL_MODES 8
Joe Young's avatar
Joe Young committed
563 564
#define MAX_ANGLE_DELTA 3
#define ANGLE_STEP 3
565 566
#endif  // CONFIG_EXT_INTRA

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

569 570
#define INTER_COMPOUND_MODES (1 + NEW_NEWMV - NEAREST_NEARESTMV)

Jingning Han's avatar
Jingning Han committed
571
#define SKIP_CONTEXTS 3
Zoe Liu's avatar
Zoe Liu committed
572 573 574
#if CONFIG_EXT_SKIP
#define SKIP_MODE_CONTEXTS 3
#endif  // CONFIG_EXT_SKIP
575

576
#if CONFIG_JNT_COMP
577
#define COMP_INDEX_CONTEXTS 6
578
#define COMP_GROUP_IDX_CONTEXTS 7
579 580
#endif  // CONFIG_JNT_COMP

581
#define NMV_CONTEXTS 3
582

clang-format's avatar
clang-format committed
583
#define NEWMV_MODE_CONTEXTS 7
Sarah Parker's avatar
Sarah Parker committed
584
#define GLOBALMV_MODE_CONTEXTS 2
clang-format's avatar
clang-format committed
585 586
#define REFMV_MODE_CONTEXTS 9
#define DRL_MODE_CONTEXTS 5
587

Sarah Parker's avatar
Sarah Parker committed
588
#define GLOBALMV_OFFSET 3
clang-format's avatar
clang-format committed
589
#define REFMV_OFFSET 4
590

Sarah Parker's avatar
Sarah Parker committed
591 592
#define NEWMV_CTX_MASK ((1 << GLOBALMV_OFFSET) - 1)
#define GLOBALMV_CTX_MASK ((1 << (REFMV_OFFSET - GLOBALMV_OFFSET)) - 1)
593 594
#define REFMV_CTX_MASK ((1 << (8 - REFMV_OFFSET)) - 1)

clang-format's avatar
clang-format committed
595 596 597
#define ALL_ZERO_FLAG_OFFSET 8
#define SKIP_NEARESTMV_OFFSET 9
#define SKIP_NEARMV_OFFSET 10
598
#define SKIP_NEARESTMV_SUB8X8_OFFSET 11
599

Jingning Han's avatar
Jingning Han committed
600
#define INTER_MODE_CONTEXTS 7
601
#define DELTA_Q_SMALL 3
602
#define DELTA_Q_PROBS (DELTA_Q_SMALL)
603
#define DEFAULT_DELTA_Q_RES 4
Fangwen Fu's avatar
Fangwen Fu committed
604 605 606 607 608
#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
609 610 611

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

613
#define MAX_REF_MV_STACK_SIZE 8
614 615 616
#if CONFIG_EXT_PARTITION
#define REF_CAT_LEVEL 640
#else
617
#define REF_CAT_LEVEL 255
618
#endif  // CONFIG_EXT_PARTITION
Jingning Han's avatar
Jingning Han committed
619 620 621 622

#define INTRA_INTER_CONTEXTS 4
#define COMP_INTER_CONTEXTS 5
#define REF_CONTEXTS 5
Zoe Liu's avatar
Zoe Liu committed
623 624 625

#if CONFIG_EXT_COMP_REFS
#define COMP_REF_TYPE_CONTEXTS 5
626
#define UNI_COMP_REF_CONTEXTS 3
Zoe Liu's avatar
Zoe Liu committed
627 628
#endif  // CONFIG_EXT_COMP_REFS

629
#define TXFM_PARTITION_CONTEXTS ((TX_SIZES - TX_8X8) * 6 - 2)
630
typedef uint8_t TXFM_CONTEXT;
631

Emil Keyder's avatar
Emil Keyder committed
632
#define NONE_FRAME -1
clang-format's avatar
clang-format committed
633 634
#define INTRA_FRAME 0
#define LAST_FRAME 1
635

clang-format's avatar
clang-format committed
636 637 638 639
#define LAST2_FRAME 2
#define LAST3_FRAME 3
#define GOLDEN_FRAME 4
#define BWDREF_FRAME 5
640 641
#define ALTREF2_FRAME 6
#define ALTREF_FRAME 7
642
#define LAST_REF_FRAMES (LAST3_FRAME - LAST_FRAME + 1)
643

644 645 646
#define INTER_REFS_PER_FRAME (ALTREF_FRAME - LAST_FRAME + 1)
#define TOTAL_REFS_PER_FRAME (ALTREF_FRAME - INTRA_FRAME + 1)

647 648 649 650 651 652
#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)
Zoe Liu's avatar
Zoe Liu committed
653
#if CONFIG_EXT_COMP_REFS
Yaowu Xu's avatar
Yaowu Xu committed
654
typedef enum ATTRIBUTE_PACKED {
Zoe Liu's avatar
Zoe Liu committed
655
  LAST_LAST2_FRAMES,     // { LAST_FRAME, LAST2_FRAME }
656
  LAST_LAST3_FRAMES,     // { LAST_FRAME, LAST3_FRAME }
Zoe Liu's avatar
Zoe Liu committed
657 658 659 660 661 662
  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
clang-format's avatar
clang-format committed
663
#define COMP_REFS (FWD_REFS * BWD_REFS)
Zoe Liu's avatar
Zoe Liu committed
664
#endif  // CONFIG_EXT_COMP_REFS
665

666
#define MODE_CTX_REF_FRAMES (TOTAL_REFS_PER_FRAME + COMP_REFS)
667

668
#if CONFIG_LOOP_RESTORATION
Yaowu Xu's avatar
Yaowu Xu committed
669
typedef enum ATTRIBUTE_PACKED {
670 671 672
  RESTORE_NONE,
  RESTORE_WIENER,
  RESTORE_SGRPROJ,
673
  RESTORE_SWITCHABLE,
674
  RESTORE_SWITCHABLE_TYPES = RESTORE_SWITCHABLE,
675
  RESTORE_TYPES = 4,
676
} RestorationType;
677 678
#endif  // CONFIG_LOOP_RESTORATION

679
#if CONFIG_HORZONLY_FRAME_SUPERRES
680
#define SUPERRES_SCALE_BITS 3
681
#define SUPERRES_SCALE_DENOMINATOR_MIN (SCALE_NUMERATOR + 1)
682
#endif  // CONFIG_HORZONLY_FRAME_SUPERRES
683

Jingning Han's avatar
Jingning Han committed
684 685 686 687
#ifdef __cplusplus
}  // extern "C"
#endif

Yaowu Xu's avatar
Yaowu Xu committed
688
#endif  // AV1_COMMON_ENUMS_H_