1 /* 2 * Copyright 2021 Rockchip Electronics Co. LTD 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __AV1_H__ 18 #define __AV1_H__ 19 20 // OBU types (section 6.2.2). 21 typedef enum { 22 // 0 reserved. 23 AV1_OBU_SEQUENCE_HEADER = 1, 24 AV1_OBU_TEMPORAL_DELIMITER = 2, 25 AV1_OBU_FRAME_HEADER = 3, 26 AV1_OBU_TILE_GROUP = 4, 27 AV1_OBU_METADATA = 5, 28 AV1_OBU_FRAME = 6, 29 AV1_OBU_REDUNDANT_FRAME_HEADER = 7, 30 AV1_OBU_TILE_LIST = 8, 31 // 9-14 reserved. 32 AV1_OBU_PADDING = 15, 33 } AV1_OBU_Type; 34 35 // Metadata types (section 6.7.1). 36 enum { 37 AV1_METADATA_TYPE_HDR_CLL = 1, 38 AV1_METADATA_TYPE_HDR_MDCV = 2, 39 AV1_METADATA_TYPE_SCALABILITY = 3, 40 AV1_METADATA_TYPE_ITUT_T35 = 4, 41 AV1_METADATA_TYPE_TIMECODE = 5, 42 }; 43 44 // Frame types (section 6.8.2). 45 enum { 46 AV1_FRAME_KEY = 0, 47 AV1_FRAME_INTER = 1, 48 AV1_FRAME_INTRA_ONLY = 2, 49 AV1_FRAME_SWITCH = 3, 50 }; 51 52 // Reference frames (section 6.10.24). 53 enum { 54 AV1_REF_FRAME_INTRA = 0, 55 AV1_REF_FRAME_LAST = 1, 56 AV1_REF_FRAME_LAST2 = 2, 57 AV1_REF_FRAME_LAST3 = 3, 58 AV1_REF_FRAME_GOLDEN = 4, 59 AV1_REF_FRAME_BWDREF = 5, 60 AV1_REF_FRAME_ALTREF2 = 6, 61 AV1_REF_FRAME_ALTREF = 7, 62 }; 63 64 // Constants (section 3). 65 enum { 66 AV1_MAX_OPERATING_POINTS = 32, 67 68 AV1_MAX_SB_SIZE = 128, 69 AV1_MI_SIZE = 4, 70 71 AV1_MAX_TILE_WIDTH = 4096, 72 AV1_MAX_TILE_AREA = 4096 * 2304, 73 AV1_MAX_TILE_ROWS = 64, 74 AV1_MAX_TILE_COLS = 64, 75 76 AV1_NUM_REF_FRAMES = 8, 77 AV1_REFS_PER_FRAME = 7, 78 AV1_TOTAL_REFS_PER_FRAME = 8, 79 AV1_PRIMARY_REF_NONE = 7, 80 81 AV1_MAX_SEGMENTS = 8, 82 AV1_SEG_LVL_MAX = 8, 83 84 AV1_SEG_LVL_ALT_Q = 0, 85 AV1_SEG_LVL_ALT_LF_Y_V = 1, 86 AV1_SEG_LVL_REF_FRAME = 5, 87 AV1_SEG_LVL_SKIP = 6, 88 AV1_SEG_LVL_GLOBAL_MV = 7, 89 90 AV1_SELECT_SCREEN_CONTENT_TOOLS = 2, 91 AV1_SELECT_INTEGER_MV = 2, 92 93 AV1_SUPERRES_NUM = 8, 94 AV1_SUPERRES_DENOM_MIN = 9, 95 96 AV1_INTERPOLATION_FILTER_SWITCHABLE = 4, 97 98 AV1_GM_ABS_ALPHA_BITS = 12, 99 AV1_GM_ALPHA_PREC_BITS = 15, 100 AV1_GM_ABS_TRANS_ONLY_BITS = 9, 101 AV1_GM_TRANS_ONLY_PREC_BITS = 3, 102 AV1_GM_ABS_TRANS_BITS = 12, 103 AV1_GM_TRANS_PREC_BITS = 6, 104 AV1_WARPEDMODEL_PREC_BITS = 16, 105 106 AV1_WARP_MODEL_IDENTITY = 0, 107 AV1_WARP_MODEL_TRANSLATION = 1, 108 AV1_WARP_MODEL_ROTZOOM = 2, 109 AV1_WARP_MODEL_AFFINE = 3, 110 AV1_WARP_PARAM_REDUCE_BITS = 6, 111 112 AV1_DIV_LUT_BITS = 8, 113 AV1_DIV_LUT_PREC_BITS = 14, 114 AV1_DIV_LUT_NUM = 257, 115 116 AV1_MAX_LOOP_FILTER = 63, 117 }; 118 119 120 // The main colour configuration information uses the same ISO/IEC 23001-8 121 // (H.273) enums as FFmpeg does, so separate definitions are not required. 122 123 // Chroma sample position. 124 enum { 125 AV1_CSP_UNKNOWN = 0, 126 AV1_CSP_VERTICAL = 1, // -> AVCHROMA_LOC_LEFT. 127 AV1_CSP_COLOCATED = 2, // -> AVCHROMA_LOC_TOPLEFT. 128 }; 129 130 // Scalability modes (section 6.7.5) 131 enum { 132 AV1_SCALABILITY_L1T2 = 0, 133 AV1_SCALABILITY_L1T3 = 1, 134 AV1_SCALABILITY_L2T1 = 2, 135 AV1_SCALABILITY_L2T2 = 3, 136 AV1_SCALABILITY_L2T3 = 4, 137 AV1_SCALABILITY_S2T1 = 5, 138 AV1_SCALABILITY_S2T2 = 6, 139 AV1_SCALABILITY_S2T3 = 7, 140 AV1_SCALABILITY_L2T1h = 8, 141 AV1_SCALABILITY_L2T2h = 9, 142 AV1_SCALABILITY_L2T3h = 10, 143 AV1_SCALABILITY_S2T1h = 11, 144 AV1_SCALABILITY_S2T2h = 12, 145 AV1_SCALABILITY_S2T3h = 13, 146 AV1_SCALABILITY_SS = 14, 147 AV1_SCALABILITY_L3T1 = 15, 148 AV1_SCALABILITY_L3T2 = 16, 149 AV1_SCALABILITY_L3T3 = 17, 150 AV1_SCALABILITY_S3T1 = 18, 151 AV1_SCALABILITY_S3T2 = 19, 152 AV1_SCALABILITY_S3T3 = 20, 153 AV1_SCALABILITY_L3T2_KEY = 21, 154 AV1_SCALABILITY_L3T3_KEY = 22, 155 AV1_SCALABILITY_L4T5_KEY = 23, 156 AV1_SCALABILITY_L4T7_KEY = 24, 157 AV1_SCALABILITY_L3T2_KEY_SHIFT = 25, 158 AV1_SCALABILITY_L3T3_KEY_SHIFT = 26, 159 AV1_SCALABILITY_L4T5_KEY_SHIFT = 27, 160 AV1_SCALABILITY_L4T7_KEY_SHIFT = 28, 161 }; 162 163 // Frame Restoration types (section 6.10.15) 164 enum { 165 AV1_RESTORE_NONE = 0, 166 AV1_RESTORE_WIENER = 1, 167 AV1_RESTORE_SGRPROJ = 2, 168 AV1_RESTORE_SWITCHABLE = 3, 169 }; 170 171 #define PROFILE_AV1_MAIN 0 172 #define PROFILE_AV1_HIGH 1 173 #define PROFILE_AV1_PROFESSIONAL 2 174 #define AV1_MAX_TILES 128 175 176 #endif /*__AV1_H__ */ 177