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 VIDEO_SCALE_TYPE_SCALED_ASPECT, 28 }; 29 30 /** 31 * @enum Video Pixel Format. 32 * 33 * @since 1.0 34 * @version 1.0 35 */ 36 enum struct VideoPixelFormat : int32_t { 37 UNKNOWN = -1, 38 YUV420P = 0, ///< planar YUV 4:2:0, 1 Cr & Cb sample per 2x2 Y samples 39 YUVI420 = 1, ///< planar YUV 4:2:0, 1 Cr & Cb sample per 2x2 Y samples 40 NV12 = 2, ///< semi-planar YUV 4:2:0, UVUV... 41 NV21 = 3, ///< semi-planar YUV 4:2:0, VUVU... 42 SURFACE_FORMAT = 4, ///< format from surface 43 RGBA = 5, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... 44 YUV410P, ///< planar YUV 4:1:0, 1 Cr & Cb sample per 4x4 Y samples 45 YUV411P, ///< planar YUV 4:1:1, 1 Cr & Cb sample per 4x1 Y samples 46 YUYV422, ///< packed YUV 4:2:2, Y0 Cb Y1 Cr 47 YUV422P, ///< planar YUV 4:2:2, 1 Cr & Cb sample per 2x1 Y samples 48 YUV444P, ///< planar YUV 4:4:4, 1 Cr & Cb sample per 1x1 Y samples 49 ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... 50 ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... 51 BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... 52 RGB24, ///< packed RGB 8:8:8, RGBRGB... 53 BGR24, ///< packed RGB 8:8:8, BGRBGR... 54 PAL8, ///< 8 bit with AV_PIX_FMT_RGB32 palette 55 GRAY8, ///< Y 56 MONOWHITE, ///< Y, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb 57 MONOBLACK, ///< Y, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb 58 YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG) 59 YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG) 60 YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG) 61 }; 62 63 /** 64 * @enum Video H264/AVC profile. 65 * 66 * @since 1.0 67 * @version 1.0 68 */ 69 enum struct VideoH264Profile : int32_t { 70 UNKNOWN, 71 BASELINE, ///< Baseline profile 72 MAIN, ///< Main profile 73 EXTENDED, ///< Extended profile 74 HIGH, ///< High profile 75 HIGH10, ///< High 10 profile 76 HIGH422, ///< High 4:2:2 profile 77 HIGH444, ///< High 4:4:4 profile 78 }; 79 80 /** 81 * @enum Video Bit Stream format. 82 * 83 * @since 1.0 84 * @version 1.0 85 */ 86 enum struct VideoBitStreamFormat : uint32_t { 87 UNKNOWN, 88 AVC1, // H264 bit stream format 89 HEVC, // H265 bit stream format 90 ANNEXB, // H264, H265 bit stream format 91 }; 92 93 enum VideoEncodeBitrateMode : int32_t { 94 CBR = 0, // constant bit rate mode. 95 VBR = 1, // variable bit rate mode. 96 CQ = 2, // constant quality mode. 97 SQR = 3, // stable quality rate control mode. 98 CBR_VIDEOCALL = 10, // constant bit rate mode for video call or meeting scene. 99 CRF = 11, // constant rate factor. 100 }; 101 102 enum VideoEncodeBFrameGopMode : int32_t { 103 VIDEO_ENCODE_GOP_ADAPTIVE_B_MODE = 1, // adaptive gop mode for b frame 104 VIDEO_ENCODE_GOP_H3B_MODE = 2, // only h3b mode for b freme 105 }; 106 107 enum class ColorPrimary : int32_t { 108 BT709 = 1, 109 UNSPECIFIED = 2, 110 BT470_M = 4, 111 BT601_625 = 5, 112 BT601_525 = 6, 113 SMPTE_ST240 = 7, 114 GENERIC_FILM = 8, 115 BT2020 = 9, 116 SMPTE_ST428 = 10, 117 P3DCI = 11, 118 P3D65 = 12, 119 }; 120 121 enum class TransferCharacteristic : int32_t { 122 BT709 = 1, 123 UNSPECIFIED = 2, 124 GAMMA_2_2 = 4, 125 GAMMA_2_8 = 5, 126 BT601 = 6, 127 SMPTE_ST240 = 7, 128 LINEAR = 8, 129 LOG = 9, 130 LOG_SQRT = 10, 131 IEC_61966_2_4 = 11, 132 BT1361 = 12, 133 IEC_61966_2_1 = 13, 134 BT2020_10BIT = 14, 135 BT2020_12BIT = 15, 136 PQ = 16, 137 SMPTE_ST428 = 17, 138 HLG = 18, 139 }; 140 141 enum class MatrixCoefficient : int32_t { 142 IDENTITY = 0, 143 BT709 = 1, 144 UNSPECIFIED = 2, 145 FCC = 4, 146 BT601_625 = 5, 147 BT601_525 = 6, 148 SMPTE_ST240 = 7, 149 YCGCO = 8, 150 BT2020_NCL = 9, 151 BT2020_CL = 10, 152 SMPTE_ST2085 = 11, 153 CHROMATICITY_NCL = 12, 154 CHROMATICITY_CL = 13, 155 ICTCP = 14, 156 }; 157 158 enum class ChromaLocation { 159 UNSPECIFIED = 0, 160 LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 161 CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 162 TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 163 TOP = 4, 164 BOTTOMLEFT = 5, 165 BOTTOM = 6, 166 }; 167 168 enum VideoRotation : int32_t { 169 VIDEO_ROTATION_0 = 0, 170 VIDEO_ROTATION_90 = 90, 171 VIDEO_ROTATION_180 = 180, 172 VIDEO_ROTATION_270 = 270, 173 }; 174 175 enum VideoOrientationType : int32_t { 176 ROTATE_NONE = 0, /**< No rotation */ 177 ROTATE_90, /**< Rotation by 90 degrees */ 178 ROTATE_180, /**< Rotation by 180 degrees */ 179 ROTATE_270, /**< Rotation by 270 degrees */ 180 FLIP_H, /**< Flip horizontally */ 181 FLIP_V, /**< Flip vertically */ 182 FLIP_H_ROT90, /**< Flip horizontally and rotate 90 degrees */ 183 FLIP_V_ROT90, /**< Flip vertically and rotate 90 degrees */ 184 FLIP_H_ROT180, /**< Flip horizontally and rotate 180 degrees */ 185 FLIP_V_ROT180, /**< Flip vertically and rotate 180 degrees */ 186 FLIP_H_ROT270, /**< Flip horizontally and rotate 270 degrees */ 187 FLIP_V_ROT270 /**< Flip vertically and rotate 270 degrees */ 188 }; 189 190 enum AVCProfile : int32_t { 191 AVC_PROFILE_BASELINE = 0, 192 AVC_PROFILE_CONSTRAINED_BASELINE = 1, 193 AVC_PROFILE_CONSTRAINED_HIGH = 2, 194 AVC_PROFILE_EXTENDED = 3, 195 AVC_PROFILE_HIGH = 4, 196 AVC_PROFILE_HIGH_10 = 5, 197 AVC_PROFILE_HIGH_422 = 6, 198 AVC_PROFILE_HIGH_444 = 7, 199 AVC_PROFILE_MAIN = 8, 200 }; 201 202 enum HEVCProfile : int32_t { 203 HEVC_PROFILE_MAIN = 0, 204 HEVC_PROFILE_MAIN_10 = 1, 205 HEVC_PROFILE_MAIN_STILL = 2, 206 HEVC_PROFILE_MAIN_10_HDR10 = 3, 207 HEVC_PROFILE_MAIN_10_HDR10_PLUS = 4, 208 HEVC_PROFILE_UNKNOW = -1, 209 }; 210 211 enum MPEG2Profile : int32_t { 212 MPEG2_PROFILE_SIMPLE = 0, 213 MPEG2_PROFILE_MAIN = 1, 214 MPEG2_PROFILE_SNR = 2, 215 MPEG2_PROFILE_SPATIAL = 3, 216 MPEG2_PROFILE_HIGH = 4, 217 MPEG2_PROFILE_422 = 5, 218 }; 219 220 enum MPEG4Profile : int32_t { 221 MPEG4_PROFILE_SIMPLE = 0, 222 MPEG4_PROFILE_SIMPLE_SCALABLE = 1, 223 MPEG4_PROFILE_CORE = 2, 224 MPEG4_PROFILE_MAIN = 3, 225 MPEG4_PROFILE_NBIT = 4, 226 MPEG4_PROFILE_HYBRID = 5, 227 MPEG4_PROFILE_BASIC_ANIMATED_TEXTURE = 6, 228 MPEG4_PROFILE_SCALABLE_TEXTURE = 7, 229 MPEG4_PROFILE_SIMPLE_FA = 8, 230 MPEG4_PROFILE_ADVANCED_REAL_TIME_SIMPLE = 9, 231 MPEG4_PROFILE_CORE_SCALABLE = 10, 232 MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY = 11, 233 MPEG4_PROFILE_ADVANCED_CORE = 12, 234 MPEG4_PROFILE_ADVANCED_SCALABLE_TEXTURE = 13, 235 MPEG4_PROFILE_SIMPLE_FBA = 14, 236 MPEG4_PROFILE_SIMPLE_STUDIO = 15, 237 MPEG4_PROFILE_CORE_STUDIO = 16, 238 MPEG4_PROFILE_ADVANCED_SIMPLE = 17, 239 MPEG4_PROFILE_FINE_GRANULARITY_SCALABLE = 18, 240 }; 241 242 enum H263Profile : int32_t { 243 H263_PROFILE_BASELINE = 0, 244 H263_PROFILE_H320_CODING_EFFICIENCY_VERSION2_BACKWARD_COMPATIBILITY = 1, // ffmpeg not support 245 H263_PROFILE_VERSION_1_BACKWARD_COMPATIBILITY = 2, 246 H263_PROFILE_VERSION_2_INTERACTIVE_AND_STREAMING_WIRELESS = 3, // ffmpeg not support 247 H263_PROFILE_VERSION_3_INTERACTIVE_AND_STREAMING_WIRELESS = 4, // ffmpeg not support 248 H263_PROFILE_CONVERSATIONAL_HIGH_COMPRESSION = 5, // ffmpeg not support 249 H263_PROFILE_CONVERSATIONAL_INTERNET = 6, // ffmpeg not support 250 H263_PROFILE_CONVERSATIONAL_PLUS_INTERLACE = 7, // ffmpeg not support 251 H263_PROFILE_HIGH_LATENCY = 8 // ffmpeg not support 252 }; 253 254 enum VP8Profile : int32_t { 255 VP8_PROFILE_MAIN = 0, 256 }; 257 258 enum AVCLevel : int32_t { 259 AVC_LEVEL_1 = 0, 260 AVC_LEVEL_1b = 1, 261 AVC_LEVEL_11 = 2, 262 AVC_LEVEL_12 = 3, 263 AVC_LEVEL_13 = 4, 264 AVC_LEVEL_2 = 5, 265 AVC_LEVEL_21 = 6, 266 AVC_LEVEL_22 = 7, 267 AVC_LEVEL_3 = 8, 268 AVC_LEVEL_31 = 9, 269 AVC_LEVEL_32 = 10, 270 AVC_LEVEL_4 = 11, 271 AVC_LEVEL_41 = 12, 272 AVC_LEVEL_42 = 13, 273 AVC_LEVEL_5 = 14, 274 AVC_LEVEL_51 = 15, 275 AVC_LEVEL_52 = 16, 276 AVC_LEVEL_6 = 17, 277 AVC_LEVEL_61 = 18, 278 AVC_LEVEL_62 = 19, 279 }; 280 281 enum HEVCLevel : int32_t { 282 HEVC_LEVEL_1 = 0, 283 HEVC_LEVEL_2 = 1, 284 HEVC_LEVEL_21 = 2, 285 HEVC_LEVEL_3 = 3, 286 HEVC_LEVEL_31 = 4, 287 HEVC_LEVEL_4 = 5, 288 HEVC_LEVEL_41 = 6, 289 HEVC_LEVEL_5 = 7, 290 HEVC_LEVEL_51 = 8, 291 HEVC_LEVEL_52 = 9, 292 HEVC_LEVEL_6 = 10, 293 HEVC_LEVEL_61 = 11, 294 HEVC_LEVEL_62 = 12, 295 HEVC_LEVEL_UNKNOW = -1, 296 }; 297 298 enum MPEG2Level : int32_t { 299 MPEG2_LEVEL_LL = 0, 300 MPEG2_LEVEL_ML = 1, 301 MPEG2_LEVEL_H14 = 2, 302 MPEG2_LEVEL_HL = 3, 303 }; 304 305 enum MPEG4Level : int32_t { 306 MPEG4_LEVEL_0 = 0, 307 MPEG4_LEVEL_0B = 1, 308 MPEG4_LEVEL_1 = 2, 309 MPEG4_LEVEL_2 = 3, 310 MPEG4_LEVEL_3 = 4, 311 MPEG4_LEVEL_3B = 5, 312 MPEG4_LEVEL_4 = 6, 313 MPEG4_LEVEL_4A = 7, 314 MPEG4_LEVEL_5 = 8, 315 MPEG4_LEVEL_6 = 9, 316 }; 317 318 enum H263Level : int32_t { 319 H263_LEVEL_10 = 0, 320 H263_LEVEL_20 = 1, 321 H263_LEVEL_30 = 2, 322 H263_LEVEL_40 = 3, 323 H263_LEVEL_45 = 4, 324 H263_LEVEL_50 = 5, 325 H263_LEVEL_60 = 6, 326 H263_LEVEL_70 = 7 327 }; 328 329 /** 330 * @enum Temporal group of picture reference mode. 331 * 332 * @since 5.0 333 */ 334 enum class TemporalGopReferenceMode : int32_t { 335 ADJACENT_REFERENCE = 0, 336 JUMP_REFERENCE = 1, 337 UNIFORMLY_SCALED_REFERENCE = 2, 338 UNKNOWN, 339 }; 340 } // namespace Plugins 341 } // namespace Media 342 } // namespace OHOS 343 #endif // MEDIA_FOUNDATION_VIDEO_TYPES_H 344