• 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     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