• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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