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