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 and OH_COLORSPACE_P3_FULL are 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 299 /** 300 * key for the decision of setting moov in front or not, the value type is int32_t 301 */ 302 static constexpr std::string_view MD_KEY_ENABLE_MOOV_FRONT = "fast_start"; 303 static constexpr std::string_view MD_KEY_REFERENCE_TRACK_IDS = "reference_track_ids"; 304 static constexpr std::string_view MD_KEY_TRACK_REFERENCE_TYPE = "track_reference_type"; 305 static constexpr std::string_view MD_KEY_TRACK_DESCRIPTION = "track_description"; 306 static constexpr std::string_view MD_KEY_VIDEO_ENCODER_ENABLE_PTS_BASED_RATECONTROL = 307 "video_encoder_enable_pts_based_ratecontrol"; 308 /** 309 * key for AIGC info, the value type is string 310 */ 311 static constexpr std::string_view MD_KEY_AIGC = "aigc"; 312 private: 313 MediaDescriptionKey() = delete; 314 ~MediaDescriptionKey() = delete; 315 }; 316 317 /** 318 * @brief 319 * 320 * @since 4.0 321 * @version 4.0 322 */ 323 enum ColorPrimary : int32_t { 324 COLOR_PRIMARY_BT709 = 1, 325 COLOR_PRIMARY_UNSPECIFIED = 2, 326 COLOR_PRIMARY_BT470_M = 4, 327 COLOR_PRIMARY_BT601_625 = 5, 328 COLOR_PRIMARY_BT601_525 = 6, 329 COLOR_PRIMARY_SMPTE_ST240 = 7, 330 COLOR_PRIMARY_GENERIC_FILM = 8, 331 COLOR_PRIMARY_BT2020 = 9, 332 COLOR_PRIMARY_SMPTE_ST428 = 10, 333 COLOR_PRIMARY_P3DCI = 11, 334 COLOR_PRIMARY_P3D65 = 12, 335 }; 336 337 /** 338 * @brief 339 * 340 * @since 4.0 341 * @version 4.0 342 */ 343 enum TransferCharacteristic : int32_t { 344 TRANSFER_CHARACTERISTIC_BT709 = 1, 345 TRANSFER_CHARACTERISTIC_UNSPECIFIED = 2, 346 TRANSFER_CHARACTERISTIC_GAMMA_2_2 = 4, 347 TRANSFER_CHARACTERISTIC_GAMMA_2_8 = 5, 348 TRANSFER_CHARACTERISTIC_BT601 = 6, 349 TRANSFER_CHARACTERISTIC_SMPTE_ST240 = 7, 350 TRANSFER_CHARACTERISTIC_LINEAR = 8, 351 TRANSFER_CHARACTERISTIC_LOG = 9, 352 TRANSFER_CHARACTERISTIC_LOG_SQRT = 10, 353 TRANSFER_CHARACTERISTIC_IEC_61966_2_4 = 11, 354 TRANSFER_CHARACTERISTIC_BT1361 = 12, 355 TRANSFER_CHARACTERISTIC_IEC_61966_2_1 = 13, 356 TRANSFER_CHARACTERISTIC_BT2020_10BIT = 14, 357 TRANSFER_CHARACTERISTIC_BT2020_12BIT = 15, 358 TRANSFER_CHARACTERISTIC_PQ = 16, 359 TRANSFER_CHARACTERISTIC_SMPTE_ST428 = 17, 360 TRANSFER_CHARACTERISTIC_HLG = 18, 361 }; 362 363 /** 364 * @brief 365 * 366 * @since 4.0 367 * @version 4.0 368 */ 369 enum MatrixCoefficient : int32_t { 370 MATRIX_COEFFICIENT_IDENTITY = 0, 371 MATRIX_COEFFICIENT_BT709 = 1, 372 MATRIX_COEFFICIENT_UNSPECIFIED = 2, 373 MATRIX_COEFFICIENT_FCC = 4, 374 MATRIX_COEFFICIENT_BT601_625 = 5, 375 MATRIX_COEFFICIENT_BT601_525 = 6, 376 MATRIX_COEFFICIENT_SMPTE_ST240 = 7, 377 MATRIX_COEFFICIENT_YCGCO = 8, 378 MATRIX_COEFFICIENT_BT2020_NCL = 9, 379 MATRIX_COEFFICIENT_BT2020_CL = 10, 380 MATRIX_COEFFICIENT_SMPTE_ST2085 = 11, 381 MATRIX_COEFFICIENT_CHROMATICITY_NCL = 12, 382 MATRIX_COEFFICIENT_CHROMATICITY_CL = 13, 383 MATRIX_COEFFICIENT_ICTCP = 14, 384 }; 385 386 /** 387 * @brief 388 * 389 * @since 4.0 390 * @version 4.0 391 */ 392 enum ChromaLocation { 393 CHROMA_LOC_UNSPECIFIED = 0, 394 CHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 395 CHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 396 CHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 397 CHROMA_LOC_TOP = 4, 398 CHROMA_LOC_BOTTOMLEFT = 5, 399 CHROMA_LOC_BOTTOM = 6, 400 }; 401 } // namespace MediaAVCodec 402 } // namespace OHOS 403 #endif // MEDIA_AVCODEC_DESCRIPTION_H 404