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