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 AVCProfile : int32_t { 167 AVC_PROFILE_BASELINE = 0, 168 AVC_PROFILE_CONSTRAINED_BASELINE = 1, 169 AVC_PROFILE_CONSTRAINED_HIGH = 2, 170 AVC_PROFILE_EXTENDED = 3, 171 AVC_PROFILE_HIGH = 4, 172 AVC_PROFILE_HIGH_10 = 5, 173 AVC_PROFILE_HIGH_422 = 6, 174 AVC_PROFILE_HIGH_444 = 7, 175 AVC_PROFILE_MAIN = 8, 176 }; 177 178 enum HEVCProfile : int32_t { 179 HEVC_PROFILE_MAIN = 0, 180 HEVC_PROFILE_MAIN_10 = 1, 181 HEVC_PROFILE_MAIN_STILL = 2, 182 HEVC_PROFILE_MAIN_10_HDR10 = 3, 183 HEVC_PROFILE_MAIN_10_HDR10_PLUS = 4, 184 HEVC_PROFILE_UNKNOW = -1, 185 }; 186 187 enum MPEG2Profile : int32_t { 188 MPEG2_PROFILE_422 = 0, 189 MPEG2_PROFILE_HIGH = 1, 190 MPEG2_PROFILE_MAIN = 2, 191 MPEG2_PROFILE_SNR = 3, 192 MPEG2_PROFILE_SIMPLE = 4, 193 MPEG2_PROFILE_SPATIAL = 5, 194 }; 195 196 enum MPEG4Profile : int32_t { 197 MPEG4_PROFILE_ADVANCED_CODING = 0, 198 MPEG4_PROFILE_ADVANCED_CORE = 1, 199 MPEG4_PROFILE_ADVANCED_REAL_TIME = 2, 200 MPEG4_PROFILE_ADVANCED_SCALABLE = 3, 201 MPEG4_PROFILE_ADVANCED_SIMPLE = 4, 202 MPEG4_PROFILE_BASIC_ANIMATED = 5, 203 MPEG4_PROFILE_CORE = 6, 204 MPEG4_PROFILE_CORE_SCALABLE = 7, 205 MPEG4_PROFILE_HYBRID = 8, 206 MPEG4_PROFILE_MAIN = 9, 207 MPEG4_PROFILE_NBIT = 10, 208 MPEG4_PROFILE_SCALABLE_TEXTURE = 11, 209 MPEG4_PROFILE_SIMPLE = 12, 210 MPEG4_PROFILE_SIMPLE_FBA = 13, 211 MPEG4_PROFILE_SIMPLE_FACE = 14, 212 MPEG4_PROFILE_SIMPLE_SCALABLE = 15, 213 }; 214 215 enum H263Profile : int32_t { 216 H263_PROFILE_BACKWARD_COMPATIBLE = 0, 217 H263_PROFILE_BASELINE = 1, 218 H263_PROFILE_H320_CODING = 2, 219 H263_PROFILE_HIGH_COMPRESSION = 3, 220 H263_PROFILE_HIGH_LATENCY = 4, 221 H263_PROFILE_ISW_V2 = 5, 222 H263_PROFILE_ISW_V3 = 6, 223 H263_PROFILE_INTERLACE = 7, 224 H263_PROFILE_INTERNET = 8, 225 }; 226 227 enum VP8Profile : int32_t { 228 VP8_PROFILE_MAIN = 0, 229 }; 230 231 enum AVCLevel : int32_t { 232 AVC_LEVEL_1 = 0, 233 AVC_LEVEL_1b = 1, 234 AVC_LEVEL_11 = 2, 235 AVC_LEVEL_12 = 3, 236 AVC_LEVEL_13 = 4, 237 AVC_LEVEL_2 = 5, 238 AVC_LEVEL_21 = 6, 239 AVC_LEVEL_22 = 7, 240 AVC_LEVEL_3 = 8, 241 AVC_LEVEL_31 = 9, 242 AVC_LEVEL_32 = 10, 243 AVC_LEVEL_4 = 11, 244 AVC_LEVEL_41 = 12, 245 AVC_LEVEL_42 = 13, 246 AVC_LEVEL_5 = 14, 247 AVC_LEVEL_51 = 15, 248 }; 249 250 enum HEVCLevel : int32_t { 251 HEVC_LEVEL_1 = 0, 252 HEVC_LEVEL_2 = 1, 253 HEVC_LEVEL_21 = 2, 254 HEVC_LEVEL_3 = 3, 255 HEVC_LEVEL_31 = 4, 256 HEVC_LEVEL_4 = 5, 257 HEVC_LEVEL_41 = 6, 258 HEVC_LEVEL_5 = 7, 259 HEVC_LEVEL_51 = 8, 260 HEVC_LEVEL_52 = 9, 261 HEVC_LEVEL_6 = 10, 262 HEVC_LEVEL_61 = 11, 263 HEVC_LEVEL_62 = 12, 264 HEVC_LEVEL_UNKNOW = -1, 265 }; 266 267 enum MPEG2Level : int32_t { 268 MPEG2_LEVEL_LL = 0, 269 MPEG2_LEVEL_ML = 1, 270 MPEG2_LEVEL_H14 = 2, 271 MPEG2_LEVEL_HL = 3, 272 }; 273 274 enum MPEG4Level : int32_t { 275 MPEG4_LEVEL_0 = 0, 276 MPEG4_LEVEL_0B = 1, 277 MPEG4_LEVEL_1 = 2, 278 MPEG4_LEVEL_2 = 3, 279 MPEG4_LEVEL_3 = 4, 280 MPEG4_LEVEL_4 = 5, 281 MPEG4_LEVEL_4A = 6, 282 MPEG4_LEVEL_5 = 7, 283 }; 284 } // namespace Plugins 285 } // namespace Media 286 } // namespace OHOS 287 #endif // MEDIA_FOUNDATION_VIDEO_TYPES_H 288