1 /* 2 * Copyright (c) 2021-2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef MEDIA_FOUNDATION_VIDEO_TYPES_H 17 #define MEDIA_FOUNDATION_VIDEO_TYPES_H 18 19 #include <cstdint> // NOLINT: used it 20 21 namespace OHOS { 22 namespace Media { 23 namespace Plugins { 24 enum class VideoScaleType { 25 VIDEO_SCALE_TYPE_FIT, 26 VIDEO_SCALE_TYPE_FIT_CROP, 27 }; 28 29 /** 30 * @enum Video Pixel Format. 31 * 32 * @since 1.0 33 * @version 1.0 34 */ 35 enum struct VideoPixelFormat : int32_t { 36 UNKNOWN = -1, 37 YUV420P = 0, ///< planar YUV 4:2:0, 1 Cr & Cb sample per 2x2 Y samples 38 YUVI420 = 1, ///< planar YUV 4:2:0, 1 Cr & Cb sample per 2x2 Y samples 39 NV12 = 2, ///< semi-planar YUV 4:2:0, UVUV... 40 NV21 = 3, ///< semi-planar YUV 4:2:0, VUVU... 41 SURFACE_FORMAT = 4, ///< format from surface 42 RGBA = 5, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... 43 YUV410P, ///< planar YUV 4:1:0, 1 Cr & Cb sample per 4x4 Y samples 44 YUV411P, ///< planar YUV 4:1:1, 1 Cr & Cb sample per 4x1 Y samples 45 YUYV422, ///< packed YUV 4:2:2, Y0 Cb Y1 Cr 46 YUV422P, ///< planar YUV 4:2:2, 1 Cr & Cb sample per 2x1 Y samples 47 YUV444P, ///< planar YUV 4:4:4, 1 Cr & Cb sample per 1x1 Y samples 48 ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... 49 ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... 50 BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... 51 RGB24, ///< packed RGB 8:8:8, RGBRGB... 52 BGR24, ///< packed RGB 8:8:8, BGRBGR... 53 PAL8, ///< 8 bit with AV_PIX_FMT_RGB32 palette 54 GRAY8, ///< Y 55 MONOWHITE, ///< Y, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb 56 MONOBLACK, ///< Y, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb 57 YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG) 58 YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG) 59 YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG) 60 }; 61 62 /** 63 * @enum Video H264/AVC profile. 64 * 65 * @since 1.0 66 * @version 1.0 67 */ 68 enum struct VideoH264Profile : int32_t { 69 UNKNOWN, 70 BASELINE, ///< Baseline profile 71 MAIN, ///< Main profile 72 EXTENDED, ///< Extended profile 73 HIGH, ///< High profile 74 HIGH10, ///< High 10 profile 75 HIGH422, ///< High 4:2:2 profile 76 HIGH444, ///< High 4:4:4 profile 77 }; 78 79 /** 80 * @enum Video Bit Stream format. 81 * 82 * @since 1.0 83 * @version 1.0 84 */ 85 enum struct VideoBitStreamFormat : uint32_t { 86 UNKNOWN, 87 AVC1, // H264 bit stream format 88 HEVC, // H265 bit stream format 89 ANNEXB, // H264, H265 bit stream format 90 }; 91 92 enum VideoEncodeBitrateMode : int32_t { 93 CBR = 0, // constant bit rate mode. 94 VBR = 1, // variable bit rate mode. 95 CQ = 2, // constant quality mode. 96 }; 97 98 enum class ColorPrimary : int32_t { 99 BT709 = 1, 100 UNSPECIFIED = 2, 101 BT470_M = 4, 102 BT601_625 = 5, 103 BT601_525 = 6, 104 SMPTE_ST240 = 7, 105 GENERIC_FILM = 8, 106 BT2020 = 9, 107 SMPTE_ST428 = 10, 108 P3DCI = 11, 109 P3D65 = 12, 110 }; 111 112 enum class TransferCharacteristic : int32_t { 113 BT709 = 1, 114 UNSPECIFIED = 2, 115 GAMMA_2_2 = 4, 116 GAMMA_2_8 = 5, 117 BT601 = 6, 118 SMPTE_ST240 = 7, 119 LINEAR = 8, 120 LOG = 9, 121 LOG_SQRT = 10, 122 IEC_61966_2_4 = 11, 123 BT1361 = 12, 124 IEC_61966_2_1 = 13, 125 BT2020_10BIT = 14, 126 BT2020_12BIT = 15, 127 PQ = 16, 128 SMPTE_ST428 = 17, 129 HLG = 18, 130 }; 131 132 enum class MatrixCoefficient : int32_t { 133 IDENTITY = 0, 134 BT709 = 1, 135 UNSPECIFIED = 2, 136 FCC = 4, 137 BT601_625 = 5, 138 BT601_525 = 6, 139 SMPTE_ST240 = 7, 140 YCGCO = 8, 141 BT2020_NCL = 9, 142 BT2020_CL = 10, 143 SMPTE_ST2085 = 11, 144 CHROMATICITY_NCL = 12, 145 CHROMATICITY_CL = 13, 146 ICTCP = 14, 147 }; 148 149 enum class ChromaLocation { 150 UNSPECIFIED = 0, 151 LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 152 CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 153 TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 154 TOP = 4, 155 BOTTOMLEFT = 5, 156 BOTTOM = 6, 157 }; 158 159 enum VideoRotation : int32_t { 160 VIDEO_ROTATION_0 = 0, 161 VIDEO_ROTATION_90 = 90, 162 VIDEO_ROTATION_180 = 180, 163 VIDEO_ROTATION_270 = 270, 164 }; 165 166 enum VideoOrientationType : int32_t { 167 ROTATE_NONE = 0, /**< No rotation */ 168 ROTATE_90, /**< Rotation by 90 degrees */ 169 ROTATE_180, /**< Rotation by 180 degrees */ 170 ROTATE_270, /**< Rotation by 270 degrees */ 171 FLIP_H, /**< Flip horizontally */ 172 FLIP_V, /**< Flip vertically */ 173 FLIP_H_ROT90, /**< Flip horizontally and rotate 90 degrees */ 174 FLIP_V_ROT90, /**< Flip vertically and rotate 90 degrees */ 175 FLIP_H_ROT180, /**< Flip horizontally and rotate 180 degrees */ 176 FLIP_V_ROT180, /**< Flip vertically and rotate 180 degrees */ 177 FLIP_H_ROT270, /**< Flip horizontally and rotate 270 degrees */ 178 FLIP_V_ROT270 /**< Flip vertically and rotate 270 degrees */ 179 }; 180 181 enum AVCProfile : int32_t { 182 AVC_PROFILE_BASELINE = 0, 183 AVC_PROFILE_CONSTRAINED_BASELINE = 1, 184 AVC_PROFILE_CONSTRAINED_HIGH = 2, 185 AVC_PROFILE_EXTENDED = 3, 186 AVC_PROFILE_HIGH = 4, 187 AVC_PROFILE_HIGH_10 = 5, 188 AVC_PROFILE_HIGH_422 = 6, 189 AVC_PROFILE_HIGH_444 = 7, 190 AVC_PROFILE_MAIN = 8, 191 }; 192 193 enum HEVCProfile : int32_t { 194 HEVC_PROFILE_MAIN = 0, 195 HEVC_PROFILE_MAIN_10 = 1, 196 HEVC_PROFILE_MAIN_STILL = 2, 197 HEVC_PROFILE_MAIN_10_HDR10 = 3, 198 HEVC_PROFILE_MAIN_10_HDR10_PLUS = 4, 199 HEVC_PROFILE_UNKNOW = -1, 200 }; 201 202 enum MPEG2Profile : int32_t { 203 MPEG2_PROFILE_422 = 0, 204 MPEG2_PROFILE_HIGH = 1, 205 MPEG2_PROFILE_MAIN = 2, 206 MPEG2_PROFILE_SNR = 3, 207 MPEG2_PROFILE_SIMPLE = 4, 208 MPEG2_PROFILE_SPATIAL = 5, 209 }; 210 211 enum MPEG4Profile : int32_t { 212 MPEG4_PROFILE_ADVANCED_CODING = 0, 213 MPEG4_PROFILE_ADVANCED_CORE = 1, 214 MPEG4_PROFILE_ADVANCED_REAL_TIME = 2, 215 MPEG4_PROFILE_ADVANCED_SCALABLE = 3, 216 MPEG4_PROFILE_ADVANCED_SIMPLE = 4, 217 MPEG4_PROFILE_BASIC_ANIMATED = 5, 218 MPEG4_PROFILE_CORE = 6, 219 MPEG4_PROFILE_CORE_SCALABLE = 7, 220 MPEG4_PROFILE_HYBRID = 8, 221 MPEG4_PROFILE_MAIN = 9, 222 MPEG4_PROFILE_NBIT = 10, 223 MPEG4_PROFILE_SCALABLE_TEXTURE = 11, 224 MPEG4_PROFILE_SIMPLE = 12, 225 MPEG4_PROFILE_SIMPLE_FBA = 13, 226 MPEG4_PROFILE_SIMPLE_FACE = 14, 227 MPEG4_PROFILE_SIMPLE_SCALABLE = 15, 228 }; 229 230 enum H263Profile : int32_t { 231 H263_PROFILE_BACKWARD_COMPATIBLE = 0, 232 H263_PROFILE_BASELINE = 1, 233 H263_PROFILE_H320_CODING = 2, 234 H263_PROFILE_HIGH_COMPRESSION = 3, 235 H263_PROFILE_HIGH_LATENCY = 4, 236 H263_PROFILE_ISW_V2 = 5, 237 H263_PROFILE_ISW_V3 = 6, 238 H263_PROFILE_INTERLACE = 7, 239 H263_PROFILE_INTERNET = 8, 240 }; 241 242 enum VP8Profile : int32_t { 243 VP8_PROFILE_MAIN = 0, 244 }; 245 246 enum AVCLevel : int32_t { 247 AVC_LEVEL_1 = 0, 248 AVC_LEVEL_1b = 1, 249 AVC_LEVEL_11 = 2, 250 AVC_LEVEL_12 = 3, 251 AVC_LEVEL_13 = 4, 252 AVC_LEVEL_2 = 5, 253 AVC_LEVEL_21 = 6, 254 AVC_LEVEL_22 = 7, 255 AVC_LEVEL_3 = 8, 256 AVC_LEVEL_31 = 9, 257 AVC_LEVEL_32 = 10, 258 AVC_LEVEL_4 = 11, 259 AVC_LEVEL_41 = 12, 260 AVC_LEVEL_42 = 13, 261 AVC_LEVEL_5 = 14, 262 AVC_LEVEL_51 = 15, 263 AVC_LEVEL_52 = 16, 264 AVC_LEVEL_6 = 17, 265 AVC_LEVEL_61 = 18, 266 AVC_LEVEL_62 = 19, 267 }; 268 269 enum HEVCLevel : int32_t { 270 HEVC_LEVEL_1 = 0, 271 HEVC_LEVEL_2 = 1, 272 HEVC_LEVEL_21 = 2, 273 HEVC_LEVEL_3 = 3, 274 HEVC_LEVEL_31 = 4, 275 HEVC_LEVEL_4 = 5, 276 HEVC_LEVEL_41 = 6, 277 HEVC_LEVEL_5 = 7, 278 HEVC_LEVEL_51 = 8, 279 HEVC_LEVEL_52 = 9, 280 HEVC_LEVEL_6 = 10, 281 HEVC_LEVEL_61 = 11, 282 HEVC_LEVEL_62 = 12, 283 HEVC_LEVEL_UNKNOW = -1, 284 }; 285 286 enum MPEG2Level : int32_t { 287 MPEG2_LEVEL_LL = 0, 288 MPEG2_LEVEL_ML = 1, 289 MPEG2_LEVEL_H14 = 2, 290 MPEG2_LEVEL_HL = 3, 291 }; 292 293 enum MPEG4Level : int32_t { 294 MPEG4_LEVEL_0 = 0, 295 MPEG4_LEVEL_0B = 1, 296 MPEG4_LEVEL_1 = 2, 297 MPEG4_LEVEL_2 = 3, 298 MPEG4_LEVEL_3 = 4, 299 MPEG4_LEVEL_4 = 5, 300 MPEG4_LEVEL_4A = 6, 301 MPEG4_LEVEL_5 = 7, 302 }; 303 /** 304 * @enum Temporal group of picture reference mode. 305 * 306 * @since 5.0 307 */ 308 enum class TemporalGopReferenceMode : int32_t { 309 ADJACENT_REFERENCE = 0, 310 JUMP_REFERENCE = 1, 311 UNIFORMLY_SCALED_REFERENCE = 2, 312 UNKNOWN, 313 }; 314 } // namespace Plugins 315 } // namespace Media 316 } // namespace OHOS 317 #endif // MEDIA_FOUNDATION_VIDEO_TYPES_H 318