• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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_AVCODEC_DESCRIPTION_H
17 #define MEDIA_AVCODEC_DESCRIPTION_H
18 
19 #include "meta/format.h"
20 
21 namespace OHOS {
22 namespace MediaAVCodec {
23 /**
24  * @brief Provides the uniform key for storing the media description.
25  */
26 using MediaDescription = Media::Format;
27 
28 /**
29  * @brief Provides the key's definition for MediaDescription.
30  */
31 class MediaDescriptionKey {
32 public:
33     /**
34      * Key for track index, value type is uint32_t
35      */
36     static constexpr std::string_view MD_KEY_TRACK_INDEX = "track_index";
37 
38     /**
39      * Key for track type, value type is uint8_t, see {link @MediaTrackType}
40      */
41     static constexpr std::string_view MD_KEY_TRACK_TYPE = "track_type";
42 
43     /**
44      * Key for codec mime type, value type is string
45      */
46     static constexpr std::string_view MD_KEY_CODEC_MIME = "codec_mime";
47 
48     /**
49      * Key for codec name, value type is string
50      */
51     static constexpr std::string_view MD_KEY_CODEC_NAME = "codec_name";
52 
53     /**
54      * Key for duration, value type is int64_t
55      */
56     static constexpr std::string_view MD_KEY_DURATION = "duration";
57 
58     /**
59      * Key for bitrate, value type is int64_t
60      */
61     static constexpr std::string_view MD_KEY_BITRATE = "bitrate";
62 
63     /**
64      * Key for max input size, value type is uint32_t
65      */
66     static constexpr std::string_view MD_KEY_MAX_INPUT_SIZE = "max_input_size";
67 
68     /**
69      * Key for max input buffer count, value type is int32_t
70      */
71     static constexpr std::string_view MD_KEY_MAX_INPUT_BUFFER_COUNT = "max_input_buffer_count";
72 
73     /**
74      * Key for max output buffer count, value type is int32_t
75      */
76     static constexpr std::string_view MD_KEY_MAX_OUTPUT_BUFFER_COUNT = "max_output_buffer_count";
77 
78     /**
79      * Key for video width, value type is int32_t
80      */
81     static constexpr std::string_view MD_KEY_WIDTH = "width";
82 
83     /**
84      * Key for video height, value type is int32_t
85      */
86     static constexpr std::string_view MD_KEY_HEIGHT = "height";
87 
88     /**
89      * Key for video pixelformat, value type is int32_t, see {link @MediaPixelFormat}
90      */
91     static constexpr std::string_view MD_KEY_PIXEL_FORMAT = "pixel_format";
92 
93     /**
94      * Key for video scale type, value type is int32_t
95      */
96     static constexpr std::string_view MD_KEY_SCALE_TYPE = "scale_type";
97 
98     /**
99      * Key for video rotation angle, value type is int32_t
100      */
101     static constexpr std::string_view MD_KEY_ROTATION_ANGLE = "rotation_angle";
102 
103     /**
104      * Key for video frame rate, value type is double.
105      */
106     static constexpr std::string_view MD_KEY_FRAME_RATE = "frame_rate";
107 
108     /**
109      * Key for video capture rate, value type is double
110      */
111     static constexpr std::string_view MD_KEY_CAPTURE_RATE = "capture_rate";
112 
113     /**
114      * Key for the interval of key frame. value type is int32_t, the unit is milliseconds.
115      * A negative value means no key frames are requested after the first frame. A zero
116      * value means a stream containing all key frames is requested.
117      */
118     static constexpr std::string_view MD_KEY_I_FRAME_INTERVAL = "i_frame_interval";
119 
120     /**
121      * Key for the request a I-Frame immediately. value type is boolean
122      */
123     static constexpr std::string_view MD_KEY_REQUEST_I_FRAME = "req_i_frame";
124 
125     /**
126      * Key for video YUV value range flag, value type is bool
127      */
128     static constexpr std::string_view MD_KEY_RANGE_FLAG = "range_flag";
129 
130     /**
131      * Key for video color primaries, value type is int32_t, see {link @ColorPrimary}
132      */
133     static constexpr std::string_view MD_KEY_COLOR_PRIMARIES = "color_primaries";
134 
135     /**
136      * Key for video transfer characteristics, value type is int32_t, see {link @TransferCharacteristic}
137      */
138     static constexpr std::string_view MD_KEY_TRANSFER_CHARACTERISTICS = "transfer_characteristics";
139 
140     /**
141      * Key for video maxtrix coefficients, value type is int32_t, see {link @MaxtrixCoefficient}
142      */
143     static constexpr std::string_view MD_KEY_MATRIX_COEFFICIENTS = "matrix_coefficients";
144 
145     /**
146      * Key for video encode bitrate mode, the value type is int32_t, see {link @VideoEncodeBitrateMode}
147      */
148     static constexpr std::string_view MD_KEY_VIDEO_ENCODE_BITRATE_MODE = "video_encode_bitrate_mode";
149 
150     /**
151      * Key for video encode temporal scalability, the value type is int32_t
152      */
153     static constexpr std::string_view OH_MD_KEY_VIDEO_ENCODER_ENABLE_TEMPORAL_SCALABILITY =
154         "video_encoder_enable_temporal_scalability";
155 
156     /**
157      * Key for encode profile, the value type is int32_t
158      */
159     static constexpr std::string_view MD_KEY_PROFILE = "codec_profile";
160 
161     /**
162      * key for the desired encoding quality, the value type is uint32_t, this key is only supported for encoders that
163      * are configured in constant quality mode
164      */
165     static constexpr std::string_view MD_KEY_QUALITY = "quality";
166 
167     /**
168      * Key for audio channel count, value type is uint32_t
169      */
170     static constexpr std::string_view MD_KEY_CHANNEL_COUNT = "channel_count";
171 
172     /**
173      * Key for audio sample rate, value type is uint32_t
174      */
175     static constexpr std::string_view MD_KEY_SAMPLE_RATE = "sample_rate";
176 
177     /**
178      * Key for track count, value type is uint32_t
179      */
180     static constexpr std::string_view MD_KEY_TRACK_COUNT = "track_count";
181 
182     /**
183      * custom key prefix, media service will pass through to HAL.
184      */
185     static constexpr std::string_view MD_KEY_CUSTOM_PREFIX = "vendor.custom";
186 
187     /**
188      * Key for codec specific data buffer, vlaue type is uint8_t*
189      */
190     static constexpr std::string_view MD_KEY_CODEC_CONFIG = "codec_config";
191 
192     /**
193      * Key for audio channel layout, value type is int64_t
194      */
195     static constexpr std::string_view MD_KEY_CHANNEL_LAYOUT = "channel_layout";
196 
197     /**
198      * Key for audio sample format, value type is uint32_t
199      */
200     static constexpr std::string_view MD_KEY_AUDIO_SAMPLE_FORMAT = "audio_sample_format";
201 
202     /**
203      * Key for the number of bits used to encode each sample, value type is uint32_t
204      */
205     static constexpr std::string_view MD_KEY_BITS_PER_CODED_SAMPLE = "bits_per_coded_sample";
206 
207     /**
208      * Key for aac type, value type is uint32_t
209      */
210     static constexpr std::string_view MD_KEY_AAC_IS_ADTS = "aac_is_adts";
211 
212     /**
213      * Key for aac sbr, value type is uint32_t
214      */
215     static constexpr std::string_view MD_KEY_SBR = "sbr";
216 
217     /**
218      * Key for compliance level, value type is int32_t
219      */
220     static constexpr std::string_view MD_KEY_COMPLIANCE_LEVEL = "compliance_level";
221 
222     /**
223      * Key for vorbis identification header, value type is uint8_t*
224      */
225     static constexpr std::string_view MD_KEY_IDENTIFICATION_HEADER = "identification_header";
226 
227     /**
228      * Key for vorbis setup header, value type is uint8_t*
229      */
230     static constexpr std::string_view MD_KEY_SETUP_HEADER = "setup_header";
231 
232     /**
233      * Key for audio frame size, means samples per frame, value type is int32_t*
234      */
235     static constexpr std::string_view MD_KEY_AUDIO_SAMPLES_PER_FRAME = "audio_samples_per_frame";
236 
237     /**
238      * Key for Number of delayed video frames, value type is uint32_t
239      */
240     static constexpr std::string_view MD_KEY_VIDEO_DELAY = "video_delay";
241 
242     /**
243      * Key for codec compression leve, value type is uint32_t
244      */
245     static constexpr std::string_view MD_KEY_COMPRESSION_LEVEL = "audio_compression_level";
246 
247     /**
248      * Key for encode level, value type is int32_t
249      */
250     static constexpr std::string_view MD_KEY_LEVEL = "codec_level";
251 
252     /**
253      * Key for video chroma location, value type is int32_t
254      */
255     static constexpr std::string_view MD_KEY_CHROMA_LOCATION = "chroma_location";
256 
257     /**
258      * Key for cover of file, value type is uint8_t pointer
259      */
260     static constexpr std::string_view MD_KEY_COVER = "cover";
261 
262     /**
263      * Key for video is hdr vivid, value type is bool
264      */
265     static constexpr std::string_view MD_KEY_VIDEO_IS_HDR_VIVID = "video_is_hdr_vivid";
266 
267     /**
268      * Key for hdr vivid video cuvv configuration box, value type is uint8_t*
269      */
270     static constexpr std::string_view MD_KEY_VIDEO_CUVV_CONFIG_BOX = "cuvv_config_box";
271 
272     /**
273      * Key for timed metadata track data type, value type is string
274      */
275     static constexpr std::string_view MD_KEY_TIMED_METADATA_KEY = "timed_metadata_key";
276 
277     /**
278      * Key for timed metadata source track id, value type is int32_t
279      */
280     static constexpr std::string_view MD_KEY_TIMED_METADATA_SRC_TRACK_ID = "timed_metadata_track_id";
281 
282     /**
283      * Key for video color space of the video decoder output, value type is int32_t. See OH_NativeBuffer_ColorSpace for
284      * value, and only OH_COLORSPACE_BT709_LIMIT is valid.
285      */
286     static constexpr std::string_view MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE = "video_decoder_output_colorspace";
287 
288     /**
289      * Key for max bitrate, value type is int64_t
290      */
291     static constexpr std::string_view MD_KEY_VIDEO_ENCODER_MAX_BITRATE = "max_bitrate";
292 
293     /**
294      * key for the desired encoding quality, the value type is uint32_t, this key is only supported for encoders that
295      * are configured in stable quality rate control mode.
296      */
297     static constexpr std::string_view MD_KEY_VIDEO_ENCODER_SQR_FACTOR = "sqr_factor";
298 private:
299     MediaDescriptionKey() = delete;
300     ~MediaDescriptionKey() = delete;
301 };
302 
303 /**
304  * @brief
305  *
306  * @since 4.0
307  * @version 4.0
308  */
309 enum ColorPrimary : int32_t {
310     COLOR_PRIMARY_BT709 = 1,
311     COLOR_PRIMARY_UNSPECIFIED = 2,
312     COLOR_PRIMARY_BT470_M = 4,
313     COLOR_PRIMARY_BT601_625 = 5,
314     COLOR_PRIMARY_BT601_525 = 6,
315     COLOR_PRIMARY_SMPTE_ST240 = 7,
316     COLOR_PRIMARY_GENERIC_FILM = 8,
317     COLOR_PRIMARY_BT2020 = 9,
318     COLOR_PRIMARY_SMPTE_ST428 = 10,
319     COLOR_PRIMARY_P3DCI = 11,
320     COLOR_PRIMARY_P3D65 = 12,
321 };
322 
323 /**
324  * @brief
325  *
326  * @since 4.0
327  * @version 4.0
328  */
329 enum TransferCharacteristic : int32_t {
330     TRANSFER_CHARACTERISTIC_BT709 = 1,
331     TRANSFER_CHARACTERISTIC_UNSPECIFIED = 2,
332     TRANSFER_CHARACTERISTIC_GAMMA_2_2 = 4,
333     TRANSFER_CHARACTERISTIC_GAMMA_2_8 = 5,
334     TRANSFER_CHARACTERISTIC_BT601 = 6,
335     TRANSFER_CHARACTERISTIC_SMPTE_ST240 = 7,
336     TRANSFER_CHARACTERISTIC_LINEAR = 8,
337     TRANSFER_CHARACTERISTIC_LOG = 9,
338     TRANSFER_CHARACTERISTIC_LOG_SQRT = 10,
339     TRANSFER_CHARACTERISTIC_IEC_61966_2_4 = 11,
340     TRANSFER_CHARACTERISTIC_BT1361 = 12,
341     TRANSFER_CHARACTERISTIC_IEC_61966_2_1 = 13,
342     TRANSFER_CHARACTERISTIC_BT2020_10BIT = 14,
343     TRANSFER_CHARACTERISTIC_BT2020_12BIT = 15,
344     TRANSFER_CHARACTERISTIC_PQ = 16,
345     TRANSFER_CHARACTERISTIC_SMPTE_ST428 = 17,
346     TRANSFER_CHARACTERISTIC_HLG = 18,
347 };
348 
349 /**
350  * @brief
351  *
352  * @since 4.0
353  * @version 4.0
354  */
355 enum MatrixCoefficient : int32_t {
356     MATRIX_COEFFICIENT_IDENTITY = 0,
357     MATRIX_COEFFICIENT_BT709 = 1,
358     MATRIX_COEFFICIENT_UNSPECIFIED = 2,
359     MATRIX_COEFFICIENT_FCC = 4,
360     MATRIX_COEFFICIENT_BT601_625 = 5,
361     MATRIX_COEFFICIENT_BT601_525 = 6,
362     MATRIX_COEFFICIENT_SMPTE_ST240 = 7,
363     MATRIX_COEFFICIENT_YCGCO = 8,
364     MATRIX_COEFFICIENT_BT2020_NCL = 9,
365     MATRIX_COEFFICIENT_BT2020_CL = 10,
366     MATRIX_COEFFICIENT_SMPTE_ST2085 = 11,
367     MATRIX_COEFFICIENT_CHROMATICITY_NCL = 12,
368     MATRIX_COEFFICIENT_CHROMATICITY_CL = 13,
369     MATRIX_COEFFICIENT_ICTCP = 14,
370 };
371 
372 /**
373  * @brief
374  *
375  * @since 4.0
376  * @version 4.0
377  */
378 enum ChromaLocation {
379     CHROMA_LOC_UNSPECIFIED = 0,
380     CHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0
381     CHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0
382     CHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2
383     CHROMA_LOC_TOP = 4,
384     CHROMA_LOC_BOTTOMLEFT = 5,
385     CHROMA_LOC_BOTTOM = 6,
386 };
387 } // namespace MediaAVCodec
388 } // namespace OHOS
389 #endif // MEDIA_AVCODEC_DESCRIPTION_H
390